Skip to content

Commit 0d46a58

Browse files
authored
Avoid NPE following ASH error (#1435)
Signed-off-by: Chris Jackson <[email protected]>
1 parent 5da5a48 commit 0d46a58

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/ash/AshFrameHandler.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -869,17 +869,16 @@ public EzspTransaction sendEzspTransaction(EzspTransaction ezspTransaction, long
869869
Future<EzspFrame> futureResponse = sendEzspRequestAsync(ezspTransaction);
870870
if (futureResponse == null) {
871871
logger.debug("ASH: Error sending EZSP transaction: Future is null");
872-
return null;
873-
}
874-
875-
try {
876-
futureResponse.get(timeout, TimeUnit.SECONDS);
877-
} catch (InterruptedException | ExecutionException e) {
878-
futureResponse.cancel(true);
879-
logger.debug("ASH interrupted in sendRequest while sending {}", ezspTransaction.getRequest());
880-
} catch (TimeoutException e) {
881-
futureResponse.cancel(true);
882-
logger.debug("Sending EZSP transaction timed out after {} seconds", timeout);
872+
} else {
873+
try {
874+
futureResponse.get(timeout, TimeUnit.SECONDS);
875+
} catch (InterruptedException | ExecutionException e) {
876+
futureResponse.cancel(true);
877+
logger.debug("ASH interrupted in sendRequest while sending {}", ezspTransaction.getRequest());
878+
} catch (TimeoutException e) {
879+
futureResponse.cancel(true);
880+
logger.debug("Sending EZSP transaction timed out after {} seconds", timeout);
881+
}
883882
}
884883

885884
return ezspTransaction;

com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/transaction/EzspTransaction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public interface EzspTransaction {
5959
* response indicating the final state of the transaction.
6060
*
6161
* @return {@link EmberStatus} indicating the transaction completion state or
62-
* {@link EmberStatus#EMBED_UNKNOWN_STATUS} on error.
62+
* {@link EmberStatus#UNKNOWN} on error.
6363
*/
6464
EmberStatus getStatus();
6565
}

com.zsmartsystems.zigbee.dongle.ember/src/test/java/com/zsmartsystems/zigbee/dongle/ember/internal/ash/AshFrameHandlerTest.java

+17-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.lang.reflect.InvocationTargetException;
2222
import java.lang.reflect.Method;
2323
import java.util.ArrayList;
24-
import java.util.Arrays;
2524
import java.util.List;
2625
import java.util.Map;
2726

@@ -33,6 +32,7 @@
3332
import com.zsmartsystems.zigbee.dongle.ember.ezsp.EzspFrameRequest;
3433
import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspVersionRequest;
3534
import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspVersionResponse;
35+
import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EmberStatus;
3636
import com.zsmartsystems.zigbee.dongle.ember.internal.EzspFrameHandler;
3737
import com.zsmartsystems.zigbee.dongle.ember.internal.transaction.EzspSingleResponseTransaction;
3838
import com.zsmartsystems.zigbee.dongle.ember.internal.transaction.EzspTransaction;
@@ -170,7 +170,7 @@ public void write(int value) {
170170

171171
@Override
172172
public void write(int[] bytes) {
173-
for(int val : bytes) {
173+
for (int val : bytes) {
174174
outputData.add(val);
175175
}
176176
}
@@ -318,4 +318,19 @@ public void handleReset() throws Exception {
318318

319319
Mockito.verify(ezspHandler, Mockito.timeout(TIMEOUT)).handleLinkStateChange(true);
320320
}
321+
322+
@Test
323+
public void sendEzspTransactionNullCheck() {
324+
EzspFrameHandler ezspHandler = Mockito.mock(EzspFrameHandler.class);
325+
AshFrameHandler frameHandler = new AshFrameHandler(ezspHandler);
326+
327+
frameHandler.setClosing();
328+
EzspVersionRequest request = new EzspVersionRequest();
329+
EzspTransaction transaction = frameHandler
330+
.sendEzspTransaction(new EzspSingleResponseTransaction(request, EzspVersionResponse.class));
331+
332+
assertNotNull(transaction);
333+
assertEquals(EmberStatus.UNKNOWN, transaction.getStatus());
334+
assertNull(transaction.getResponse());
335+
}
321336
}

0 commit comments

Comments
 (0)