Coverity fix: check return type
[platform/core/messaging/msg-service.git] / vobject-engine / VCard.c
index d6cab9d..d0abf97 100755 (executable)
@@ -1,17 +1,17 @@
 /*
-* Copyright 2012-2013  Samsung Electronics Co., Ltd
-*
-* Licensed under the Flora License, Version 1.1 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*    http://floralicense.org/license/
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
 */
 
 #include "VTypes.h"
 #define CHECK_START 1
 #define CHECK_END 2
 
-#define VFREE(obj) if(obj != NULL) { /*VDATA_TRACE("%p",obj);*/ free(obj); \
+#define VFREE(obj) if (obj != NULL) { /*VDATA_TRACE("%p",obj);*/ free(obj); \
        obj = NULL; \
 }
 
-#define TRIM(obj) if(obj != NULL) {\
+#define TRIM(obj) if (obj != NULL) {\
        _VRLSpace(obj);\
        _VRTSpace(obj);\
 }
 
-#define UPPER(obj,start,end) if(obj != NULL) {\
-       for(start = 0; start < end; start++)\
+#define UPPER(obj, start, end) if (obj != NULL) {\
+       for (start = 0; start < end; start++)\
                obj[start] = toupper(obj[start]);\
 }
 
 #define SET_PARAM_VALUE(PARAM, SZVALUE, LIST, LISTCNT, PARAMOBJ, PTYPE, ENC) {\
        PARAM = 0;\
        PARAM |= __VCardGetValue(SZVALUE, LIST, LISTCNT);\
-       if ( PARAM != UNKNOWN_NAME ) {\
+       if (PARAM != UNKNOWN_NAME) {\
                PARAMOBJ->parameter = PTYPE;\
-               if(PTYPE == VCARD_PARAM_ENCODING)\
+               if (PTYPE == VCARD_PARAM_ENCODING)\
                        ENC = PARAM;\
                break;\
-       }\
+       } \
 }
 
-#define LENGTH_TYPE_LIST(obj, len) for(len =0; obj[len] != NULL; len++);
+#define LENGTH_TYPE_LIST(obj, len) for (len = 0; obj[len] != NULL; len++);
 
-extern char* _VUnfoldingNoSpecNew( char *string );
+extern char* _VUnfoldingNoSpecNew(char *string);
 
 /** GLOBAL VARIABLE DECLARATION AND INITIALIZATION */
 /** vCard Types. */
