fix +CMGR result parsing error 84/14484/4
authorCaiwen Zhang <caiwen.zhang@intel.com>
Thu, 1 Aug 2013 19:36:46 +0000 (03:36 +0800)
committerCaiwen Zhang <caiwen.zhang@intel.com>
Wed, 8 Jan 2014 18:24:46 +0000 (02:24 +0800)
Change-Id: I2b574f6213410f4e51b29d01169a70cd1c37561b
Signed-off-by: Caiwen Zhang <caiwen.zhang@intel.com>
src/s_sms.c

index f47d0b2..813fa02 100644 (file)
@@ -717,52 +717,68 @@ static void on_response_class2_read_msg(TcorePending *pending, int data_len, con
        dbg("lines: [%p]", at_response->lines);
        g_slist_foreach(at_response->lines, print_glib_list_elem, NULL); //for debug log
 
-       if (at_response->success > 0) {
-               dbg("Response OK");
-               if (at_response->lines) {
-                       //fetch first line
-                       gslist_line = (char *)at_response->lines->data;
+       if (at_response->success <= 0) {
+               err("Response NOK");
+               return;
+       }
 
-                       dbg("gslist_line: [%s]", gslist_line);
+       dbg("Response OK");
+       if (at_response->lines == NULL) {
+               err("No lines");
+               return;
+       }
 
-                       tokens = tcore_at_tok_new(gslist_line);
-                       dbg("Number of tokens: [%d]", g_slist_length(tokens));
-                       g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log
+       //fetch first line
+       gslist_line = (char *)at_response->lines->data;
+       if (gslist_line == NULL) {
+               err("Error response data");
+               return;
+       }
 
-                       line_token = g_slist_nth_data(tokens, 2); //Third Token: Length
-                       if (line_token != NULL) {
-                               pdu_len = atoi(line_token);
-                               dbg("Length: [%d]", pdu_len);
-                       }
+       dbg("gslist_line: [%s]", gslist_line);
 
-                       //fetch second line
-                       gslist_line = (char *)at_response->lines->next->data;
+       tokens = tcore_at_tok_new(gslist_line);
+       dbg("Number of tokens: [%d]", g_slist_length(tokens));
+       g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log
 
-                       dbg("gslist_line: [%s]", gslist_line);
+       line_token = g_slist_nth_data(tokens, 2); //Third Token: Length
+       if (line_token == NULL) {
+               err("Error response data");
+               tcore_at_tok_free(tokens);
+               return;
+       }
 
-                       //free the consumed token
-                       tcore_at_tok_free(tokens);
+       pdu_len = atoi(line_token);
+       dbg("Length: [%d]", pdu_len);
+       tcore_at_tok_free(tokens);
 
-                       tokens = tcore_at_tok_new(gslist_line);
-                       dbg("Number of tokens: [%d]", g_slist_length(tokens));
-                       g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log
+       //fetch second line
+       if (at_response->lines->next == NULL) {
+               err("Error response data");
+               return;
+       }
+       gslist_line = (char *)at_response->lines->next->data;
+       if (gslist_line == NULL) {
+               err("Error response data");
+               return;
+       }
 
-                       hex_pdu = g_slist_nth_data(tokens, 0); //Fetch SMS PDU
+       dbg("gslist_line: [%s]", gslist_line);
 
-                       //free the consumed token
-                       tcore_at_tok_free(tokens);
-               } else {
-                       dbg("No lines");
-               }
-       } else {
-               err("Response NOK");
-       }
+       tokens = tcore_at_tok_new(gslist_line);
+       dbg("Number of tokens: [%d]", g_slist_length(tokens));
+       g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log
+
+       hex_pdu = g_slist_nth_data(tokens, 0); //Fetch SMS PDU
 
        /* Convert to Bytes */
        bytePDU = (unsigned char *)util_hexStringToBytes(hex_pdu);
+       if (bytePDU == NULL) {
+               tcore_at_tok_free(tokens);
+               return;
+       }
 
        sca_length = bytePDU[0];
-
        dbg("SCA length = %d", sca_length);
 
        gsmMsgInfo.msgInfo.msgLength = pdu_len;
@@ -781,9 +797,7 @@ static void on_response_class2_read_msg(TcorePending *pending, int data_len, con
        rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(tcore_pending_ref_core_object(pending))), tcore_pending_ref_core_object(pending), TNOTI_SMS_INCOM_MSG, sizeof(struct tnoti_sms_umts_msg), &gsmMsgInfo);
 
        g_free(bytePDU);
-
-       dbg("Exit");
-       return;
+       tcore_at_tok_free(tokens);
 }
 
 static void on_response_read_msg(TcorePending *pending, int data_len, const void *data, void *user_data)