sandbox / mbed-client-c

Fork of mbed-client-c by Christopher Haster

Revision:
4:5d91b0f5038c
Parent:
1:43f5c94c6771
--- a/source/libCoap/src/sn_coap_parser.c	Fri Feb 19 17:46:29 2016 +0000
+++ b/source/libCoap/src/sn_coap_parser.c	Sat Apr 02 00:39:03 2016 +0300
@@ -70,20 +70,18 @@
     /* * * * Header parsing, move pointer over the header...  * * * */
     sn_coap_parser_header_parse(&data_temp_ptr, parsed_and_returned_coap_msg_ptr, coap_version_ptr);
 
-
     /* * * * Options parsing, move pointer over the options... * * * */
-    if (sn_coap_parser_options_parse(handle, &data_temp_ptr, parsed_and_returned_coap_msg_ptr, packet_data_ptr, packet_data_len) != 0) {
-        /* Release memory of CoAP message */
-        sn_coap_parser_release_allocated_coap_msg_mem(handle, parsed_and_returned_coap_msg_ptr);
-        return NULL;
+    if (sn_coap_parser_options_parse(handle, &data_temp_ptr, parsed_and_returned_coap_msg_ptr, packet_data_ptr, packet_data_len) != 0) {        
+        parsed_and_returned_coap_msg_ptr->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER;
+        return parsed_and_returned_coap_msg_ptr;
     }
 
     /* * * * Payload parsing * * * */
     if (sn_coap_parser_payload_parse(packet_data_len, packet_data_ptr, &data_temp_ptr, parsed_and_returned_coap_msg_ptr) == -1) {
-        /* Release memory of CoAP message */
-        sn_coap_parser_release_allocated_coap_msg_mem(handle, parsed_and_returned_coap_msg_ptr);
-        return NULL;
+        parsed_and_returned_coap_msg_ptr->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER;
+        return parsed_and_returned_coap_msg_ptr;
     }
+
     /* * * * Return parsed CoAP message  * * * * */
     return parsed_and_returned_coap_msg_ptr;
 }
@@ -683,6 +681,9 @@
         if(ret_value >= packet_left_len)
             break;
 
+        if( i == packet_left_len )
+            break;
+
         if ((*(packet_data_ptr + i) >> COAP_OPTIONS_OPTION_NUMBER_SHIFT) != 0) {
             return (ret_value - 1);    /* -1 because last Part path does not include separator */
         }
@@ -747,4 +748,3 @@
     }
     return 0;
 }
-