-char* pszCardTypeList[] =
-{
+char* pszCardTypeList[] = {
        "ADR",                  /* Delivery Address -> address*/
        "AGENT",                        /* Agent -> assistant name, assistant number*/
        "BDAY",                 /* Birthday -> birthday */
@@ -100,8 +99,7 @@ char* pszCardTypeList[] =
 };
 
 /** Parameter */
-char* pszCardParamList[] =
-{
+char* pszCardParamList[] = {
        "CHARSET",
        "CONTEXT",
        "ENCODING",
@@ -111,8 +109,7 @@ char* pszCardParamList[] =
 };
 
 /** Encoding value */
-ValueObj pEncList[] =
-{
+ValueObj pEncList[] = {
        {"B",                   0x00000001},
        {"BASE64",      0x00000002},
        {"QUOTED-PRINTABLE", 0x00000004},
@@ -121,16 +118,14 @@ ValueObj pEncList[] =
 };
 
 /** Character set value */
-ValueObj pCharsetList[] =
-{
+ValueObj pCharsetList[] = {
        {"UTF-8",                       0x00000001},
        {"UTF-16",              0x00000002},
        {"ISO-8859-1",  0x00000004}
 };
 
 /** Value value */
-ValueObj pValueList[] =
-{
+ValueObj pValueList[] = {
        {"BINARY",                      0x00000001},
        {"BOOLEAN",                     0x00000002},
        {"DATE",                                0x00000004},
@@ -147,8 +142,7 @@ ValueObj pValueList[] =
 };
 
 /** Type value */
-ValueObj pTypeList[] =
-{
+ValueObj pTypeList[] = {
        {"AIFF",                0x00000001},
        {"BBS",                 0x00000002},
        {"CAR",                 0x00000004},
@@ -186,24 +180,24 @@ int __VCardGetValue(char*, const ValueObj*, int);
 int __VCardGetTypeName(char*, int*, int*);
 int __VCardGetParamName(char*, int*, int*);
 int __VIsVcardFile(char*, int);
-char* __VCardGetParamVal(char*,int*, int*);
+char* __VCardGetParamVal(char*, int*, int*);
 char* __VCardGetTypeVal(char*, int*, int*, int, VObject*);
 char* __VCardTypeEncode(VObject*, char*);
 char* __VCardParamEncode(VObject*, int*);
 
 #ifdef VDATA_GROUPNAME_SUPPORTED
 char*  gszGroupName;
-#endif // VDATA_GROUPNAME_SUPPORTED
+#endif /* VDATA_GROUPNAME_SUPPORTED */
 
 
 /**
  * __VCardGetName() compares the string and vCard type, parameter name.
  *
- * @param      szString        Name which will compare
+ * @param              szString                Name which will compare
  * @param              pszList[]               Name list of vCard type and param
- * @param              size                            Number of total element of list
+ * @param              size                    Number of total element of list
  *
- * @return     index           The index in the list
+ * @return             index                   The index in the list
  */
 int
 __VCardGetName(char* szString, char* pszList[], int size)
@@ -214,9 +208,9 @@ __VCardGetName(char* szString, char* pszList[], int size)
        low = 0;
        high = size - 1;
 
-       for(; high >= low; diff<0 ? (low = i+1):(high = i-1)) {
-               i = ( low + high ) / 2;
-               if((diff = strcmp( pszList[i], szString )) == 0) /* success: found it */
+       for (; high >= low; diff < 0 ? (low = i+1) : (high = i-1)) {
+               i = (low + high) / 2;
+               if ((diff = strcmp(pszList[i], szString)) == 0) /* success: found it */
                        return i;
        }
        VDATA_TRACE_END
@@ -226,14 +220,14 @@ __VCardGetName(char* szString, char* pszList[], int size)
 /**
  * __VCardGetValue() compares the string and vCard type, parameter value.
  *
- * @param      szString        Value which will compare
+ * @param              szString        Value which will compare
  * @param              list[]          Value list of vCard param
- * @param              size                    Number of total element of list
+ * @param              size            Number of total element of list
  *
- * @return     flag      The value's flag.
+ * @return             flag            The value's flag.
  */
 int
-__VCardGetValue( char* szString, const ValueObj list[], int size)
+__VCardGetValue(char* szString, const ValueObj list[], int size)
 {
        VDATA_TRACE_BEGINE
        int i = 0, diff = -1;
@@ -242,25 +236,22 @@ __VCardGetValue( char* szString, const ValueObj list[], int size)
        SysRequireEx(szString, UNKNOWN_NAME);
        SysRequireEx(size > 0, UNKNOWN_NAME);
 
-       UPPER(szTemp,i,strlen(szTemp));
-
-       for(i = 0; i < size-1; i++)
-       {
-               VDATA_TRACE(" i : %d",i);
-               VDATA_TRACE(" for loop %d < %d, list[%d] : %p, list[%d].szName : %p",i,size,i,list[i],i,list[i].szName);
-               VDATA_TRACE(" i : %d",i);
-               if(list[i].szName != NULL)
-               {
-                       VDATA_TRACE(" list[%d].szName != NULL",i);
-                       VDATA_TRACE(" before strcmp %s %s",list[i].szName,szTemp);
-                       VDATA_TRACE(" before strcmp %d",strcmp(list[i].szName, szTemp));
-                       if((diff = strcmp(list[i].szName, szTemp)) == 0) /* success: found it */
-                       {
-                               VDATA_TRACE(" return %d",list[i].flag);
+       UPPER(szTemp, i, strlen(szTemp));
+
+       for (i = 0; i < size-1; i++) {
+               VDATA_TRACE(" i : %d", i);
+               VDATA_TRACE(" for loop %d < %d, list[%d] : %d, list[%d].szName : %p", i, size, i, list[i].flag, i, list[i].szName);
+               VDATA_TRACE(" i : %d", i);
+               if (list[i].szName != NULL) {
+                       VDATA_TRACE(" list[%d].szName != NULL", i);
+                       VDATA_TRACE(" before strcmp %s %s", list[i].szName, szTemp);
+                       VDATA_TRACE(" before strcmp %d", strcmp(list[i].szName, szTemp));
+                       if ((diff = strcmp(list[i].szName, szTemp)) == 0) { /* success: found it */
+                               VDATA_TRACE(" return %d", list[i].flag);
                                VDATA_TRACE_END
                                return list[i].flag;
                        }
-                       VDATA_TRACE(" after strcmp %s %s",list[i].szName,szTemp);
+                       VDATA_TRACE(" after strcmp %s %s", list[i].szName, szTemp);
                }
        }
        VDATA_TRACE(" return UNKNOWN_NAME");
@@ -272,10 +263,10 @@ __VCardGetValue( char* szString, const ValueObj list[], int size)
  * __VCardGetTypeName() fine the type name and returns the index number
  *
  * @param              pVCardRaw       The raw data
- * @param              pStatus         Decoder status
+ * @param              pStatus Decoder status
  * @param              pDLen           retrived length
  *
- * @return     res                     The index in type list
+ * @return             res                     The index in type list
  */
 int
 __VCardGetTypeName(char* pVCardRaw, int* pStatus, int* pDLen)
@@ -283,18 +274,18 @@ __VCardGetTypeName(char* pVCardRaw, int* pStatus, int* pDLen)
        VDATA_TRACE_BEGINE
        int     i, index, res;
        char    c;
-       char    name[MAX_TYPE_NAME_LEN+1]={0,};
+       char    name[MAX_TYPE_NAME_LEN+1] = {0,};
 
 #ifdef VDATA_GROUPNAME_SUPPORTED
        char*   szGroupName = NULL;
-#endif // VDATA_GROUPNAME_SUPPORTED
+#endif /* VDATA_GROUPNAME_SUPPORTED */
 
        SysRequireEx(pVCardRaw, UNKNOWN_NAME);
 
        i = index = 0;
        res = UNKNOWN_NAME;
 
-       while(true) {
+       while (true) {
 
                GO_NEXT_CHAR(c, pVCardRaw, pDLen);
 
@@ -303,7 +294,7 @@ __VCardGetTypeName(char* pVCardRaw, int* pStatus, int* pDLen)
                 * If TYPE NAME's value is over MAX_TYPE_NAME_LEN, return UNKNOWN_NAME.
                 * And then Decoding Step shoud not be changed.
                 */
-               if(index >= MAX_TYPE_NAME_LEN) {
+               if (index >= MAX_TYPE_NAME_LEN) {
                        *pStatus = VCARD_TYPE_NAME_STATUS;
                        res = UNKNOWN_NAME;
                        break;
@@ -314,20 +305,20 @@ __VCardGetTypeName(char* pVCardRaw, int* pStatus, int* pDLen)
                 * If VTYPE_TOKEN_SEMICOLON or VTYPE_TOKEN_COLON is faced with,
                 * find TYPE NAME's value in pszCardTypeList, and then return searched result.
                 */
-               if ((c == VTYPE_TOKEN_SEMICOLON ) || ( c == VTYPE_TOKEN_COLON)) {
+               if ((c == VTYPE_TOKEN_SEMICOLON) || (c == VTYPE_TOKEN_COLON)) {
                        name[index] = 0x00;
                        TRIM(name);
-                       UPPER(name,i,index);
-                       res = __VCardGetName( name, (char**)pszCardTypeList, VCARD_TYPE_NUM );
+                       UPPER(name, i, index);
+                       res = __VCardGetName(name, (char**)pszCardTypeList, VCARD_TYPE_NUM);
                        break;
                }
                /** current version not support grouping vcard type */
-               else if ( c == VTYPE_TOKEN_DOT ) {
+               else if (c == VTYPE_TOKEN_DOT) {
 #ifdef VDATA_GROUPNAME_SUPPORTED
                        name[index] = '\0';
-                       szGroupName = ( char* ) malloc ( index+1 );
-                       if(szGroupName != NULL){
-                               strncpy( szGroupName, name, index );
+                       szGroupName = (char*) calloc(1,  index+1);
+                       if (szGroupName != NULL) {
+                               strncpy(szGroupName, name, index);
                                gszGroupName = szGroupName;
                        }
                        index = 0;
@@ -337,28 +328,27 @@ __VCardGetTypeName(char* pVCardRaw, int* pStatus, int* pDLen)
                 * There is no new line in TYPE NAME.
                 * If new line character is faced with, return UNKNOWN_NAME;
                 */
-               else if ( ( c == '\r' ) || ( c == '\n' ) )
-               {
+               else if ((c == '\r') || (c == '\n')) {
                        (*pDLen)++;
                        *pStatus = VCARD_TYPE_NAME_STATUS;
                        res = UNKNOWN_NAME;
                        return res;
-               }
-               else if(_VIsSpace(c));
-               else    name[index++] = c;
+               } else if (_VIsSpace(c)) {
+               } else
+                       name[index++] = c;
        }
 
        /**
         *      Set Next Step.
         *
         */
-       if ( c == VTYPE_TOKEN_SEMICOLON )
+       if (c == VTYPE_TOKEN_SEMICOLON)
                /**
                 * This case next token is parameter. So set VCARD_PARAM_NAME_STATUS step.
                 */
                *pStatus = VCARD_PARAM_NAME_STATUS;
        else {
-               if(res != UNKNOWN_NAME)
+               if (res != UNKNOWN_NAME)
                        /**
                         * This case next string is value. So set VCARD_TYPE_VALUE_STATUS step.
                         */
@@ -377,28 +367,27 @@ __VCardGetTypeName(char* pVCardRaw, int* pStatus, int* pDLen)
  * __VCardGetParamName() fine the param name and returns the index number
  *
  * @param              pVCardRaw       The raw data
- * @param              pStatus         Decoder status
+ * @param              pStatus Decoder status
  * @param              pDLen           retrived length
  *
- * @return     res                     The index in type list
+ * @return             res                     The index in type list
  */
 int
-__VCardGetParamName( char* pVCardRaw, int* pStatus, int* pDLen )
+__VCardGetParamName(char* pVCardRaw, int* pStatus, int* pDLen)
 {
        VDATA_TRACE_BEGINE
        int     i, index, res;
 
        char    c;
-       char    name[MAX_PARAM_NAME_LEN+1]={0,};
+       char    name[MAX_PARAM_NAME_LEN+1] = {0,};
        char* pTemp = pVCardRaw;
 
-       SysRequireEx( pVCardRaw, UNKNOWN_NAME );
+       SysRequireEx(pVCardRaw, UNKNOWN_NAME);
 
        i = index = 0;
        res = UNKNOWN_NAME;
 
-       while ( true )
-       {
+       while (true) {
                GO_NEXT_CHAR(c, pVCardRaw, pDLen);
 
                /**
@@ -406,7 +395,7 @@ __VCardGetParamName( char* pVCardRaw, int* pStatus, int* pDLen )
                 * If PARAM NAME's value is over MAX_PARAM_NAME_LEN, return UNKNOWN_NAME.
                 * And then Decoding Step shoud not be changed.
                 */
-               if(index >= MAX_PARAM_NAME_LEN) {
+               if (index >= MAX_PARAM_NAME_LEN) {
                        *pStatus = VCARD_TYPE_NAME_STATUS;
                        res = UNKNOWN_NAME;
                        break;
@@ -417,14 +406,14 @@ __VCardGetParamName( char* pVCardRaw, int* pStatus, int* pDLen )
                 * If VTYPE_TOKEN_EQUAL is faced with,
                 * find PARAM NAME's value in pszCardParamList, and then return searched result.
                 */
-               if(c == VTYPE_TOKEN_EQUAL) {
+               if (c == VTYPE_TOKEN_EQUAL) {
                        name[index] = '\0';
                        TRIM(name);
                        UPPER(name, i, index);
-                       res = __VCardGetName( name, ( char** )pszCardParamList, VCARD_PARAM_NUM );
-                       if(res==UNKNOWN_NAME){
+                       res = __VCardGetName(name, (char**)pszCardParamList, VCARD_PARAM_NUM);
+                       if (res == UNKNOWN_NAME)
                                (*pDLen) = 0;
-                       }
+
                        *pStatus = VCARD_PARAM_VALUE_STATUS;
                        break;
                }
@@ -439,7 +428,7 @@ __VCardGetParamName( char* pVCardRaw, int* pStatus, int* pDLen )
                 * VCARD_PARAM_NAME_STATUS(current) -> VCARD_PARAM_VALUE_STATUS
                 * -> VCARD_TYPE_VALUE_STATUS -> MOVE TO NEXT TYPE
                 */
-               else if(c == VTYPE_TOKEN_COLON) {
+               else if (c == VTYPE_TOKEN_COLON) {
                        *pStatus = VCARD_PARAM_VALUE_STATUS;
                        pVCardRaw = pTemp;
                        (*pDLen) = 0;
@@ -457,15 +446,15 @@ __VCardGetParamName( char* pVCardRaw, int* pStatus, int* pDLen )
                 * VCARD_PARAM_NAME_STATUS(current) -> VCARD_PARAM_NAME_STATUS
                 * -> VCARD_PARAM_VALUE_STATUS -> VCARD_TYPE_VALUE_STATUS -> MOVE TO NEXT TYPE
                 */
-               else if(c == VTYPE_TOKEN_SEMICOLON) {
+               else if (c == VTYPE_TOKEN_SEMICOLON) {
                        *pStatus = VCARD_PARAM_NAME_STATUS;
                        pVCardRaw = pTemp;
                        (*pDLen) = 0;
                        res = UNKNOWN_NAME;
                        break;
-               }
-               else if((c == '\r') || (c == '\n') || (_VIsSpace(c)));
-               else
+               } else if ((c == '\r') || (c == '\n') || (_VIsSpace(c))) {
+
+               else
                        name[index++] = c;
        }
        VDATA_TRACE_END
@@ -488,53 +477,47 @@ __VCardFreeVTreeMemory(VTree * pTree)
        int count = 0;
        int i = 0;
 
-       SysRequireEx( pTree->treeType == VCARD, false );
-       SysRequireEx( pTree != NULL, false );
+       SysRequireEx(pTree->treeType == VCARD, false);
+       SysRequireEx(pTree != NULL, false);
        VDATA_TRACE("vcard_free_vtree_memory() entered.");
 
-       if (pTree->treeType != VCARD)
-       {
+       if (pTree->treeType != VCARD) {
                VDATA_TRACE_END
                return true;
        }
 
        pCurTree = pTree;
 
-       while(pCurTree)
-       {
+       while (pCurTree) {
                pNextTree = pCurTree->pNext;
                pCurObj = pCurTree->pTop;
 
-               while ( pCurObj )
-               {
+               while (pCurObj) {
 
                        pNextObj = pCurObj->pSibling;
                        count = pCurObj->valueCount;
 
-                       for ( i = 0; i < count; i++ ) {
-                               VFREE( pCurObj->pszValue[i]);
-                       }
+                       for (i = 0; i < count; i++)
+                               VFREE(pCurObj->pszValue[i]);
 
 #ifdef VDATA_GROUPNAME_SUPPORTED
-                       if ( pCurObj->pszGroupName )
-                               VFREE( pCurObj->pszGroupName );
+                       if (pCurObj->pszGroupName)
+                               VFREE(pCurObj->pszGroupName);
 #endif
 
-                       if ( pCurObj->pParam )
-                       {
+                       if (pCurObj->pParam) {
 
                                pCurParam = pCurObj->pParam;
 
-                               while(pCurParam != NULL)
-                               {
+                               while (pCurParam != NULL) {
                                        pNextParam = pCurParam->pNext;
                                        VDATA_TRACE("pNEXT ==> %p", pCurParam->pNext);
-                                       VDATA_TRACE("pPARAM ==> %p", pCurParam->parameter);
-                                       VDATA_TRACE("pVALUE ==> %p", pCurParam->paramValue);
+                                       VDATA_TRACE("pPARAM ==> %d", pCurParam->parameter);
+                                       VDATA_TRACE("pVALUE ==> %d", pCurParam->paramValue);
                                        VDATA_TRACE("pCurParam : %p", pCurParam);
                                        VDATA_TRACE("pCurParam->parameter : %d", pCurParam->parameter);
                                        VDATA_TRACE("pCurParam->paramValue : %d", pCurParam->paramValue);
-                                       if(pNextParam != NULL) {
+                                       if (pNextParam != NULL) {
                                                VDATA_TRACE("pNextParam : %p", pNextParam);
                                                VDATA_TRACE("pNextParam->parameter : %d", pNextParam->parameter);
                                                VDATA_TRACE("pNextParam->paramValue : %d", pNextParam->paramValue);
@@ -544,11 +527,11 @@ __VCardFreeVTreeMemory(VTree * pTree)
                                }
                        }
 
-                       VFREE( pCurObj );
+                       VFREE(pCurObj);
                        pCurObj = pNextObj;
                }
 
-               VFREE( pCurTree );
+               VFREE(pCurTree);
                pCurTree = pNextTree;
        }
 
@@ -561,13 +544,13 @@ __VCardFreeVTreeMemory(VTree * pTree)
  * __VCardGetParamVal() fine the param value and returns value.
  *
  * @param              pVCardRaw       The raw data
- * @param              pStatus         Decoder status
+ * @param              pStatus Decoder status
  * @param              pDLen           retrived length
  *
- * @return     buffer          The result value
+ * @return             buffer          The result value
  */
 char*
-__VCardGetParamVal( char* pVCardRaw, int* pStatus, int* pDLen )
+__VCardGetParamVal(char* pVCardRaw, int* pStatus, int* pDLen)
 {
        VDATA_TRACE_BEGINE
        int len = 0;
@@ -575,40 +558,39 @@ __VCardGetParamVal( char* pVCardRaw, int* pStatus, int* pDLen )
        char* pBuf = NULL;
        char* pTemp = pVCardRaw;
 
-       SysRequireEx( pVCardRaw, NULL );
+       SysRequireEx(pVCardRaw, NULL);
 
-       while(true) {
+       while (true) {
                GO_NEXT_CHAR(c, pVCardRaw, pDLen);
                len++;
-               switch(c) {
-                       case VTYPE_TOKEN_SEMICOLON :
-                               *pStatus = VCARD_PARAM_NAME_STATUS;
-                               break;
-                       case VTYPE_TOKEN_COLON :
-                               *pStatus = VCARD_TYPE_VALUE_STATUS;
-                               break;
-                       case VTYPE_TOKEN_COMMA :
-                               *pStatus = VCARD_PARAM_VALUE_STATUS;
-                               break;
+               switch (c) {
+               case VTYPE_TOKEN_SEMICOLON:
+                       *pStatus = VCARD_PARAM_NAME_STATUS;
+                       break;
+               case VTYPE_TOKEN_COLON:
+                       *pStatus = VCARD_TYPE_VALUE_STATUS;
+                       break;
+               case VTYPE_TOKEN_COMMA:
+                       *pStatus = VCARD_PARAM_VALUE_STATUS;
+                       break;
                }
-               ifc == VTYPE_TOKEN_SEMICOLON
+               if (c == VTYPE_TOKEN_SEMICOLON
                                || c == VTYPE_TOKEN_COLON
                                || c == VTYPE_TOKEN_COMMA
                                || c == 0x00)
                        break;
        }
 
-       pBuf = (char *)malloc(len);
-       if(len < 1 || (pBuf  == NULL)) {
-               if (pBuf) {
-                       free(pBuf);
-                       pBuf = NULL;
-               }
+       /* if (len < 1)
+               return NULL;
+       */
 
+       pBuf = (char *)calloc(1, len);
+       if (pBuf  == NULL)
                return NULL;
-       }
+
        memset(pBuf, 0x00, len);
-       memcpy( pBuf, pTemp, len-1 );
+       memcpy(pBuf, pTemp, len-1);
        TRIM(pBuf);
        VDATA_TRACE_END
        return pBuf;
@@ -618,12 +600,12 @@ __VCardGetParamVal( char* pVCardRaw, int* pStatus, int* pDLen )
 /**
  * __VCardGetTypeVal() fine the type value and returns value.
  *
- * @param      pVCardRaw       The raw data
+ * @param              pVCardRaw               The raw data
  * @param              status                  Decoder status
- * @return     buffer          The result value
+ * @return             buffer                  The result value
  */
 char*
-__VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject* pType)
+__VCardGetTypeVal(char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject* pType)
 {
        VDATA_TRACE_BEGINE
        int num = 0;
@@ -639,23 +621,22 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
        int Status = 0;
        int Len = 0;
 
-       SysRequireEx( pVCardRaw, NULL );
+       SysRequireEx(pVCardRaw, NULL);
 
-       while(true)
-       {
+       while (true) {
                GO_NEXT_CHAR(c, pVCardRaw, pDLen);
 
-               ifc == 0x00) break;
+               if (c == 0x00) break;
 
                len++;
 
                /** This case means that there are more type's value. */
-               if ( c == VTYPE_TOKEN_SEMICOLON && bEscape == false ) {
+               if (c == VTYPE_TOKEN_SEMICOLON && bEscape == false) {
 
-                       if((pBuf = (char *)malloc(len)) == NULL) return NULL;
+                       if ((pBuf = (char *)calloc(1, len)) == NULL) return NULL;
 
                        memset(pBuf, 0x00, len);
-                       memcpy(pBuf,pTemp,len-1);
+                       memcpy(pBuf, pTemp, len-1);
 
                        TRIM(pBuf);
                        _VUnescape(pBuf);
@@ -663,11 +644,11 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
                        *pStatus = VCARD_TYPE_VALUE_STATUS;
 
                        /** Base 64 Decoding */
-                       if((enc & pEncList[1].flag) || (enc & pEncList[0].flag)) {
+                       if ((enc & pEncList[1].flag) || (enc & pEncList[0].flag)) {
 
                                bufferCount = (len * 6 / 8) + 2;
 
-                               if((pTmpBuf = (char *)malloc(bufferCount)) == NULL) {
+                               if ((pTmpBuf = (char *)calloc(1, bufferCount)) == NULL) {
                                        VFREE(pBuf);
                                        return NULL;
                                }
@@ -675,7 +656,7 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
                                memset(pTmpBuf, 0x00, bufferCount);
                                num = _VB64Decode(pTmpBuf, pBuf);
 
-                               if(pType != NULL) pType->numOfBiData = num;
+                               if (pType != NULL) pType->numOfBiData = num;
 
                                VFREE(pBuf);
                                pBuf = pTmpBuf;
@@ -684,19 +665,18 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
                        }
 
                        /** Quoted Printable Decoding */
-                       if(enc & pEncList[2].flag) {
+                       if (enc & pEncList[2].flag) {
 
                                int i = 0, j = 0;
 
-                               while(pBuf[i]) {
-                                       if(pBuf[i] == '\n' || pBuf[i] == '\r'){
+                               while (pBuf[i]) {
+                                       if (pBuf[i] == '\n' || pBuf[i] == '\r') {
                                                i++;
-                                               if(pBuf[i] == '\n'|| pBuf[i] == '\r')
+                                               if (pBuf[i] == '\n' || pBuf[i] == '\r')
                                                        i++;
 
-                                               if(pBuf[j-1] == '=') j--;
-                                       }
-                                       else
+                                               if (pBuf[j-1] == '=') j--;
+                                       } else
                                                pBuf[j++] = pBuf[i++];
                                }
                                pBuf[j] = '\0';
@@ -708,31 +688,26 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
                        break;
                }
 
-               if(c == '\\')
+               if (c == '\\')
                        bEscape = true;
-               else if(bEscape == true && c != VTYPE_TOKEN_SEMICOLON )
+               else if (bEscape == true && c != VTYPE_TOKEN_SEMICOLON)
                        bEscape = false;
-               else if((c == '\r') || (c == '\n'))
-               {
+               else if ((c == '\r') || (c == '\n')) {
                        c2 = *(pVCardRaw-2);
 
-                       if(c2 == '=' && (enc & pEncList[2].flag))
-                       {
+                       if (c2 == '=' && (enc & pEncList[2].flag)) {
                                c1 = *pVCardRaw;
-                               if((c1 == '\r') || (c1 == '\n'))
-                               {
+                               if ((c1 == '\r') || (c1 == '\n')) {
                                        pVCardRaw += 1;
                                        (*pDLen) += 1;
                                        len++;
                                }
-                       }
-                       else if(__VCardGetTypeName(pVCardRaw, &Status, &Len) != UNKNOWN_NAME)
-                       {
-                               --len;
-                               if((pBuf = (char *)malloc(len)) == NULL) return NULL;
+                       } else if (__VCardGetTypeName(pVCardRaw, &Status, &Len) != UNKNOWN_NAME) {
+                               --len;
+                               if ((pBuf = (char *)calloc(1, len)) == NULL) return NULL;
 
                                memset(pBuf, 0x00, len);
-                               memcpy(pBuf,pTemp,len-1);
+                               memcpy(pBuf, pTemp, len-1);
 
                                TRIM(pBuf);
                                _VUnescape(pBuf);
@@ -741,16 +716,16 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
 
                                c1 = *pVCardRaw;
 
-                               if((c1 == '\r') || (c1 == '\n')) {
+                               if ((c1 == '\r') || (c1 == '\n')) {
                                        pVCardRaw += 1;
                                        (*pDLen) += 1;
                                }
 
-                               if((enc & pEncList[1].flag) || (enc & pEncList[0].flag)) {
+                               if ((enc & pEncList[1].flag) || (enc & pEncList[0].flag)) {
 
                                        bufferCount = (len * 6 / 8) + 5;
 
-                                       if((pTmpBuf = (char *)malloc(bufferCount)) == NULL) {
+                                       if ((pTmpBuf = (char *)calloc(1, bufferCount)) == NULL) {
                                                VFREE(pBuf);
                                                return NULL;
                                        }
@@ -758,7 +733,7 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
                                        memset(pTmpBuf, 0x00, bufferCount);
                                        num = _VB64Decode(pTmpBuf, pBuf);
 
-                                       if(pType != NULL)
+                                       if (pType != NULL)
                                                pType->numOfBiData = num;
 
                                        VFREE(pBuf);
@@ -767,21 +742,18 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
                                        break;
                                }
 
-                               if(enc & pEncList[2].flag) {
+                               if (enc & pEncList[2].flag) {
 
                                        int i = 0, j = 0;
 
-                                       while(pBuf[i])
-                                       {
-                                               if(pBuf[i] == '\n' || pBuf[i] == '\r')
-                                               {
+                                       while (pBuf[i]) {
+                                               if (pBuf[i] == '\n' || pBuf[i] == '\r') {
                                                        i++;
-                                                       if(pBuf[i] == '\n' || pBuf[i] == '\r')
+                                                       if (pBuf[i] == '\n' || pBuf[i] == '\r')
                                                                i++;
 
-                                                       if(pBuf[j-1] == '=') j--;
-                                               }
-                                               else
+                                                       if (pBuf[j-1] == '=') j--;
+                                               } else
                                                        pBuf[j++] = pBuf[i++];
                                        }
                                        pBuf[j] = '\0';
@@ -800,7 +772,7 @@ __VCardGetTypeVal( char* pVCardRaw, int* pStatus, int* pDLen, int enc, VObject*
 
 
 int
-VCardGetTypeValue( int index )
+VCardGetTypeValue(int index)
 {
        VDATA_TRACE_BEGINE
        VDATA_TRACE("VCardGetTypeValue() enter..\n");
@@ -809,7 +781,7 @@ VCardGetTypeValue( int index )
 }
 
 int
-VCardGetValValue( int index )
+VCardGetValValue(int index)
 {
        VDATA_TRACE_BEGINE
        VDATA_TRACE("VCardGetValValue() enter..\n");
@@ -818,7 +790,7 @@ VCardGetValValue( int index )
 }
 
 int
-VCardGetEncValue( int index )
+VCardGetEncValue(int index)
 {
        VDATA_TRACE_BEGINE
        VDATA_TRACE("VCardGetEncValue() enter..\n");
@@ -827,7 +799,7 @@ VCardGetEncValue( int index )
 }
 
 int
-VCardGetCharsetValue( int index )
+VCardGetCharsetValue(int index)
 {
        VDATA_TRACE_BEGINE
        VDATA_TRACE("VCardGetCharsetValue() enter..\n");
@@ -841,8 +813,7 @@ VCardGetCharsetValue( int index )
  * @param       pVCardRaw            The raw data
  * @return      vObject             The result value
  */
-SLPAPI VTree*
-vcard_decode( char *pCardRaw )
+VTree* vcard_decode(char *pCardRaw)
 {
        VDATA_TRACE_BEGINE;
        char* szValue = NULL;
@@ -863,228 +834,230 @@ vcard_decode( char *pCardRaw )
        int param_status = false;
        int numberedParam = 0;
        int enc = 0;
-       int start_status = 0;
+       /* int start_status = 0; */
        char* temp = NULL;
 
        bool vcard_ended = false;
 
        SysRequireEx(pCardRaw != NULL, NULL);
        len = strlen(pCardRaw);
+       VDATA_TRACE("length of pCardRaw = %d", len);
 
        pCardRaw = _VUnfoldingNoSpecNew(pCardRaw);
+       if (pCardRaw == NULL)
+               return NULL;
+
        pCardRawTmp = pCardRaw;
-       len = _VManySpace2Space( pCardRaw );
+       len = _VManySpace2Space(pCardRaw);
+
+       VDATA_TRACE("ret value of _VManySpace2Space = %d", len);
 
-       if(!__VIsVcardFile(pCardRaw, CHECK_START)) {
+       if (!__VIsVcardFile(pCardRaw, CHECK_START)) {
                VFREE(pCardRawTmp);
                VDATA_TRACE_END
                return NULL;
        }
 
 
-       while(true && !done)
-       {
+       while (true && !done) {
                c = *pCardRaw;
 
-               if((c == '\0') || done)
+               if ((c == '\0') || done)
                        break;
 
-               switch(status) {
-                       case VCARD_TYPE_NAME_STATUS:
-                               dLen = 0;
-                               type = __VCardGetTypeName(pCardRaw, &status, &dLen);
-                               pCardRaw += dLen;
+               switch (status) {
+               case VCARD_TYPE_NAME_STATUS:
+                       dLen = 0;
+                       type = __VCardGetTypeName(pCardRaw, &status, &dLen);
+                       pCardRaw += dLen;
 
-                               if(type == -1)
-                                       break;
+                       if (type == -1)
+                               break;
 
-                               switch ( type )
-                               {
-                                       case VCARD_TYPE_BEGIN:
-                                               if(start_status == 1) {
-                                                       goto CATCH;
-                                               }
-                                               if ( ( pVCard = ( VTree* )malloc( sizeof( VTree ) ) ) == NULL ) {
-                                                       start_status = 1;
-                                                       goto CATCH;
-                                               }
-
-                                               memset(pVCard,0x00, sizeof(VTree));
-
-                                               dLen = 0;
-                                               szCardBegin = __VCardGetTypeVal(pCardRaw, &status, &dLen, enc, NULL);
-                                               pCardRaw += dLen;
-                                               VFREE(szCardBegin);
-
-                                               pVCard->treeType = VCARD;
-                                               pVCard->pTop = NULL;
-                                               pVCard->pCur = NULL;
-                                               pVCard->pNext = NULL;
-                                               break;
-
-                                       case VCARD_TYPE_END:
-                                               enc = 0;
-                                               if(strstr(pCardRaw,"VCARD") != NULL) {
-                                                       pCardRaw += dLen;
-                                                       done = true;
-                                               vcard_ended = true;
-                                               }
-                                               else    {
-                                                       status = VCARD_TYPE_NAME_STATUS;
-                                                       pCardRaw += dLen;
-                                                       //VFREE(etemp);
-                                               }
-                                               break;
-
-                                       case UNKNOWN_NAME :
-                                               break;
-
-                                       default:
-                                               if(UNKNOWN_NAME == type || type < 0) {
-                                                       status = VCARD_TYPE_NAME_STATUS;
-                                                       break;
-                                               }
-
-                                               if ( ( pTemp = ( VObject* )malloc( sizeof( VObject ) ) ) == NULL ) {
-                                                       goto CATCH;
-                                               }
-
-                                               memset( pTemp, 0, sizeof( VObject ) );
-                                               pTemp->property = type;
-
-                                               if ( pVCard->pTop == NULL ) {
-                                                       pVCard->pTop = pTemp;
-                                                       pVCard->pCur = pTemp;
-                                               }
-                                               else {
-                                                       pVCard->pCur->pSibling = pTemp;
-                                                       pVCard->pCur = pTemp;
-                                               }
-
-                                               break;
+                       switch (type) {
+                       case VCARD_TYPE_BEGIN:
+                               if (pVCard) {
+                                       free(pVCard);
+                                       pVCard = NULL;
                                }
 
-                               numberedParam = 0;
-                               param_status = false;
-                               valueCount = 0;
+                               if ((pVCard = (VTree*)calloc(1,  sizeof(VTree))) == NULL) {
+                                       /* start_status = 1; */
+                                       goto CATCH;
+                               }
 
-#ifdef VDATA_GROUPNAME_SUPPORTED
-                               if ( gszGroupName != NULL )
-                                       pVCard->pCur->pszGroupName = gszGroupName;
-#endif
-                               break;
+                               memset(pVCard, 0x00, sizeof(VTree));
 
-                       case VCARD_PARAM_NAME_STATUS:
-                       {
                                dLen = 0;
-                               param = __VCardGetParamName( pCardRaw, &status, &dLen );
+                               szCardBegin = __VCardGetTypeVal(pCardRaw, &status, &dLen, enc, NULL);
                                pCardRaw += dLen;
+                               VFREE(szCardBegin);
+
+                               pVCard->treeType = VCARD;
+                               pVCard->pTop = NULL;
+                               pVCard->pCur = NULL;
+                               pVCard->pNext = NULL;
+                               break;
 
-                               if ( param_status != true ) {
+                       case VCARD_TYPE_END:
+                               enc = 0;
+                               if (strstr(pCardRaw, "VCARD") != NULL) {
+                                       pCardRaw += dLen;
+                                       done = true;
+                                       vcard_ended = true;
+                               } else  {
+                                       status = VCARD_TYPE_NAME_STATUS;
+                                       pCardRaw += dLen;
+                                       /*VFREE(etemp); */
+                               }
+                               break;
 
-                                       if ( ( pTmpParam = ( VParam* )malloc( sizeof( VParam ) ) ) == NULL )
-                                                       goto CATCH;
+                       case UNKNOWN_NAME:
+                               break;
 
-                                       param_status = true;
-                                       pVCard->pCur->pParam = pTmpParam;
-                                       memset( pTmpParam, 0x00, sizeof( VParam ) );
-                                       VDATA_TRACE("pTmpParam : %p", pTmpParam);
+                       default:
+                               if (UNKNOWN_NAME == type || type < 0) {
+                                       status = VCARD_TYPE_NAME_STATUS;
+                                       break;
                                }
-                               else
-                               {
-                                       if ( ( pTmpParam->pNext = ( VParam* )malloc( sizeof( VParam ) ) ) == NULL )
-                                                       goto CATCH;
-
-                                       pTmpParam = pTmpParam->pNext;
-                                       memset( pTmpParam, 0x00, sizeof(VParam));
-                                       VDATA_TRACE("pTmpParam : %p", pTmpParam);
+
+                               if ((pTemp = (VObject*)calloc(1,  sizeof(VObject))) == NULL)
+                                       goto CATCH;
+
+                               memset(pTemp, 0, sizeof(VObject));
+                               pTemp->property = type;
+
+                               if (pVCard == NULL)
+                                       goto CATCH;
+
+                               if (pVCard->pTop == NULL) {
+                                       pVCard->pTop = pTemp;
+                                       pVCard->pCur = pTemp;
+                               } else {
+                                       pVCard->pCur->pSibling = pTemp;
+                                       pVCard->pCur = pTemp;
                                }
 
-                               pTmpParam->parameter = param;
                                break;
                        }
-                       case VCARD_PARAM_VALUE_STATUS:
-                               dLen = 0;
-                               numberedParam = 0;
-                               switch ( pTmpParam->parameter )
-                               {
-                                       case VCARD_PARAM_TYPE:
-                                               szValue = __VCardGetParamVal( pCardRaw, &status, &dLen );
-                                               numberedParam |= __VCardGetValue( szValue, pTypeList, VCARD_TYPE_PARAM_NUM );
-                                               break;
-                                       case VCARD_PARAM_VALUE:
-                                               szValue = __VCardGetParamVal( pCardRaw, &status, &dLen );
-                                               numberedParam |= __VCardGetValue( szValue, pValueList, VCARD_VALUE_PARAM_NUM );
-                                               break;
-                                       case VCARD_PARAM_ENCODING:
-                                               szValue = __VCardGetParamVal( pCardRaw, &status, &dLen );
-                                               numberedParam |= __VCardGetValue( szValue, pEncList, VCARD_ENCODE_PARAM_NUM );
-                                               enc = numberedParam;
-                                               break;
-                                       case VCARD_PARAM_CHARSET:
-                                               szValue = __VCardGetParamVal( pCardRaw, &status, &dLen );
-                                               numberedParam |= __VCardGetValue( szValue, pCharsetList, VCARD_CHARSET_PARAM_NUM );
-                                               break;
-                                       case VCARD_PARAM_CONTEXT:
-                                       case VCARD_PARAM_LANGUAGE:
-                                               // prevent 7605 08.03.13
-                                               szValue = __VCardGetParamVal( pCardRaw, &status, &dLen );
-                                               numberedParam = 0;
-                                               break;
-                                       default:
-                                               szValue = __VCardGetParamVal( pCardRaw, &status, &dLen );
-
-                                               SET_PARAM_VALUE(numberedParam, szValue, pTypeList, VCARD_TYPE_PARAM_NUM, pTmpParam, VCARD_PARAM_TYPE, enc);
-                                               SET_PARAM_VALUE(numberedParam, szValue, pValueList, VCARD_VALUE_PARAM_NUM, pTmpParam, VCARD_PARAM_VALUE, enc);
-                                               SET_PARAM_VALUE(numberedParam, szValue, pEncList, VCARD_ENCODE_PARAM_NUM, pTmpParam, VCARD_PARAM_ENCODING, enc);
-                                               SET_PARAM_VALUE(numberedParam, szValue, pCharsetList, VCARD_CHARSET_PARAM_NUM, pTmpParam, VCARD_PARAM_CHARSET, enc);
-
-                                               numberedParam = 0;
-                                               pCardRaw += dLen;
-                                               dLen = 0;
-
-                                               break;
-                               }
 
-                               VDATA_TRACE("%d, %s, %p",numberedParam, szValue, pTmpParam);
-                               pTmpParam->paramValue = numberedParam;
-                               pTmpParam->pNext = NULL;
-                               VFREE(szValue);
-                               pCardRaw += dLen;
+                       numberedParam = 0;
+                       param_status = false;
+                       valueCount = 0;
+
+#ifdef VDATA_GROUPNAME_SUPPORTED
+                       if (gszGroupName != NULL)
+                               pVCard->pCur->pszGroupName = gszGroupName;
+#endif
+                       break;
+
+               case VCARD_PARAM_NAME_STATUS:
+               {
+                       dLen = 0;
+                       param = __VCardGetParamName(pCardRaw, &status, &dLen);
+                       pCardRaw += dLen;
+
+                       if (param_status != true) {
+
+                               if ((pTmpParam = (VParam*)calloc(1,  sizeof(VParam))) == NULL)
+                                               goto CATCH;
+
+                               param_status = true;
+                               pVCard->pCur->pParam = pTmpParam;
+                               memset(pTmpParam, 0x00, sizeof(VParam));
+                               VDATA_TRACE("pTmpParam : %p", pTmpParam);
+                       } else {
+                               if ((pTmpParam->pNext = (VParam*)calloc(1,  sizeof(VParam))) == NULL)
+                                       goto CATCH;
+
+                               pTmpParam = pTmpParam->pNext;
+                               memset(pTmpParam, 0x00, sizeof(VParam));
+                               VDATA_TRACE("pTmpParam : %p", pTmpParam);
+                       }
+
+                       pTmpParam->parameter = param;
+                       break;
+               }
+               case VCARD_PARAM_VALUE_STATUS:
+                       dLen = 0;
+                       numberedParam = 0;
+                       switch (pTmpParam->parameter) {
+                       case VCARD_PARAM_TYPE:
+                               szValue = __VCardGetParamVal(pCardRaw, &status, &dLen);
+                               numberedParam |= __VCardGetValue(szValue, pTypeList, VCARD_TYPE_PARAM_NUM);
                                break;
-                       case VCARD_TYPE_VALUE_STATUS:
-                               dLen = 0;
-                               temp = __VCardGetTypeVal( pCardRaw, &status, &dLen, enc, pVCard->pCur);
+                       case VCARD_PARAM_VALUE:
+                               szValue = __VCardGetParamVal(pCardRaw, &status, &dLen);
+                               numberedParam |= __VCardGetValue(szValue, pValueList, VCARD_VALUE_PARAM_NUM);
+                               break;
+                       case VCARD_PARAM_ENCODING:
+                               szValue = __VCardGetParamVal(pCardRaw, &status, &dLen);
+                               numberedParam |= __VCardGetValue(szValue, pEncList, VCARD_ENCODE_PARAM_NUM);
+                               enc = numberedParam;
+                               break;
+                       case VCARD_PARAM_CHARSET:
+                               szValue = __VCardGetParamVal(pCardRaw, &status, &dLen);
+                               numberedParam |= __VCardGetValue(szValue, pCharsetList, VCARD_CHARSET_PARAM_NUM);
+                               break;
+                       case VCARD_PARAM_CONTEXT:
+                       case VCARD_PARAM_LANGUAGE:
+                               /* prevent 7605 08.03.13 */
+                               szValue = __VCardGetParamVal(pCardRaw, &status, &dLen);
+                               numberedParam = 0;
+                               break;
+                       default:
+                               szValue = __VCardGetParamVal(pCardRaw, &status, &dLen);
 
-                               if(valueCount <= VDATA_VALUE_COUNT_MAX) {
-                                       pVCard->pCur->pszValue[valueCount] = temp;
-                                       valueCount++;
-                                       pVCard->pCur->valueCount = valueCount;
-                               }
-                               else
-                                       VFREE(temp);
+                               SET_PARAM_VALUE(numberedParam, szValue, pTypeList, VCARD_TYPE_PARAM_NUM, pTmpParam, VCARD_PARAM_TYPE, enc);
+                               SET_PARAM_VALUE(numberedParam, szValue, pValueList, VCARD_VALUE_PARAM_NUM, pTmpParam, VCARD_PARAM_VALUE, enc);
+                               SET_PARAM_VALUE(numberedParam, szValue, pEncList, VCARD_ENCODE_PARAM_NUM, pTmpParam, VCARD_PARAM_ENCODING, enc);
+                               SET_PARAM_VALUE(numberedParam, szValue, pCharsetList, VCARD_CHARSET_PARAM_NUM, pTmpParam, VCARD_PARAM_CHARSET, enc);
 
+                               numberedParam = 0;
                                pCardRaw += dLen;
+                               dLen = 0;
+
                                break;
+                       }
+
+                       VDATA_TRACE("%d, %s, %p", numberedParam, szValue, pTmpParam);
+                       pTmpParam->paramValue = numberedParam;
+                       pTmpParam->pNext = NULL;
+                       VFREE(szValue);
+                       pCardRaw += dLen;
+                       break;
+               case VCARD_TYPE_VALUE_STATUS:
+                       dLen = 0;
+                       temp = __VCardGetTypeVal(pCardRaw, &status, &dLen, enc, pVCard->pCur);
+
+                       if (valueCount < VDATA_VALUE_COUNT_MAX) {
+                               pVCard->pCur->pszValue[valueCount] = temp;
+                               valueCount++;
+                               pVCard->pCur->valueCount = valueCount;
+                       } else
+                               VFREE(temp);
+
+                       pCardRaw += dLen;
+                       break;
                }
        }
 
        VFREE(pCardRawTmp);
 
-       if(pVCard->pTop == NULL)
+       if (pVCard == NULL || pVCard->pTop == NULL)
                goto CATCH;
 
-       if(!vcard_ended) {
+       if (!vcard_ended)
                goto CATCH1;
-       }
+
        VDATA_TRACE_END
        return pVCard;
 
-CATCH :
+CATCH:
        VFREE(pTemp);
-CATCH1 :
+CATCH1:
        VFREE(pCardRawTmp);
-       __VCardFreeVTreeMemory(pVCard);
+       vcard_free_vtree_memory(pVCard);
        VDATA_TRACE_END
        return NULL;
 }
@@ -1095,17 +1068,17 @@ CATCH1 :
  * @param       pVCardRaw            Data which will be encoded
  * @return      char *              Encoded result
  */
-SLPAPI char*
-vcard_encode( VTree *pVCardRaw )
+char* vcard_encode(VTree *pVCardRaw)
 {
        VDATA_TRACE_BEGINE
        char*           pVCardRes = NULL;
+       char*           pTempVCard = NULL;
        VObject *       pTmpObj =  NULL;
        char*           pTemp = NULL;
        int                     len;
        int                     total = 0;
-       int             cnt = 0;
-       int             lenTypeList = 0;
+       int                     cnt = 0;
+       int                     lenTypeList = 0;
 
        LENGTH_TYPE_LIST(pszCardTypeList, lenTypeList);
 
@@ -1116,71 +1089,71 @@ vcard_encode( VTree *pVCardRaw )
        SysRequireEx(pVCardRaw->treeType == VCARD, NULL);
        SysRequireEx(pVCardRaw->pTop->valueCount > 0, NULL);
 
-       //VDATA_TRACE("START %d %d", pVCardRaw->pTop->property, lenTypeList);
+       /* VDATA_TRACE("START %d %d", pVCardRaw->pTop->property, lenTypeList); */
 
-       for(;cnt < pVCardRaw->pTop->valueCount;cnt++) {
+       for (; cnt < pVCardRaw->pTop->valueCount; cnt++) {
 
-               if(pVCardRaw->pTop->pszValue[cnt] == NULL)  {
-                       VDATA_TRACE("pVCardRaw->pTop->valueCount : %d",pVCardRaw->pTop->valueCount);
+               if (pVCardRaw->pTop->pszValue[cnt] == NULL)  {
+                       VDATA_TRACE("pVCardRaw->pTop->valueCount : %d", pVCardRaw->pTop->valueCount);
                        VDATA_TRACE("pVCardRaw->pTop->pszValue[%d] : %s", cnt, pVCardRaw->pTop->pszValue[cnt]);
                        VDATA_TRACE_END
                        return NULL;
                }
        }
-
-       if ( ( pVCardRes = ( char * )malloc( sizeof( char ) * ( total += 14 + 14 ) ) ) == NULL )
-       {
-               VDATA_TRACE(  "vcard_encode:malloc failed\n" );
+       total += sizeof(char) * (14 + 14);
+       if ((pVCardRes = (char *)calloc(1, total)) == NULL) {
+               VDATA_TRACE("vcard_encode:calloc failed\n");
                VDATA_TRACE_END
                return NULL;
        }
 
-       memcpy( pVCardRes, "BEGIN:VCARD\r\n", 14 );
-       strcat( pVCardRes, "VERSION:2.1\r\n" );
+       memcpy(pVCardRes, "BEGIN:VCARD\r\n", 14);
+       g_strlcat(pVCardRes, "VERSION:2.1\r\n", total - strlen(pVCardRes));
 
        pTmpObj = pVCardRaw->pTop;
 
-       while ( true )
-       {
-               if(pTmpObj == NULL)
+       while (true) {
+               if (pTmpObj == NULL)
                        break;
 
-               if ( ( pTemp = __VCardTypeEncode( pTmpObj, pszCardTypeList[pTmpObj->property] ) ) != NULL )
-               {
-                       len = strlen( pTemp );
-
-                       if ( ( pVCardRes = ( char* )realloc( pVCardRes, ( total += len+10 ) ) ) == NULL )
-                       {
-                               VDATA_TRACE(  "vcard_encode():realloc failed\n");
-                               VFREE( pTemp );
+               if ((pTemp = __VCardTypeEncode(pTmpObj, pszCardTypeList[pTmpObj->property])) != NULL) {
+                       len = strlen(pTemp);
+                       total += len + sizeof(char) * 10;
+                       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)
-                               strncat(pVCardRes, pTemp, strlen(pTemp));
+                       if (strncmp(pTemp, "VERSION", strlen("VERSION")) != 0)
+                               g_strlcat(pVCardRes, pTemp, total - strlen(pVCardRes));
 
                        VDATA_TRACE("pTemp : %s", pTemp);
 
-                       VFREE( pTemp );
+                       VFREE(pTemp);
                        pTemp = NULL;
                }
 
-               if ( pTmpObj->pSibling != NULL )
+               if (pTmpObj->pSibling != NULL)
                        pTmpObj = pTmpObj->pSibling;
                else
                        break;
        }
 
-       if ( ( pVCardRes = ( char * )realloc( pVCardRes, ( total += 12 ) ) ) == NULL )
-       {
-               VDATA_TRACE(  "vcard_encode:realloc failed\n");
+       total += sizeof(char) * 12;
+       if ((pTempVCard = (char *)realloc(pVCardRes, total)) == NULL) {
+               VDATA_TRACE("vcard_encode:realloc failed\n");
+               VFREE(pVCardRes);
                VDATA_TRACE_END
                return NULL;
        }
-       strcat( pVCardRes, "END:VCARD\r\n" );
-       VDATA_TRACE_END
+       pVCardRes = pTempVCard;
+       g_strlcat(pVCardRes, "END:VCARD\r\n", total - strlen(pVCardRes));
+       VDATA_TRACE_END
        return pVCardRes;
 }
 
@@ -1194,20 +1167,19 @@ vcard_encode( VTree *pVCardRaw )
 int
 __VIsVcardFile(char *pCardRaw, int mode)
 {
-       int i=0;
+       int i = 0;
        bool rtnValue = true;
        char *pszVcardBegin = "BEGIN:VCARD";
 
-       switch(mode)
-       {
-               case CHECK_START :
-                       for(i=0; i < 11; i++)
-               if(*pszVcardBegin++ != *pCardRaw++)
-                                       rtnValue = false;
-                       break;
+       switch (mode) {
+       case CHECK_START:
+               for (i = 0; i < 11; i++)
+                       if (*pszVcardBegin++ != *pCardRaw++)
+                               rtnValue = false;
+               break;
 
-               default :
-                       rtnValue = false;
+       default:
+               rtnValue = false;
        }
        VDATA_TRACE_END
        return rtnValue;
@@ -1222,12 +1194,13 @@ __VIsVcardFile(char *pCardRaw, int mode)
  * @return      char *              Encoded result
  */
 char*
-__VCardTypeEncode( VObject *pTypeObj, char *pType )
+__VCardTypeEncode(VObject *pTypeObj, char *pType)
 {
        VDATA_TRACE_BEGINE
        int                     len;
        char*           pTemp = NULL;
        char*           szTypeValue = NULL;
+       char*           szTemp = NULL;
        int                     i;
        int                     enc = 0;
        char*           pEncode = NULL;
@@ -1235,167 +1208,166 @@ __VCardTypeEncode( VObject *pTypeObj, char *pType )
        int                     total = 0;
        int                     biLen = 0;
 
-       len = strlen( pType );
+       len = strlen(pType);
        biLen = pTypeObj->numOfBiData;
 
 #ifdef VDATA_GROUPNAME_SUPPORTED
-       if ( pTypeObj->pszGroupName != NULL )
-       {
-               len += strlen( pTypeObj->pszGroupName ) + 1;
-       }
-#endif // VDATA_GROUPNAME_SUPPORTED
-       if ( ( szTypeValue = ( char * )malloc( total += ( len+1 ) ) ) == NULL )
-       {
-               VDATA_TRACE(  "__VCardTypeEncode():malloc failed\n");
+       if (pTypeObj->pszGroupName != NULL)
+               len += strlen(pTypeObj->pszGroupName) + 1;
+#endif /* VDATA_GROUPNAME_SUPPORTED */
+
+       if ((szTypeValue = (char *)calloc(1,  total += (len+1))) == NULL) {
+               VDATA_TRACE("__VCardTypeEncode():calloc failed\n");
                VDATA_TRACE_END
                return NULL;
        }
-       memset( szTypeValue, '\0', ( len+1 ) );
+       memset(szTypeValue, '\0', (len+1));
 #ifdef VDATA_GROUPNAME_SUPPORTED
-       if ( pTypeObj->pszGroupName != NULL )
-       {
-               strcat( szTypeValue, pTypeObj->pszGroupName );
-               strcat( szTypeValue, "." );
+       if (pTypeObj->pszGroupName != NULL) {
+               g_strlcat(szTypeValue, pTypeObj->pszGroupName, total - strlen(szTypeValue));
+               g_strlcat(szTypeValue, ".", total - strlen(szTypeValue));
        }
-#endif // VDATA_GROUPNAME_SUPPORTED
-       strcat( szTypeValue, pType );
-
-       pTemp = __VCardParamEncode( pTypeObj, &enc );
-       if ( pTemp != NULL )
-       {
-               len = strlen( pTemp );
-               if ( ( szTypeValue = ( char * )realloc( szTypeValue, ( total += len ) ) ) == NULL )
-               {
-                       VDATA_TRACE(  "__VCardTypeEncode():realloc failed\n");
-                       VFREE( pTemp );
-                       pTemp = NULL
-                       VDATA_TRACE_END;
+#endif /* VDATA_GROUPNAME_SUPPORTED */
+       g_strlcat(szTypeValue, pType, total - strlen(szTypeValue));
+
+       pTemp = __VCardParamEncode(pTypeObj, &enc);
+       if (pTemp != NULL) {
+               len = strlen(pTemp);
+               if ((szTemp = (char *)realloc(szTypeValue, (total += len))) == NULL) {
+                       VDATA_TRACE("__VCardTypeEncode():realloc failed\n");
+                       VFREE(pTemp);
+                       pTemp = NULL;
+                       VFREE(szTypeValue);
+                       VDATA_TRACE_END
                        return NULL;
+               } else {
+                       szTypeValue = szTemp;
                }
-               strcat( szTypeValue, pTemp );
-               VFREE( pTemp );
+               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;
        }
 
-       strcat( szTypeValue, ":" );
+       g_strlcat(szTypeValue, ":", total - strlen(szTypeValue));
 
        len = 0;
 
-       if(strcmp(pType, pszCardTypeList[19]) != 0)     {
-               for ( i = 0; i < pTypeObj->valueCount; i++ ) {
+       if (strcmp(pType, pszCardTypeList[19]) != 0)    {
+               for (i = 0; i < pTypeObj->valueCount; i++) {
 
-                       if(pTypeObj->pszValue[i] != NULL)
-                       len += strlen( pTypeObj->pszValue[i] );
-               }
-       }
-       else {
+                       if (pTypeObj->pszValue[i] != NULL)
+                               len += strlen(pTypeObj->pszValue[i]);
+               }
+       } else {
                len += biLen;
        }
 
-       for ( i = 0; i < pTypeObj->valueCount; i++ ) {
+       for (i = 0; i < pTypeObj->valueCount; i++) {
 
-               if ( i == 0 ) {
-                       if ( ( pEncode = ( char * )malloc( len+20 ) ) == NULL ) {
+               if (i == 0) {
+                       if ((pEncode = (char *)calloc(1,  len+20)) == NULL) {
                                VFREE(szTypeValue);
                                VDATA_TRACE_END
                                return NULL;
                        }
 
-                       memset( pEncode, '\0', len+20 );
+                       memset(pEncode, '\0', len+20);
 
-                       if(strcmp(pType, pszCardTypeList[19]) != 0)     {
-                               strcat( pEncode, pTypeObj->pszValue[i] );
+                       if (strcmp(pType, pszCardTypeList[19]) != 0)    {
+                               g_strlcat(pEncode, pTypeObj->pszValue[i], len+20 - strlen(pEncode));
                                _VEscape(pEncode);
-                       }
-                       else
+                       } else {
                                memcpy(pEncode, pTypeObj->pszValue[i], biLen);
                        }
-               else {
+               else {
                        char    buf[1000];
-                       strncpy( buf, pTypeObj->pszValue[i], 999 );
-                       _VEscape( buf );
-                       strcat( pEncode, ";" );
-                       strcat( pEncode, buf );
+                       strncpy(buf, pTypeObj->pszValue[i], 999);
+                       _VEscape(buf);
+                       g_strlcat(pEncode, ";", len+20 - strlen(pEncode));
+                       g_strlcat(pEncode, buf, len+20 - strlen(pEncode));
                }
        }
 
-       if(strcmp(pType, pszCardTypeList[19]) != 0)     {
+       if (strcmp(pType, pszCardTypeList[19]) != 0)    {
                if (pEncode) {
-                       strcat( pEncode, "\0\0" );
-                       len = strlen( pEncode );
+                       g_strlcat(pEncode, "\0\0", len+20 - strlen(pEncode));
+                       len = strlen(pEncode);
                }
-       }
-       else {
+       } else {
                len = biLen;
        }
 
-       if ( enc & pEncList[2].flag ) {
-               if((pRes = (char *)malloc(len * 6 + 10)) == NULL) {
+       if (enc & pEncList[2].flag) {
+               if ((pRes = (char *)calloc(1, len * 6 + 10)) == NULL) {
                        VFREE(pEncode);
                        VFREE(szTypeValue);
                        VDATA_TRACE_END
                        return NULL;
                }
-               if(pEncode)
-                       _VQPEncode( pRes, pEncode );
+               if (pEncode)
+                       _VQPEncode(pRes, pEncode);
                VFREE(pEncode);
-                       }
-       else if(enc & pEncList[1].flag ) {
-               if((pRes = (char *)malloc((len * 8 / 6) + 4)) == NULL){
+       } else if (enc & pEncList[1].flag) {
+               if ((pRes = (char *)calloc(1, (len * 8 / 6) + 4)) == NULL) {
                        VFREE(pEncode);
                        VFREE(szTypeValue);
                        VDATA_TRACE_END
                        return NULL;
                }
 
-               memset( pRes, '\0', ( ( len * 8 / 6 ) + 4 ) );
-               _VB64Encode( pRes, pEncode, biLen );
+               memset(pRes, '\0', ((len * 8 / 6) + 4));
+               _VB64Encode(pRes, pEncode, biLen);
                VFREE(pEncode);
-                       }
-       else {
-               if((pRes = (char *)malloc(len+30)) == NULL) {
+       } else {
+               if ((pRes = (char *)calloc(1, len+30)) == NULL) {
                        VFREE(pEncode);
                        VFREE(szTypeValue);
                        VDATA_TRACE_END
                        return NULL;
                }
-               memset( pRes, '\0', ( len + 30 ) );
-               if(pEncode)
-               {
-                       memcpy( pRes, pEncode, len );
+               memset(pRes, '\0', (len + 30));
+               if (pEncode) {
+                       memcpy(pRes, pEncode, len);
                        VFREE(pEncode);
                }
        }
 
-       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;
        }
-       strncat( pRes, "\r\n", strlen(pRes) + 2);
+       g_strlcat(pRes, "\r\n", 2);
 
-       len = strlen( pRes );
+       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;
        }
 
-       strncat(szTypeValue, pRes, total - 1);
+       g_strlcat(szTypeValue, pRes, total - strlen(szTypeValue));
 
-       if(strcmp(pType, pszCardTypeList[19]) != 0) {
-               _VRLSpace( szTypeValue );
-               _VRTSpace( szTypeValue );
+       if (strcmp(pType, pszCardTypeList[19]) != 0) {
+               _VRLSpace(szTypeValue);
+               _VRTSpace(szTypeValue);
        }
 
        VFREE(pRes);
@@ -1419,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;
 
@@ -1426,9 +1399,8 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
        pTemp = pTypeObj->pParam;
 
        /** Momory Allocation for parameter string. */
-       if(pTemp != NULL) {
-               if ((szParam = (char*)malloc(len+=2)) == NULL)
-               {
+       if (pTemp != NULL) {
+               if ((szParam = (char*)calloc(1, len += 2)) == NULL) {
                        VDATA_TRACE_END
                        return NULL;
                }
@@ -1436,69 +1408,74 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
        }
 
        /** appending pamaters. */
-       while(true) {
+       while (true) {
 
-               if(pTemp == NULL) break;
+               if (pTemp == NULL) break;
 
                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. */
-               strcat( szParam, ";" );
-               if(pTemp->parameter != VCARD_PARAM_TYPE) {
-                       strcat( szParam, pszCardParamList[pTemp->parameter] );
-                       strcat( szParam, "=" );
+               g_strlcat(szParam, ";", len - strlen(szParam));
+               if (pTemp->parameter != VCARD_PARAM_TYPE) {
+                       g_strlcat(szParam, pszCardParamList[pTemp->parameter], len - strlen(szParam));
+                       g_strlcat(szParam, "=", len - strlen(szParam));
                }
 
                /** Set Parameter Value name. */
-               switch ( pTemp->parameter )
-               {
-                       case VCARD_PARAM_ENCODING:
-                               *pEnc = pTemp->paramValue;
-                               shift = VCARD_ENCODE_PARAM_NUM;
-                               pList = pEncList; bSupported = true;
-                               break;
-                       case VCARD_PARAM_TYPE:
-                               shift = VCARD_TYPE_PARAM_NUM;
-                               pList = pTypeList; bSupported = true;
-                               break;
-                       case VCARD_PARAM_VALUE:
-                               shift = VCARD_VALUE_PARAM_NUM;
-                               pList = pValueList; bSupported = true;
-                               break;
-                       case VCARD_PARAM_CHARSET:
-                               shift = VCARD_CHARSET_PARAM_NUM;
-                               pList = pCharsetList; bSupported = true;
-                               break;
-                       default:
-                               if ( ( szParam = ( char* )realloc( szParam, 5 ) ) == NULL )
-                               {
-                                       VDATA_TRACE_END
-                                       return NULL;
-                               }
-                               strcat( szParam, "NONE" );
+               switch (pTemp->parameter) {
+               case VCARD_PARAM_ENCODING:
+                       *pEnc = pTemp->paramValue;
+                       shift = VCARD_ENCODE_PARAM_NUM;
+                       pList = pEncList; bSupported = true;
+                       break;
+               case VCARD_PARAM_TYPE:
+                       shift = VCARD_TYPE_PARAM_NUM;
+                       pList = pTypeList; bSupported = true;
+                       break;
+               case VCARD_PARAM_VALUE:
+                       shift = VCARD_VALUE_PARAM_NUM;
+                       pList = pValueList; bSupported = true;
+                       break;
+               case VCARD_PARAM_CHARSET:
+                       shift = VCARD_CHARSET_PARAM_NUM;
+                       pList = pCharsetList; bSupported = true;
+                       break;
+               default:
+                       if ((szTemp = (char*)realloc(szParam, 5)) == NULL) {
+                               VFREE(szParam);
+                               VDATA_TRACE_END
+                               return NULL;
+                       } else {
+                               szParam = szTemp;
+                       }
+                       g_strlcat(szParam, "NONE", 5 - strlen(szParam));
                }
 
                /** exchage parameter value's to string.*/
-               if(bSupported == true) {
+               if (bSupported == true) {
 
-                       for(i = 0, sNum = 0x00000001; i < shift; i++) {
+                       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 (pTemp->paramValue & sNum) {
+                                       if ((szTemp = (char *)realloc(szParam, (len += (strlen(pList[i].szName) + 2)))) == NULL) {
+                                               VFREE(szParam);
                                                VDATA_TRACE_END
                                                return NULL;
+                                       } else {
+                                               szParam = szTemp;
                                        }
 
-                                       strcat( szParam, pList[i].szName );
-                                       strcat( szParam, "; " );
+                                       g_strlcat(szParam, pList[i].szName, len - strlen(szParam));
+                                       g_strlcat(szParam, "; ", len - strlen(szParam));
                                }
 
                                sNum <<= 1;
@@ -1506,15 +1483,15 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
                }
 
                /** remove semicolon from tail. */
-               for(i = strlen( szParam ); i > 0 ; i--) {
+               for (i = strlen(szParam); i > 0 ; i--) {
 
-                       if ( szParam[i] == ' ' && szParam[i-1] == ';' ) {
+                       if (szParam[i] == ' ' && szParam[i-1] == ';') {
                                szParam[i-1] = '\0';
                                break;
                        }
                }
 
-               if ( pTemp->pNext != NULL )
+               if (pTemp->pNext != NULL)
                        pTemp = pTemp->pNext;
                else
                        break;
@@ -1523,12 +1500,10 @@ __VCardParamEncode(VObject* pTypeObj, int* pEnc)
        return szParam;
 }
 
-SLPAPI bool
-vcard_free_vtree_memory(VTree * pTree)
+bool vcard_free_vtree_memory(VTree * pTree)
 {
        VDATA_TRACE_BEGINE
-       if(pTree == NULL)
-       {
+       if (pTree == NULL) {
                VDATA_TRACE_END
                return false;
        }