Skip to content

Commit 6a6cd0d

Browse files
author
Ranjan Dasgupta
authored
Merge pull request #887 from AnkurSen-github/Fix_Recursive_call_issue
Fix StackOverflow in MQTTv5 MqttClient and resulting IOOBE in MqttAsyncClient
2 parents e6356aa + 6e21aa9 commit 6a6cd0d

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

org.eclipse.paho.mqttv5.client/src/main/java/org/eclipse/paho/mqttv5/client/MqttAsyncClient.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,8 +1273,12 @@ public IMqttToken subscribe(MqttSubscription[] subscriptions, Object userContext
12731273
public IMqttToken subscribe(MqttSubscription[] subscriptions, Object userContext, MqttActionListener callback,
12741274
IMqttMessageListener messageListener, MqttProperties subscriptionProperties) throws MqttException {
12751275

1276-
int subId = subscriptionProperties.getSubscriptionIdentifiers().get(0);
1277-
1276+
int subId = 0;
1277+
try {
1278+
subId = subscriptionProperties.getSubscriptionIdentifiers().get(0);
1279+
} catch (IndexOutOfBoundsException e) {
1280+
log.fine(CLASS_NAME, "subscribe", "No sub subscription property(s)");
1281+
}
12781282
// Automatic Subscription Identifier Assignment is enabled
12791283
if (connOpts.useSubscriptionIdentifiers() && this.mqttConnection.isSubscriptionIdentifiersAvailable()) {
12801284

org.eclipse.paho.mqttv5.client/src/main/java/org/eclipse/paho/mqttv5/client/MqttClient.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -516,8 +516,13 @@ public IMqttToken subscribe(MqttSubscription[] subscriptions) throws MqttExcepti
516516
* @see org.eclipse.paho.mqttv5.client.IMqttClient#subscribe(java.lang.String,
517517
* int)
518518
*/
519-
public IMqttToken subscribe(String topicFilter, int qos, IMqttMessageListener messageListener) throws MqttException {
520-
return this.subscribe(new String[] { topicFilter }, new int[] { qos }, new IMqttMessageListener[] { messageListener });
519+
public IMqttToken subscribe(String topicFilter, int qos, IMqttMessageListener messageListener)
520+
throws MqttException {
521+
MqttSubscription subscription = new MqttSubscription(topicFilter);
522+
subscription.setQos(qos);
523+
IMqttToken token = aClient.subscribe(subscription, messageListener);
524+
token.waitForCompletion();
525+
return token;
521526
}
522527

523528
public IMqttToken subscribe(String[] topicFilters, int[] qos, IMqttMessageListener[] messageListeners)

0 commit comments

Comments
 (0)