[TSAM-10625] wrong realloc handle fixed 15/101215/3
authorKyeonghun Lee <kh9090.lee@samsung.com>
Wed, 30 Nov 2016 11:52:28 +0000 (20:52 +0900)
committerKyeonghun Lee <kh9090.lee@samsung.com>
Wed, 30 Nov 2016 11:57:36 +0000 (20:57 +0900)
Change-Id: I5f61102c2744894d081e3d0c033c4d99eee40021
Signed-off-by: Kyeonghun Lee <kh9090.lee@samsung.com>
vobject-engine/VCard.c
vobject-engine/VMessage.c

index 72735e4..15f55df 100755 (executable)
@@ -1072,6 +1072,7 @@ char* vcard_encode(VTree *pVCardRaw)
 {
        VDATA_TRACE_BEGINE
        char*           pVCardRes = NULL;
+       char*           pTempVCard = NULL;
        VObject *       pTmpObj =  NULL;
        char*           pTemp = NULL;
        int                     len;
@@ -1118,13 +1119,15 @@ char* vcard_encode(VTree *pVCardRaw)
                if ((pTemp = __VCardTypeEncode(pTmpObj, pszCardTypeList[pTmpObj->property])) != NULL) {
                        len = strlen(pTemp);
                        total += len + sizeof(char) * 10;
-                       if ((pVCardRes = (char*)realloc(pVCardRes, total)) == NULL) {
+                       if ((pTempVCard = (char*)realloc(pVCardRes, total)) == NULL) {
                                VDATA_TRACE("vcard_encode():realloc failed\n");
                                VFREE(pTemp);
                                pTemp = NULL;
+                               VFREE(pVCardRes);
                                VDATA_TRACE_END
                                return NULL;
                        }
+                       pVCardRes = pTempVCard;
 
                        if (strncmp(pTemp, "VERSION", strlen("VERSION")) != 0)
                                g_strlcat(pVCardRes, pTemp, total - strlen(pVCardRes));
@@ -1142,11 +1145,13 @@ char* vcard_encode(VTree *pVCardRaw)
        }
 
        total += sizeof(char) * 12;
-       if ((pVCardRes = (char *)realloc(pVCardRes, total)) == NULL) {
+       if ((pTempVCard = (char *)realloc(pVCardRes, total)) == NULL) {
                VDATA_TRACE("vcard_encode:realloc failed\n");
+               VFREE(pVCardRes);
                VDATA_TRACE_END
                return NULL;
        }
+       pVCardRes = pTempVCard;
        g_strlcat(pVCardRes, "END:VCARD\r\n", total - strlen(pVCardRes));
        VDATA_TRACE_END
        return pVCardRes;
@@ -1195,6 +1200,7 @@ __VCardTypeEncode(VObject *pTypeObj, char *pType)
        int                     len;
        char*           pTemp = NULL;
        char*           szTypeValue = NULL;
+       char*           szTemp = NULL;
        int                     i;
        int                     enc = 0;
        char*           pEncode = NULL;
@@ -1227,21 +1233,27 @@ __VCardTypeEncode(VObject *pTypeObj, char *pType)
        pTemp = __VCardParamEncode(pTypeObj, &enc);
        if (pTemp != NULL) {
                len = strlen(pTemp);
-               if ((szTypeValue = (char *)realloc(szTypeValue, (total += len))) == NULL) {
+               if ((szTemp = (char *)realloc(szTypeValue, (total += len))) == NULL) {
                        VDATA_TRACE("__VCardTypeEncode():realloc failed\n");
                        VFREE(pTemp);
-                       pTemp = NULL
-                       VDATA_TRACE_END;
+                       pTemp = NULL;
+                       VFREE(szTypeValue);
+                       VDATA_TRACE_END
                        return NULL;
+               } else {
+                       szTypeValue = szTemp;
                }
                g_strlcat(szTypeValue, pTemp, total - strlen(szTypeValue));
                VFREE(pTemp);
                pTemp = NULL;
        }
 
-       if ((szTypeValue = (char *)realloc(szTypeValue, (total += 2))) == NULL) {
+       if ((szTemp = (char *)realloc(szTypeValue, (total += 2))) == NULL) {
+               VFREE(szTypeValue);
                VDATA_TRACE_END
                return NULL;
+       } else {
+               szTypeValue = szTemp;
        }
 
        g_strlcat(szTypeValue, ":", total - strlen(szTypeValue));
@@ -1328,21 +1340,27 @@ __VCardTypeEncode(VObject *pTypeObj, char *pType)
                }
        }
 
-       if ((pRes = (char *)realloc(pRes, strlen(pRes) + 3)) == NULL) {
+       if ((szTemp = (char *)realloc(pRes, strlen(pRes) + 3)) == NULL) {
                VFREE(pEncode);
                VFREE(szTypeValue);
+               VFREE(pRes);
                VDATA_TRACE_END
                return NULL;
+       } else {
+               pRes = szTemp;
        }
        g_strlcat(pRes, "\r\n", 2);
 
        len = strlen(pRes);
 
-       if ((szTypeValue = (char *)realloc(szTypeValue, (total += (len+3)))) == NULL) {
+       if ((szTemp = (char *)realloc(szTypeValue, (total += (len+3)))) == NULL) {
                VFREE(pEncode);
                VFREE(pRes);
+               VFREE(szTypeValue);
                VDATA_TRACE_END
                return NULL;
+       } else {
+               szTypeValue = szTemp;
        }
 
        g_strlcat(szTypeValue, pRes, total - strlen(szTypeValue));
@@ -1373,6 +1391,7 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
        int shift = 0;
        bool bSupported;
        char* szParam = NULL;
+       char* szTemp = NULL;
        VParam* pTemp = NULL;
        ValueObj*       pList = NULL;
 
@@ -1396,9 +1415,12 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
                bSupported = false;
 
                /** Expand szParam string. For appending.*/
-               if ((szParam = (char *)realloc(szParam, len += 15)) == NULL) {
+               if ((szTemp = (char *)realloc(szParam, len += 15)) == NULL) {
+                       VFREE(szParam);
                        VDATA_TRACE_END
                        return NULL;
+               } else {
+                       szParam = szTemp;
                }
 
                /** appending paramter name. */
@@ -1428,9 +1450,12 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
                        pList = pCharsetList; bSupported = true;
                        break;
                default:
-                       if ((szParam = (char*)realloc(szParam, 5)) == NULL) {
+                       if ((szTemp = (char*)realloc(szParam, 5)) == NULL) {
+                               VFREE(szParam);
                                VDATA_TRACE_END
                                return NULL;
+                       } else {
+                               szParam = szTemp;
                        }
                        g_strlcat(szParam, "NONE", 5 - strlen(szParam));
                }
@@ -1441,9 +1466,12 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
                        for (i = 0, sNum = 0x00000001; i < shift; i++) {
 
                                if (pTemp->paramValue & sNum) {
-                                       if ((szParam = (char *)realloc(szParam, (len += (strlen(pList[i].szName) + 2)))) == NULL) {
+                                       if ((szTemp = (char *)realloc(szParam, (len += (strlen(pList[i].szName) + 2)))) == NULL) {
+                                               VFREE(szParam);
                                                VDATA_TRACE_END
                                                return NULL;
+                                       } else {
+                                               szParam = szTemp;
                                        }
 
                                        g_strlcat(szParam, pList[i].szName, len - strlen(szParam));
index 50da899..2e0aeef 100755 (executable)
@@ -1247,6 +1247,7 @@ __VMsgTypeEncode(VObject *pTypeObj, char *pType)
        int                     len;
        char*           pTemp = NULL;
        char*           szTypeValue = NULL;
+       char*           szTemp = NULL;
        int                     i;
        int                     enc = 0;
        char*           pEncode = NULL;
@@ -1268,21 +1269,27 @@ __VMsgTypeEncode(VObject *pTypeObj, char *pType)
        pTemp = __VMsgParamEncode(pTypeObj, &enc);
        if (pTemp != NULL) {
                len = strlen(pTemp);
-               if ((szTypeValue = (char *)realloc(szTypeValue, (total += len))) == NULL) {
+               if ((szTemp = (char *)realloc(szTypeValue, (total += len))) == NULL) {
                        VDATA_TRACE("__VMsgTypeEncode():realloc failed\n");
                        VFREE(pTemp);
-                       pTemp = NULL
-                       VDATA_TRACE_END;
+                       pTemp = NULL;
+                       VFREE(szTypeValue);
+                       VDATA_TRACE_END
                        return NULL;
+               } else {
+                       szTypeValue = szTemp;
                }
                g_strlcat(szTypeValue, pTemp, len);
                VFREE(pTemp);
                pTemp = NULL;
        }
 
-       if ((szTypeValue = (char *)realloc(szTypeValue, (total += 2))) == NULL) {
+       if ((szTemp = (char *)realloc(szTypeValue, (total += 2))) == NULL) {
+               VFREE(szTypeValue);
                VDATA_TRACE_END
                return NULL;
+       } else {
+               szTypeValue = szTemp;
        }
 
        g_strlcat(szTypeValue, ":", 2);
@@ -1369,21 +1376,27 @@ __VMsgTypeEncode(VObject *pTypeObj, char *pType)
                }
        }
 
-       if ((pRes = (char *)realloc(pRes, strlen(pRes) + 3)) == NULL) {
+       if ((szTemp = (char *)realloc(pRes, strlen(pRes) + 3)) == NULL) {
                VFREE(pEncode);
                VFREE(szTypeValue);
+               VFREE(pRes);
                VDATA_TRACE_END
                return NULL;
+       } else {
+               pRes = szTemp;
        }
        g_strlcat(pRes, "\r\n", strlen(pRes) + 2);
 
        len = strlen(pRes);
 
-       if ((szTypeValue = (char *)realloc(szTypeValue, (total += (len+3)))) == NULL) {
+       if ((szTemp = (char *)realloc(szTypeValue, (total += (len+3)))) == NULL) {
                VFREE(pEncode);
                VFREE(pRes);
+               VFREE(szTypeValue);
                VDATA_TRACE_END
                return NULL;
+       } else {
+               szTypeValue = szTemp;
        }
 
        g_strlcat(szTypeValue, pRes, total - 1);
@@ -1415,6 +1428,7 @@ __VMsgParamEncode(VObject* pTypeObj, int* pEnc)
        int shift = 0;
        bool bSupported;
        char* szParam = NULL;
+       char* szTemp = NULL;
        VParam* pTemp = NULL;
        ValueObj*       pList = NULL;
 
@@ -1438,9 +1452,12 @@ __VMsgParamEncode(VObject* pTypeObj, int* pEnc)
                bSupported = false;
 
                /** Expand szParam string. For appending.*/
-               if ((szParam = (char *)realloc(szParam, len += 15)) == NULL) {
+               if ((szTemp = (char *)realloc(szParam, len += 15)) == NULL) {
+                       VFREE(szParam);
                        VDATA_TRACE_END
                        return NULL;
+               } else {
+                       szParam = szTemp;
                }
 
                /** appending paramter name. */
@@ -1470,9 +1487,12 @@ __VMsgParamEncode(VObject* pTypeObj, int* pEnc)
                        pList = pMsgCharsetList; bSupported = true;
                        break;
                default:
-                       if ((szParam = (char*)realloc(szParam, 5)) == NULL) {
+                       if ((szTemp = (char*)realloc(szParam, 5)) == NULL) {
+                               VFREE(szParam);
                                VDATA_TRACE_END
                                return NULL;
+                       } else {
+                               szParam = szTemp;
                        }
                        g_strlcat(szParam, "NONE", strlen("NONE"));
                }
@@ -1483,9 +1503,12 @@ __VMsgParamEncode(VObject* pTypeObj, int* pEnc)
                        for (i = 0, sNum = 0x00000001; i < shift; i++) {
 
                                if (pList[pTemp->paramValue].flag & sNum) {
-                                       if ((szParam = (char *)realloc(szParam, (len += (strlen(pList[i].szName) + 2)))) == NULL) {
+                                       if ((szTemp = (char *)realloc(szParam, (len += (strlen(pList[i].szName) + 2)))) == NULL) {
+                                               VFREE(szParam);
                                                VDATA_TRACE_END
                                                return NULL;
+                                       } else {
+                                               szParam = szTemp;
                                        }
 
                                        g_strlcat(szParam, pList[i].szName, len);