1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-26 00:02:06 +01:00

Fix integer overflow if no max resumption time

is specified by client and server.

Fixes SMACK-653.
This commit is contained in:
Florian Schmaus 2015-04-06 21:55:20 +02:00
parent cca34fd872
commit 3b6891b0d0

View file

@ -1612,7 +1612,7 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
throw new StreamManagementException.StreamManagementNotEnabledException(); throw new StreamManagementException.StreamManagementNotEnabledException();
} }
// Remove the listener after max. 12 hours // Remove the listener after max. 12 hours
final int removeAfterSeconds = Math.min(getMaxSmResumptionTime() + 60, 12 * 60 * 60); final int removeAfterSeconds = Math.min(getMaxSmResumptionTime(), 12 * 60 * 60);
schedule(new Runnable() { schedule(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -1703,8 +1703,13 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
/** /**
* Get the maximum resumption time in seconds after which a managed stream can be resumed. * Get the maximum resumption time in seconds after which a managed stream can be resumed.
* <p>
* This method will return {@link Integer#MAX_VALUE} if neither the client nor the server specify a maximum
* resumption time. Be aware of integer overflows when using this value, e.g. do not add arbitrary values to it
* without checking for overflows before.
* </p>
* *
* @return the maximum resumption time in seconds. * @return the maximum resumption time in seconds or {@link Integer#MAX_VALUE} if none set.
*/ */
public int getMaxSmResumptionTime() { public int getMaxSmResumptionTime() {
int clientResumptionTime = smClientMaxResumptionTime > 0 ? smClientMaxResumptionTime : Integer.MAX_VALUE; int clientResumptionTime = smClientMaxResumptionTime > 0 ? smClientMaxResumptionTime : Integer.MAX_VALUE;