From ff54448311a05d9441a7f93ad6be257f300748d7 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Mon, 6 May 2019 11:51:43 +0200 Subject: [PATCH] - MMS client: added aditional checks to catch response parsing errors --- .../iso_mms/client/mms_client_connection.c | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/src/mms/iso_mms/client/mms_client_connection.c b/src/mms/iso_mms/client/mms_client_connection.c index 48375575..1540d118 100644 --- a/src/mms/iso_mms/client/mms_client_connection.c +++ b/src/mms/iso_mms/client/mms_client_connection.c @@ -1592,9 +1592,13 @@ MmsConnection_readVariable(MmsConnection self, MmsError* mmsError, ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { value = mmsClient_parseReadResponse(self->lastResponse, NULL, false); + if (value == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1620,9 +1624,13 @@ MmsConnection_readVariableComponent(MmsConnection self, MmsError* mmsError, ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { value = mmsClient_parseReadResponse(self->lastResponse, NULL, false); + if (value == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1650,9 +1658,13 @@ MmsConnection_readArrayElements(MmsConnection self, MmsError* mmsError, ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { value = mmsClient_parseReadResponse(self->lastResponse, NULL, false); + if (value == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1679,9 +1691,13 @@ MmsConnection_readSingleArrayElementWithComponent(MmsConnection self, MmsError* ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { value = mmsClient_parseReadResponse(self->lastResponse, NULL, false); + if (value == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1707,9 +1723,13 @@ MmsConnection_readMultipleVariables(MmsConnection self, MmsError* mmsError, ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { value = mmsClient_parseReadResponse(self->lastResponse, NULL, true); + if (value == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1772,9 +1792,13 @@ MmsConnection_readNamedVariableListValuesAssociationSpecific( ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { value = mmsClient_parseReadResponse(self->lastResponse, NULL, true); + if (value == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1801,10 +1825,14 @@ MmsConnection_readNamedVariableListDirectory(MmsConnection self, MmsError* mmsEr ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { attributes = mmsClient_parseGetNamedVariableListAttributesResponse(self->lastResponse, NULL, deletable); + if (attributes == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: @@ -1831,10 +1859,14 @@ MmsConnection_readNamedVariableListDirectoryAssociationSpecific(MmsConnection se ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload, mmsError); - if (responseMessage != NULL) + if (responseMessage != NULL) { attributes = mmsClient_parseGetNamedVariableListAttributesResponse(self->lastResponse, NULL, deletable); + if (attributes == NULL) + *mmsError = MMS_ERROR_PARSING_RESPONSE; + } + releaseResponse(self); exit_function: