diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index 11bf4f6..19e8d63 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -110,6 +110,7 @@
     for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
     {
         len = strlen(lynq_apn_table[ret].apnType)<strlen(apnType) ? strlen(lynq_apn_table[ret].apnType):strlen(apnType);
+        LYINFLOG("apn_table[%d].apnType:%s,input apntype:%s,len:%d",ret,lynq_apn_table[ret].apnType,apnType,len);
         if(strncmp(lynq_apn_table[ret].apnType,apnType,len)==0)
         {
             return ret;
@@ -362,20 +363,25 @@
 int printf_apn_table()
 {
     int ret = 0;
-	if (lynq_apn_table == NULL)
-	{
-		LYERRLOG("apn table is null");
-		return -1;
-	}	
+    if (lynq_apn_table == NULL)
+    {
+        LYERRLOG("apn table is null");
+        return -1;
+    }
     for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
     {
-        LYINFLOG("[Typethree test info]apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d", \
+        LYINFLOG("[%s][%d] apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d",__FUNCTION__,ret, \
         lynq_apn_table[ret].apn,lynq_apn_table[ret].apnType,lynq_apn_table[ret].ifaceName, \
         lynq_apn_table[ret].hasTimeout,lynq_apn_table[ret].hasUsed);
     }
     return 0;
 }
 
+void printf_apn_table_debug(const char *fun,int line)
+{
+    LYINFLOG("[%s][%d]apn_table msg",fun,line);
+    printf_apn_table();
+}
 
 void urc_msg_process(Parcel *p)
 {
@@ -407,25 +413,28 @@
             {
                 urc_msg = strdupReadString_p(p);
                 int len = strlen(urc_msg);
-                if(len < LYNQ_APN_MAX_LEN-1)
+                if((len < LYNQ_APN_MAX_LEN-1) && (len > 0))
                 {
                     memcpy(apn,urc_msg,len+1);
                 }
+                free(urc_msg);
                 urc_msg = strdupReadString_p(p);
                 len = strlen(urc_msg);
-                if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+                if((len < LYNQ_APN_TYPE_MAX_LEN-1) && (len > 0))
                 {
                     memcpy(apnType,urc_msg,len+1);
                 }
+                free(urc_msg);
                 urc_msg = strdupReadString_p(p);
                 len = strlen(urc_msg);
-                if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
+                if((len < LYNQ_IFACE_NAME_MAX_LEN-1) && (len > 0))
                 {
                     memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
                 }
+                free(urc_msg);
                 //sendSignalDataCallStateChange();
                 int apnId = getLynqApnID(apnType);
-                LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d",apnType,ifaceName,apn,pdnState);
+                LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
                 if(apnId >= 0)
                 {
                     if(lynq_apn_table[apnId].hasTimeout==1)
@@ -446,11 +455,12 @@
                         break;
                     }
                     updateApnTable(&lynq_apn_table[apnId],apn,apnType,ifaceName);
+                    printf_apn_table_debug(__FUNCTION__,__LINE__);
                 }
                 /*To be completed*/
                 else
                 {
-					data_invaild_error = 1;
+                    data_invaild_error = 1;
                     printf_apn_table();
                     LYERRLOG("invalid apnId:%d",apnId);
                     break;
@@ -478,17 +488,22 @@
                     lynq_data_call = 0;
                     data_timelimit = 0;
                 }
+                printf_apn_table_debug(__FUNCTION__,__LINE__);
             }
             else
             {
                 urc_msg = strdupReadString_p(p);
+                free(urc_msg);
+                urc_msg = strdupReadString_p(p);
                 len = strlen(urc_msg);
                 if(len < LYNQ_APN_TYPE_MAX_LEN-1)
                 {
                     memcpy(apnType,urc_msg,len+1);
                 }
+                free(urc_msg);
                 LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
                 int apnId = getLynqApnID(apnType);
+                LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
                 if(apnId >= 0)
                 {
                     lynq_data_call_change_id = apnId;
@@ -516,6 +531,7 @@
                     lynq_data_call = 0;
                     data_timelimit = 0;
                 }
+                printf_apn_table_debug(__FUNCTION__,__LINE__);
             }
             break;
         case LYNQ_URC_MODIFY_APNDB:
@@ -530,6 +546,7 @@
                 strcpy(g_lynq_apn_result, urc_msg);
                 sendSignalApnChange();
             }
+            free(urc_msg);
             break;
         case LYNQ_URC_RESET_APNDB:
             {
@@ -544,6 +561,7 @@
                     strcpy(g_lynq_apn_result, urc_msg);
                     sendSignalApnChange();
                 }
+                free(urc_msg);
             }
         default:
             break;
@@ -678,16 +696,18 @@
             error = LYNQ_E_TIME_OUT;
             LYERRLOG("timeout:wait data Call state fail!!!");
             lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
-			if (data_invaild_error == 1)
-			{
-				data_invaild_error = 0;
-				LYERRLOG("urc apn info error!!!");
-				return 8085;
-			}
+            if (data_invaild_error == 1)
+            {
+                data_invaild_error = 0;
+                LYERRLOG("urc apn info error!!!");
+                return 8085;
+            }
+            printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
         *handle = lynq_data_call_id;
     }
+    printf_apn_table_debug(__FUNCTION__,__LINE__);
     #endif //GSW_RIL_CFG
     return error;
 }
@@ -740,6 +760,7 @@
     JumpHeader(p,&resp_type,&request,&slot_id,&error);
     LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
     cleanOnceApnTable(lynq_data_call_id);
+    printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
 }
 int lynq_setup_data_call_sp(int *handle,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol)
@@ -849,16 +870,18 @@
             error = LYNQ_E_TIME_OUT;
             LYERRLOG("timeout:wait data Call state fail!!!");
             lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
-			if (data_invaild_error == 1)
-			{
-				data_invaild_error = 0;
-				LYERRLOG("urc apn info error!!!");
-				return 8085;
-			}
+            if (data_invaild_error == 1)
+            {
+                data_invaild_error = 0;
+                LYERRLOG("urc apn info error!!!");
+                return 8085;
+            }
+            printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
         *handle = lynq_data_call_id;
     }
+    printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
 }
 /*
@@ -949,17 +972,47 @@
             p.readInt32(&dataCallList[i].cid);
             p.readInt32(&dataCallList[i].active);
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             p.readInt32(&dataCallList[i].mtu);
         }
     }
