Fix svace issues 67/150867/1 accepted/tizen/4.0/unified/20170920.081652 submit/tizen_4.0/20170919.101719
authorSunmin Lee <sunm.lee@samsung.com>
Tue, 19 Sep 2017 03:02:35 +0000 (12:02 +0900)
committerSunmin Lee <sunm.lee@samsung.com>
Tue, 19 Sep 2017 03:02:35 +0000 (12:02 +0900)
Change-Id: Ie01674362a5dc0775e29953d146e8a90707188b9
Signed-off-by: Sunmin Lee <sunm.lee@samsung.com>
bsdiff/ss_bsdiff.c
bsdiff/ss_bspatch.c
ss_engine/SS_ApplyPatch.c
ss_engine/SS_Common.c
ss_engine/SS_Common.h
ss_engine/SS_FSUpdate.c
ss_engine/SS_PatchDelta.c
ss_engine/SS_UPI.c
ss_engine/fota_log.c
ss_engine/fota_tar.c

index 102f8ad8d24927a36a5cad4aff8d3c8877f1d482..7415c6b8d6e0c6a2b0318658a3e7503b5d2b4d2b 100755 (executable)
@@ -454,31 +454,23 @@ static void SzFree(void *p, void *address)
 }
 static ISzAlloc g_Alloc = { SzAlloc, SzFree };
 
-void PrintHelp(char *buffer)
+int PrintError(char *buffer, const char *message, int buf_size)
 {
-       strcat(buffer, "\nLZMA Utility " MY_VERSION_COPYRIGHT_DATE "\n"
-                       "\nUsage:  lzma <e|d> inputFile outputFile\n"
-                       "  e: encode file\n"
-                       "  d: decode file\n");
-}
-
-int PrintError(char *buffer, const char *message)
-{
-       strcat(buffer, "\nError: ");
-       strcat(buffer, message);
-       strcat(buffer, "\n");
+       snprintf(buffer + strlen(buffer), buf_size - strlen(buffer),
+                       "\nError: %s\n", message);
        return 1;
 }
 
-int PrintErrorNumber(char *buffer, SRes val)
+int PrintErrorNumber(char *buffer, SRes val, int buf_size)
 {
-       sprintf(buffer + strlen(buffer), "\nError code: %x\n", (unsigned)val);
+       snprintf(buffer + strlen(buffer), buf_size - strlen(buffer),
+                       "\nError code: %x\n", (unsigned)val);
        return 1;
 }
 
-int PrintUserError(char *buffer)
+int PrintUserError(char *buffer, int buf_size)
 {
-       return PrintError(buffer, "Incorrect command");
+       return PrintError(buffer, "Incorrect command", buf_size);
 }
 
 #define IN_BUF_SIZE (1 << 16)
@@ -519,7 +511,7 @@ static SRes Encode(ISeqOutStream *outStream, ISeqInStream *inStream, UInt64 file
        return res;
 }
 
-int main2(int numArgs, const char *args[], char *rs)
+int main2(int numArgs, const char *args[], char *rs, int rs_size)
 {
        CFileSeqInStream inStream;
        CFileOutStream outStream;
@@ -534,14 +526,14 @@ int main2(int numArgs, const char *args[], char *rs)
        size_t t4 = sizeof(UInt32);
        size_t t8 = sizeof(UInt64);
        if (t4 != 4 || t8 != 8)
-               return PrintError(rs, "Incorrect UInt32 or UInt64");
+               return PrintError(rs, "Incorrect UInt32 or UInt64", rs_size);
 
        if (InFile_Open(&inStream.file, "temp_patch") != 0)
-               return PrintError(rs, "Can not open input file");
+               return PrintError(rs, "Can not open input file", rs_size);
 
 
        if (OutFile_Open(&outStream.file, args[3]) != 0)
-               return PrintError(rs, "Can not open output file");
+               return PrintError(rs, "Can not open output file", rs_size);
 
 
        UInt64 fileSize;
@@ -553,14 +545,14 @@ int main2(int numArgs, const char *args[], char *rs)
 
        if (res != SZ_OK) {
                if (res == SZ_ERROR_MEM)
-                       return PrintError(rs, kCantAllocateMessage);
+                       return PrintError(rs, kCantAllocateMessage, rs_size);
                else if (res == SZ_ERROR_DATA)
-                       return PrintError(rs, kDataErrorMessage);
+                       return PrintError(rs, kDataErrorMessage, rs_size);
                else if (res == SZ_ERROR_WRITE)
-                       return PrintError(rs, kCantWriteMessage);
+                       return PrintError(rs, kCantWriteMessage, rs_size);
                else if (res == SZ_ERROR_READ)
-                       return PrintError(rs, kCantReadMessage);
-               return PrintErrorNumber(rs, res);
+                       return PrintError(rs, kCantReadMessage, rs_size);
+               return PrintErrorNumber(rs, res, rs_size);
        }
        return 0;
 }
@@ -584,7 +576,7 @@ int MY_CDECL main(int numArgs, const char *args[])
        if (ret != 0)
                err(1, "bsdiff fails to create delta within timelimit");
 #endif
-       int res = main2(numArgs, args, rs);
+       int res = main2(numArgs, args, rs, sizeof(rs));
        remove("temp_patch");
        fputs(rs, stdout);
        return res;
index 2c33a098b371285a5cae04365caebe40c1f28442..468bb1132e06bbf889daae4564b324c0833fa084 100755 (executable)
@@ -50,34 +50,26 @@ const char *kCantWriteMessage = "Can not write output file";
 const char *kCantAllocateMessage = "Can not allocate memory";
 const char *kDataErrorMessage = "Data error";
 
-void PrintHelp(char *buffer)
+int PrintError(char *buffer, const char *message, int buf_size)
 {
-       strcat(buffer, "\nLZMA Utility " MY_VERSION_COPYRIGHT_DATE "\n"
-                       "\nUsage:  lzma <e|d> inputFile outputFile\n"
-                       "  e: encode file\n"
-                       "  d: decode file\n");
-}
-
-int PrintError(char *buffer, const char *message)
-{
-       strcat(buffer, "\nError: ");
-       strcat(buffer, message);
-       strcat(buffer, "\n");
+       snprintf(buffer + strlen(buffer), buf_size - strlen(buffer),
+                       "\nError: %s\n", message);
        return 1;
 }
 
-int PrintErrorNumber(char *buffer, SRes val)
+int PrintErrorNumber(char *buffer, SRes val, int buf_size)
 {
-       sprintf(buffer + strlen(buffer), "\nError code: %x\n", (unsigned)val);
+       snprintf(buffer + strlen(buffer), buf_size - strlen(buffer),
+                       "\nError code: %x\n", (unsigned)val);
        return 1;
 }
 
-int PrintUserError(char *buffer)
+int PrintUserError(char *buffer, int buf_size)
 {
-       return PrintError(buffer, "Incorrect command");
+       return PrintError(buffer, "Incorrect command", buf_size);
 }
 
-int main2(int numArgs, const char *args[], char *rs)
+int main2(int numArgs, const char *args[], char *rs, int rs_size)
 {
        CFileSeqInStream inStream;
        CFileOutStream outStream;
@@ -98,12 +90,10 @@ int main2(int numArgs, const char *args[], char *rs)
        size_t t4 = sizeof(UInt32);
        size_t t8 = sizeof(UInt64);
        if (t4 != 4 || t8 != 8)
-               return PrintError(rs, "Incorrect UInt32 or UInt64");
+               return PrintError(rs, "Incorrect UInt32 or UInt64", rs_size);
 
        if (InFile_Open(&inStream.file, args[3]) != 0)
-               return PrintError(rs, "Can not open input file");
-       else if (encodeMode)
-               PrintUserError(rs);
+               return PrintError(rs, "Can not open input file", rs_size);
 
        if (encodeMode) {
                UInt64 fileSize;
@@ -127,7 +117,6 @@ int main2(int numArgs, const char *args[], char *rs)
                if (apply_patch(args[1], buf_res, &new_data, &new_size) != 0) {
                        if (new_data){
                                free(new_data);
-                               free(buf_res);
                        }
                        return 1;
                }
@@ -138,14 +127,14 @@ int main2(int numArgs, const char *args[], char *rs)
                        free(new_data);
                        free(buf_res);
                        if (res == SZ_ERROR_MEM)
-                               return PrintError(rs, kCantAllocateMessage);
+                               return PrintError(rs, kCantAllocateMessage, rs_size);
                        else if (res == SZ_ERROR_DATA)
-                               return PrintError(rs, kDataErrorMessage);
+                               return PrintError(rs, kDataErrorMessage, rs_size);
                        else if (res == SZ_ERROR_WRITE)
-                               return PrintError(rs, kCantWriteMessage);
+                               return PrintError(rs, kCantWriteMessage, rs_size);
                        else if (res == SZ_ERROR_READ)
-                               return PrintError(rs, kCantReadMessage);
-                       return PrintErrorNumber(rs, res);
+                               return PrintError(rs, kCantReadMessage, rs_size);
+                       return PrintErrorNumber(rs, res, rs_size);
                }
                free(new_data);
                free(buf_res);
@@ -159,7 +148,7 @@ int main(int numArgs, const char *args[])
        char rs[800] = { 0 };
        if (numArgs != 4)
                errx(1,"ss_bspatch Version 1.0\nUsage: ss_bspatch oldfile newfile patchfile\n");
-       int res = main2(numArgs, args, rs);
+       int res = main2(numArgs, args, rs, sizeof(rs));
        fputs(rs, stdout);
        return res;
 }
index 58ce8af13dba13bf68f52554e473ecb449fa9a40..9516085dd3ec57fee05343956f0301154abc05c1 100755 (executable)
@@ -52,6 +52,7 @@ int SS_ApplyBsdiff(char *oldfile, char *newfile, char *patch, SinkFn sink, void
     ISeqOutStream outStream;
     unsigned char *buf_res = NULL;
     unsigned char *new_data = NULL;
+    char buf[256];
     ssize_t new_size = 0;
     int result = E_SS_FAILURE;
 
@@ -98,7 +99,8 @@ int SS_ApplyBsdiff(char *oldfile, char *newfile, char *patch, SinkFn sink, void
 
     result = (sink(new_data, new_size, token) < new_size) ? E_SS_FAILURE : S_SS_SUCCESS;
     if (result != S_SS_SUCCESS) {
-        LOGE("short write of output: %d (%s)\n", errno, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("short write of output: %d (%s)\n", errno, buf);
         goto Cleanup;
     }
 
index adbc49b0cc066f4157aa4cd164c2b3799a11b161..6a38d22be58023dcb19b156cb842405592c7f23a 100755 (executable)
@@ -51,7 +51,7 @@ SS_UINT32 SS_Trace(void *pUser, const char *aFormat, ...)
     va_list list;
 
     va_start(list, aFormat);
-    vsprintf(temp, aFormat, list);
+    vsnprintf(temp, sizeof(temp), aFormat, list);
     va_end(list);
 
     LOGL(LOG_SSENGINE, "%s", temp);
index 35a8eff26cea9d3c91df5da3b6338f483f023467..5d920204d2a1edba9ce038fea94ff9f16d5e05f9 100755 (executable)
@@ -61,4 +61,4 @@ struct status_header_page {
     unsigned long bpuaStatus;
 };
 
-void SS_unicode_to_char(const char *src, char *dest);
+void SS_unicode_to_char(const char *src, char *dest, int size);
index 23b602f74c0db204cbc14a2163df3af88f09dd60..f0dadd1f84c1f4c4055f9bc93429e77a1a89f27a 100755 (executable)
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-#define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 600
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -72,22 +72,22 @@ void SS_create_dir(char *pathname, int mode)
 }
 
 
-void SS_unicode_to_char(const char *src, char *dest)
+void SS_unicode_to_char(const char *src, char *dest, int size)
 {
        if (src == NULL) {
                return;
        }
 
-       strcpy(dest, src);
+       strncpy(dest, src, size);
 }
 
-void SS_char_to_unicode(const char *src, char *dest)
+void SS_char_to_unicode(const char *src, char *dest, int size)
 {
        if (src == NULL) {
                return;
        }
 
-       strcpy(dest, src);
+       strncpy(dest, src, size);
 }
 
 long SS_recursive_folder_creater(const char *path, const mode_t mode)
@@ -137,8 +137,8 @@ SS_CopyFile(void *pbUserData,
                return -1;
        }
 
-       SS_unicode_to_char((const char *)strFromPath, (char *)path1);
-       SS_unicode_to_char((const char *)strToPath, (char *)path2);
+       SS_unicode_to_char((const char *)strFromPath, (char *)path1, MAX_PATH - 1);
+       SS_unicode_to_char((const char *)strToPath, (char *)path2, MAX_PATH - 1);
 
        //LOGL(LOG_SSENGINE, "%s -> %s \n", path1, path2);
 
@@ -175,7 +175,7 @@ long SS_DeleteFile(void *pbUserData, const char *strPath)
        char path[MAX_PATH] = { '\0' };
        int ret = 0;
 
-       SS_unicode_to_char((const char *)strPath, (char *)path);
+       SS_unicode_to_char((const char *)strPath, (char *)path, MAX_PATH - 1);
        //LOGL(LOG_SSENGINE, "%s\n", path);
        ret = unlink(path);
        if (ret == 0)
@@ -210,7 +210,7 @@ long SS_DeleteFolderEmpty(void *pbUserData, const char *strPath)
        int ret = 0;
        char path[MAX_PATH] = { '\0' };
 
-       SS_unicode_to_char((const char *)strPath, (char *)path);
+       SS_unicode_to_char((const char *)strPath, (char *)path, MAX_PATH - 1);
        //LOGL(LOG_SSENGINE, "%s\n", path);
        ret = rmdir(path);
        if ((ret == 0)
@@ -228,7 +228,7 @@ long SS_CreateFolder(void *pbUserData, const char *strPath)
        int ret = 0;
        char path[MAX_PATH] = { '\0' };
 
-       SS_unicode_to_char((const char *)strPath, (char *)path);
+       SS_unicode_to_char((const char *)strPath, (char *)path, MAX_PATH - 1);
        mode = S_IRUSR /*Read by owner */  |
            S_IWUSR /*Write by owner */  |
            S_IXUSR /*Execute by owner */  |
@@ -292,7 +292,7 @@ SS_OpenFile(void *pbUserData,
        mode_t mode;
        char path[MAX_PATH] = { '\0' };
 
-       SS_unicode_to_char((const char *)strPath, (char *)path);
+       SS_unicode_to_char((const char *)strPath, (char *)path, MAX_PATH - 1);
 
        mode = SS_get_mode(wFlag);
        //LOGL(LOG_SSENGINE, "Path:%s  wFlag:%d  Mode:%d\n", path, wFlag, mode);
@@ -328,7 +328,7 @@ SS_OpenFile(void *pbUserData,
                        dir[i + 1] = '\0';
 
                        SS_char_to_unicode((const char *)dir,
-                                       (char *)dirShort);
+                                       (char *)dirShort, MAX_PATH - 1);
 
                        if (SS_CreateFolder(pbUserData, dirShort)) {
                                LOGE(" Fail create folder, Leave SS_OpenFile\n");
@@ -431,8 +431,8 @@ long SS_MoveFile(void *pbUserData, const char *strFromPath,
                return -1;      //should never happen
        }
 
-       SS_unicode_to_char(strFromPath, (char *)path1);
-       SS_unicode_to_char(strToPath, (char *)path2);
+       SS_unicode_to_char(strFromPath, (char *)path1, MAX_PATH - 1);
+       SS_unicode_to_char(strToPath, (char *)path2, MAX_PATH - 1);
 
        LOGL(LOG_INFO, "entered path1:%s | path2:%s\n", path1, path2);
        ret = stat(path1, &sbuf);
@@ -540,7 +540,7 @@ long SS_Unlink(void *pbUserData, char *pLinkName)
        //enumFileType fileType = FT_REGULAR_FILE;
 
 
-       SS_unicode_to_char((const char *)pLinkName, (char *)path);
+       SS_unicode_to_char((const char *)pLinkName, (char *)path, MAX_PATH - 1);
 
        ret = unlink(path);
        if (ret < 0 && errno != ENOENT) {
@@ -563,8 +563,8 @@ SS_VerifyLinkReference(void *pbUserData,
        char refpath[MAX_PATH] = { '\0' };
 
 
-       SS_unicode_to_char((const char *)pLinkName, (char *)path);
-       SS_unicode_to_char((const char *)pReferenceFileName, (char *)refpath);
+       SS_unicode_to_char((const char *)pLinkName, (char *)path, MAX_PATH - 1);
+       SS_unicode_to_char((const char *)pReferenceFileName, (char *)refpath, MAX_PATH - 1);
 
        ret = readlink(path, linkedpath, MAX_PATH);
        if (ret < 0) {
@@ -590,8 +590,8 @@ SS_Link(void *pbUserData, char *pLinkName, char *pReferenceFileName)
        //enumFileType fileType = FT_SYMBOLIC_LINK;
        struct stat sbuf;
 
-       SS_unicode_to_char((const char *)pLinkName, (char *)sympath);
-       SS_unicode_to_char((const char *)pReferenceFileName, (char *)refpath);
+       SS_unicode_to_char((const char *)pLinkName, (char *)sympath, MAX_PATH - 1);
+       SS_unicode_to_char((const char *)pReferenceFileName, (char *)refpath, MAX_PATH - 1);
 
        ret = symlink(refpath, sympath);
        if (ret != 0) {
@@ -632,7 +632,7 @@ long SS_GetFileType(void *pbUserData,
        struct stat sbuf;
 
        //LOGL(LOG_SSENGINE, "\n");
-       SS_unicode_to_char((const char *)pLinkName, (char *)path);
+       SS_unicode_to_char((const char *)pLinkName, (char *)path, MAX_PATH - 1);
 
        ret = lstat(path, &sbuf);
        if (ret < 0) {
@@ -786,6 +786,7 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
        static char tmpSmackAttribs[512];
        char *tp;
        char *endstr;
+       char *saveptr;
        char *smack_value, *psmack;
        uid_t setUserID = 0;
        gid_t setGroupID = 0;
@@ -815,7 +816,7 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
                return S_SS_SUCCESS;
        }
 
-       SS_unicode_to_char((const char *)ui16pFilePath, (char *)setFilePath);
+       SS_unicode_to_char((const char *)ui16pFilePath, (char *)setFilePath, MAX_PATH - 1);
 
        ret = lstat(setFilePath, &sbuf);
        if (ret < 0) {
@@ -844,21 +845,21 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
        memset(tmpAttribs, 0x0, sizeof(tmpAttribs));
        memcpy(tmpAttribs, ui8pAttribs, (size_t) ui32AttribSize-1);
        smack_attr_pos = tmpAttribs;
-       tp = strtok(tmpAttribs, attrDelim);
+       tp = strtok_r(tmpAttribs, attrDelim, &saveptr);
 
        // Get FileMode
        if (tp != NULL) {
                smack_attr_pos += strlen(tp);
                smack_attr_pos++;
                setFileMode = strtol(tp, &endstr, 8);
-               tp = strtok(NULL, attrDelim);
+               tp = strtok_r(NULL, attrDelim, &saveptr);
        }
        // Get UserID
        if (tp != NULL) {
                smack_attr_pos += strlen(tp);
                smack_attr_pos++;
                setUserID = (uid_t) strtol(tp, &endstr, 10);
-               tp = strtok(NULL, attrDelim);
+               tp = strtok_r(NULL, attrDelim, &saveptr);
        }
        // Get GroupID
        if (tp != NULL) {
@@ -963,9 +964,9 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
                if(psmack) {
                        memset(tmpSmackAttribs, 0x0, sizeof(tmpSmackAttribs));
                        memcpy(tmpSmackAttribs, psmack, strlen(psmack));
-                       smack_value = strtok(tmpSmackAttribs, "\"");
+                       smack_value = strtok_r(tmpSmackAttribs, "\"", &saveptr);
                        if (smack_value) {
-                               smack_value = strtok(NULL, "\"");
+                               smack_value = strtok_r(NULL, "\"", &saveptr);
                                //LOGL(LOG_SSENGINE, "[SMACK_LABEL_ACCESS] smack_value=%s\n", smack_value);
                                if(smack_value) {
                                        ret = smack_lsetlabel(setFilePath, smack_value, SMACK_LABEL_ACCESS);
@@ -978,9 +979,9 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
                if(psmack) {
                        memset(tmpSmackAttribs, 0x0, sizeof(tmpSmackAttribs));
                        memcpy(tmpSmackAttribs, psmack, strlen(psmack));
-                       smack_value = strtok(tmpSmackAttribs, "\"");
+                       smack_value = strtok_r(tmpSmackAttribs, "\"", &saveptr);
                        if (smack_value) {
-                               smack_value = strtok(NULL, "\"");
+                               smack_value = strtok_r(NULL, "\"", &saveptr);
                                //LOGL(LOG_SSENGINE, "[SMACK_LABEL_EXEC] smack_value=%s\n", smack_value);
                                if(smack_value) {
                                        ret = smack_lsetlabel(setFilePath, smack_value, SMACK_LABEL_EXEC);
@@ -993,9 +994,9 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
                if(psmack) {
                        memset(tmpSmackAttribs, 0x0, sizeof(tmpSmackAttribs));
                        memcpy(tmpSmackAttribs, psmack, strlen(psmack));
-                       smack_value = strtok(tmpSmackAttribs, "\"");
+                       smack_value = strtok_r(tmpSmackAttribs, "\"", &saveptr);
                        if (smack_value) {
-                               smack_value = strtok(NULL, "\"");
+                               smack_value = strtok_r(NULL, "\"", &saveptr);
                                //LOGL(LOG_SSENGINE, "[SMACK_LABEL_MMAP] smack_value=%s\n", smack_value);
                                if(smack_value) {
                                        ret = smack_lsetlabel(setFilePath, smack_value, SMACK_LABEL_MMAP);
@@ -1008,9 +1009,9 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
                if(psmack) {
                        memset(tmpSmackAttribs, 0x0, sizeof(tmpSmackAttribs));
                        memcpy(tmpSmackAttribs, psmack, strlen(psmack));
-                       smack_value = strtok(tmpSmackAttribs, "\"");
+                       smack_value = strtok_r(tmpSmackAttribs, "\"", &saveptr);
                        if (smack_value) {
-                               smack_value = strtok(NULL, "\"");
+                               smack_value = strtok_r(NULL, "\"", &saveptr);
                                //LOGL(LOG_SSENGINE, "[SMACK_LABEL_TRANSMUTE] smack_value=%s\n", smack_value);
                                if(smack_value) {
                                        if (strcasecmp(smack_value, "TRUE")==0) {
@@ -1049,15 +1050,18 @@ long SS_SetFileAttributes(const char *ui16pFilePath,
        }
 
        if (feature_support_capability) {
+               char buf[256];
                if (has_cap)  {
                        if (setxattr(setFilePath, "security.capability", (void*)cap_raw, cap_len, 0) < 0) {
-                               LOGL(LOG_SSENGINE, "cap setxattr() failed: %s\n", strerror(errno));
+                               strerror_r(errno, buf, sizeof(buf));
+                               LOGL(LOG_SSENGINE, "cap setxattr() failed: %s\n", buf);
                        }
                }
 
                if (has_acl)  {
                        if (setxattr(setFilePath, "system.posix_acl_access", (void*)acl_raw, acl_len, 0) < 0) {
-                               LOGL(LOG_SSENGINE, "Acl setxattr() failed: %s\n", strerror(errno));
+                               strerror_r(errno, buf, sizeof(buf));
+                               LOGL(LOG_SSENGINE, "Acl setxattr() failed: %s\n", buf);
                        }
                        //LOG("Acl setxattr() :")asfd
                }
@@ -1095,7 +1099,7 @@ SS_GetAvailableFreeSpace(void *pbUserData, const char *partition_name,
        int result = 0;
        char path[MAX_PATH] = { '\0' };
 
-       SS_unicode_to_char(partition_name, (char *)path);
+       SS_unicode_to_char(partition_name, (char *)path, MAX_PATH - 1);
        //LOGL(LOG_SSENGINE, "Enter %s path=%s\n", __func__, path);
        struct statfs vfs;
 
index 0146afa58e4f809f11991e55f6342743e0c7fe61..49180a477e7e3821f25678420fd04d95a2b785a5 100755 (executable)
@@ -54,6 +54,7 @@ ssize_t ss_memorySink(unsigned char *data, ssize_t len, void *token)
 ssize_t ss_fileSink(unsigned char *data, ssize_t len, void *token)
 {
     int ss_fd = *(int *)token;
+    char buf[256];
     ssize_t done = 0;
     ssize_t wrote;
     while (done < (ssize_t) len) {
@@ -61,7 +62,8 @@ ssize_t ss_fileSink(unsigned char *data, ssize_t len, void *token)
         if (wrote <= 0) {
             if (errno == EINTR || errno == EAGAIN)
                 continue;       // try again
-            LOGE("error writing %d bytes: %s\n", (int)(len - done), strerror(errno));
+           strerror_r(errno, buf, sizeof(buf));
+            LOGE("error writing %d bytes: %s\n", (int)(len - done), buf);
             return done;
         }
         done += wrote;
@@ -133,10 +135,12 @@ int SS_LoadPartition(const char *filename, FileInfo * file)
     size_t read = 0;
     FILE *dev = NULL;
     int i;
+    char buf[256];
 
     dev = fopen(filename, "rb");
     if (dev == NULL) {
-        LOGE("failed to open partition \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to open partition \"%s\": %s\n", filename, buf);
         return -1;
     }
 
@@ -169,25 +173,29 @@ int SS_LoadPartition(const char *filename, FileInfo * file)
 
 int SS_LoadFile(const char *filename, FileInfo * file)
 {
+    char buf[256];
 
     file->data = NULL;
     //LOGL(LOG_SSENGINE,"SS_LoadFile --- [File name %s]\n",filename);
 
     if (stat(filename, &file->st) != 0) {
-        LOGE("failed to stat \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to stat \"%s\": %s\n", filename, buf);
         return -1;
     }
 
     file->size = file->st.st_size;
     file->data = SS_Malloc(file->size);
     if (!file->data) {
-        LOGE("failed to allocate memory for \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to allocate memory for \"%s\": %s\n", filename, buf);
         return -1;
     }
 
     FILE *f = fopen(filename, "rb");
     if (f == NULL) {
-        LOGE("failed to open \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to open \"%s\": %s\n", filename, buf);
         SS_Free(file->data);
         file->data = NULL;
         return -1;
@@ -548,6 +556,7 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
     char *outname = NULL;
     int backupsrc = -1;
     int result = 0;
+    char buf[256];
     FileInfo source_file;
     uint8_t source_sha1[SHA_DIGEST_SIZE] = { 0, };
 
@@ -583,7 +592,8 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
                 if (SS_LoadFile(SS_BACKUP_SOURCE, &source_file) == 0) {
                     if (memcmp(source_file.sha1, source_sha1, SHA_DIGEST_SIZE) == 0) {
                         if (SS_CopyFile(NULL, SS_BACKUP_SOURCE, source_filename) != S_SS_SUCCESS) {
-                            LOGE("copy of backup to \"%s\" failed: %s\n", source_filename, strerror(errno));
+                            strerror_r(errno, buf, sizeof(buf));
+                            LOGE("copy of backup to \"%s\" failed: %s\n", source_filename, buf);
                             SS_SetUpgradeState(E_SS_FSUPDATEFAILED);
                             if (source_file.data)
                                 SS_Free(source_file.data);
@@ -674,8 +684,8 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
             outname = (char *)SS_Malloc(strlen(target_filename) + 10);
             if (outname == NULL)
                 return -1;
-            strcpy(outname, target_filename);
-            strcat(outname, ".patch");
+           snprintf(outname, strlen(target_filename) + 10,
+                           "%s.patch", target_filename);
 
             output = open(outname, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
             if (output < 0) {
@@ -688,7 +698,8 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
                     *dir_path = '/';
                     output = open(outname, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
                     if (output < 0) {
-                        LOGE("failed to open output file %s: %s\n", outname, strerror(errno));
+                        strerror_r(errno, buf, sizeof(buf));
+                        LOGE("failed to open output file %s: %s\n", outname, buf);
                         SS_Free(outname);
                         return E_SS_FAILURE;
                     }
@@ -717,9 +728,6 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
                 LOGE("applying patch failed; retrying\n");
                 SS_Free(outname);//wgid: 20739
             }
-            if (outname != NULL) {
-                unlink(outname);
-            }
         } else {
             // succeeded; no need to retry
             break;
@@ -738,7 +746,8 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
     // Finally, rename the .patch file to replace the target file.
 #ifdef ENHANCED_BSDIFF
     if (SS_rename1(outname, target_filename) != 0) {
-        LOGE("rename of .patch to \"%s\" failed: %s\n", target_filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("rename of .patch to \"%s\" failed: %s\n", target_filename, buf);
         SS_SetUpgradeState(E_SS_FSUPDATEFAILED);
         if (outname != NULL) {
             SS_Free(outname);
@@ -747,7 +756,8 @@ int SS_UpdateDeltaFS(const char *source_filename, const char *target_filename,
     }
 #else
     if (rename(outname, target_filename) != 0) {
-        LOGE("rename of .patch to \"%s\" failed: %s\n", target_filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("rename of .patch to \"%s\" failed: %s\n", target_filename, buf);
         SS_SetUpgradeState(E_SS_FSUPDATEFAILED);
         if (outname != NULL) {
             SS_Free(outname);
@@ -794,7 +804,9 @@ int SS_UpdateDeltaKernel(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *
     int use_backup_img = -1;
     FILE *fp = NULL, *wp = NULL, *kp = NULL;
     int i = 0, j = 0, file_len = 0;
-    char *magic = NULL, *file_name = NULL, *buf = NULL, a = '0';
+    char *magic = NULL, *file_name = NULL, *tok_buf = NULL, *buf = NULL, a = '0';
+    char *saveptr;
+    char err_buf[256];
     char cmd[1024] = { 0, };
     char source_filename[MAX_FILE_PATH] = { 0, };
     char part_filename[MAX_FILE_PATH] = { 0, };
@@ -937,16 +949,20 @@ int SS_UpdateDeltaKernel(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *
     ssize_t bytes_read = fread(buf, 1, SS_KERNEL_DELTA_HEADER, fp);
     if (bytes_read != SS_KERNEL_DELTA_HEADER)
         LOGL(LOG_SSENGINE, "short read of \"%s\" (%ld bytes of %ld)\n", SS_PATCHFILE_SOURCE, (long)bytes_read, (long)SS_KERNEL_DELTA_HEADER);
-    magic = strtok(buf, ":");
+    magic = strtok_r(buf, ":", &saveptr);
     LOGL(LOG_SSENGINE, "magic: %s\n", magic);
-    file_num = atoi(strtok(NULL, ":"));
+    tok_buf = strtok_r(NULL, ":", &saveptr);
+    if (tok_buf)
+        file_num = atoi(tok_buf);
 
     //adjust offset to start of data section before proceeding
     fseek(fp, SS_KERNEL_DELTA_HEADER, SEEK_SET);
 
     while (file_num-- > 0) {
-        file_name = strtok(NULL, ":");
-        file_len = atoi(strtok(NULL, ":"));
+        file_name = strtok_r(NULL, ":", &saveptr);
+       tok_buf = strtok_r(NULL, ":", &saveptr);
+       if (tok_buf)
+           file_len = atoi(tok_buf);
         j = file_len;
         snprintf(source_filename, sizeof(source_filename) - 1, "%s/%s_unpacked/%s", SS_KERNEL_WORKSPACE, SS_KERNEL_NAME,
                  file_name);
@@ -969,13 +985,13 @@ int SS_UpdateDeltaKernel(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *
                 result = E_SS_FAILURE;
                 goto Cleanup;
             }
-            strcpy(outname, source_filename);
-            strcat(outname, ".patch");
+           snprintf(outname, strlen(source_filename) + 10, "%s.patch",
+                           source_filename);
 
             output = open(outname, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
             if (output < 0) {
-                LOGE("failed to open output file %s: %s\n", outname, strerror(errno));
-                SS_Free(outname);
+                strerror_r(errno, err_buf, sizeof(err_buf));
+                LOGE("failed to open output file %s: %s\n", outname, err_buf);
                 result = E_SS_FAILURE;
                 goto Cleanup;
             }
@@ -1001,7 +1017,7 @@ int SS_UpdateDeltaKernel(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *
             LOGE("fatal error %s\n", source_filename);
             goto Cleanup;
         }
-        if (strcmp(file_name, "piggy") == 0) {
+        if (file_name && strcmp(file_name, "piggy") == 0) {
             snprintf(cmd, sizeof(cmd) - 1,
                      "%s/gzip -n -9 -c %s/%s/%s > %s/%s/%s.gz",
                      SS_KERNEL_WORKSPACE, SS_KERNEL_WORKSPACE, SS_KERNEL_UNPACK_DIR, file_name,
@@ -1024,7 +1040,7 @@ int SS_UpdateDeltaKernel(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *
         fseek(wp, SEEK_SET, SEEK_SET);
         while (j-- > 0) {
             a = fgetc(wp);
-            if(a != EOF)//wgid: 4428
+            if(a != EOF)
                 fputc(a, kp);
             else
                 break;
@@ -1102,6 +1118,7 @@ int SS_UpdateDeltaIMG(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *, i
     int backupsrc = -1;
     int use_backup_img = -1;
     int fd = -1;
+    char buf[256];
     if (ParseSha1(ua_dataSS->update_cfg->target_sha1, target_sha1) != 0) {
         LOGE("failed to parse tgt-sha1 \"%s\"\n", ua_dataSS->update_cfg->target_sha1);
         return E_SS_FAILURE;
@@ -1200,7 +1217,8 @@ int SS_UpdateDeltaIMG(ua_dataSS_t * ua_dataSS, int (*write_to_blkdev) (char *, i
     } else if (ua_dataSS->update_cfg->update_type == EXTRA && ua_dataSS->update_data->ua_temp_path) {
         fd = open(ua_dataSS->update_data->ua_temp_path, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
         if (fd < 0) {
-            LOGE("failed to open %s for write: %s\n", ua_dataSS->update_data->ua_temp_path, strerror(errno));
+            strerror_r(errno, buf, sizeof(buf));
+            LOGE("failed to open %s for write: %s\n", ua_dataSS->update_data->ua_temp_path, buf);
             SS_SetUpgradeState(E_SS_IMGRECOVERYWRITEFAILED);
             result = E_SS_FAILURE;
             goto Cleanup;
index 2a9dbff5250f361fef4895f0f57cb7aea4fd288c..b974c18559029a7e48b8f3f3731e49bd921b112f 100755 (executable)
@@ -156,17 +156,20 @@ int SS_CalculateFileSha(char *filename, int filesize, FileInfo * file)
     FILE *fp = NULL;
     int ulResult = S_SS_SUCCESS;
     int chunk = 20*1024*1024;
+    char buf[256];
 
     fp = fopen(filename, "rb");
     if (fp == NULL) {
-        LOGE("failed to open \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to open \"%s\": %s\n", filename, buf);
         ulResult = E_SS_FAILURE;
         goto Cleanup;
     }
 
     file->data = SS_Malloc(chunk);
     if (!file->data) {
-        LOGE("failed to allocate memory for \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to allocate memory for \"%s\": %s\n", filename, buf);
         ulResult = E_SS_FAILURE;
         goto Cleanup;
     }
@@ -217,13 +220,16 @@ int SS_verify_DELTA_image(char *filename)
     char * delta_size = NULL;
     char *signature = NULL;
     char * sha1trg = NULL;
+    char *saveptr;
     uint8_t target_sha1[SHA_DIGEST_SIZE] = { 0, };
     char cmd[512] = { 0, };
+    char buf[256];
     int udelta_size = 0;
     int ulResult = S_SS_SUCCESS;
 
     if (stat(filename, &file.st) != 0) {
-        LOGE("failed to stat \"%s\": %s\n", filename, strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("failed to stat \"%s\": %s\n", filename, buf);
         return -1;
     }
 
@@ -251,12 +257,14 @@ int SS_verify_DELTA_image(char *filename)
     fclose(fp);
     fp = NULL;
 
-    signature = strtok(line, SS_TOEKN_COLON);
-    delta_size = strtok(NULL, SS_TOEKN_COLON);
-    sha1trg = strtok(NULL, SS_TOEKN_COLON);
+    signature = strtok_r(line, SS_TOEKN_COLON, &saveptr);
+    delta_size = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+    sha1trg = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
 
     if (signature && sha1trg && delta_size) {
         udelta_size = atoi(delta_size);
+       if (udelta_size < 0)
+                LOGE("Invalid udelta_size %d (%s)\n", udelta_size, delta_size);
         LOGL(LOG_SSENGINE, "delta_size %d sha1trg %s\n", udelta_size, sha1trg);
     }
     else {
@@ -337,8 +345,7 @@ int SS_rename1(const char *old_file_name, const char *new_file_name)
     temp_name = (char *)SS_Malloc(strlen(new_file_name) + 10);
     if (temp_name == NULL)
         return E_SS_FAILURE;
-    strcpy(temp_name, new_file_name);
-    strcat(temp_name, ".temp");
+    snprintf(temp_name, strlen(new_file_name) + 10, "%s.temp", new_file_name);
     result = rename(new_file_name, temp_name);
     if (result != 0)
         goto Cleanup;
@@ -622,6 +629,8 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
     char *FileData = NULL;
     int data_size = -1;
     char *line = NULL;
+    char *saveptr;
+    char buf[256];
     struct details *refer_copy = NULL;
     FILE *filename_bkup = NULL;
 
@@ -664,7 +673,8 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
     }
     filename_bkup = fopen(SS_PATCHLIST_BKUPLOC, "wb+");
     if (filename_bkup == NULL) {
-        LOGE("Failed to create BACKUP file Error:[%s]\n", strerror(errno));
+        strerror_r(errno, buf, sizeof(buf));
+        LOGE("Failed to create BACKUP file Error:[%s]\n", buf);
         SS_SetUpgradeState(E_SS_FSFAILEDTOBACKUPPATCHINFO);
         ret = 0;
         goto cleanup;
@@ -682,7 +692,7 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
     if (line) {
         LOGL(LOG_SSENGINE, "SS_FSGetDeltaCount() last line %s \n", line);
 
-        token = strtok(&line[SS_FSCOUNT_MAGIG_KEYLEN], SS_TOKEN_SPACE);
+        token = strtok_r(&line[SS_FSCOUNT_MAGIG_KEYLEN], SS_TOKEN_SPACE, &saveptr);
         if (token)
             refer_copy->diffs = atoi(token);
         else {
@@ -690,7 +700,7 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
             ret = 0;
             goto cleanup;
         }
-        token = strtok(NULL, SS_TOKEN_SPACE);
+        token = strtok_r(NULL, SS_TOKEN_SPACE, &saveptr);
         if (token)
             refer_copy->moves = atoi(token);
         else {
@@ -699,7 +709,7 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
             goto cleanup;
         }
 
-        token = strtok(NULL, SS_TOKEN_SPACE);
+        token = strtok_r(NULL, SS_TOKEN_SPACE, &saveptr);
         if (token)
             refer_copy->news = atoi(token);
         else {
@@ -708,7 +718,7 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
             goto cleanup;
         }
 
-        token = strtok(NULL, SS_TOKEN_SPACE);
+        token = strtok_r(NULL, SS_TOKEN_SPACE, &saveptr);
         if (token)
             refer_copy->deletes = atoi(token);
         else {
@@ -717,7 +727,7 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
             goto cleanup;
         }
 
-        token = strtok(NULL, SS_TOKEN_SPACE);
+        token = strtok_r(NULL, SS_TOKEN_SPACE, &saveptr);
         if (token)
             refer_copy->symdiffs = atoi(token);
         else {
@@ -726,7 +736,7 @@ struct details *SS_FSGetDeltaCount(char *ubDeltaPath, char *ubDeltaInfoFile)
             goto cleanup;
         }
 
-        token = strtok(NULL, SS_TOKEN_SPACE);
+        token = strtok_r(NULL, SS_TOKEN_SPACE, &saveptr);
         if (token)
             refer_copy->symnews = atoi(token);
         else {
@@ -794,6 +804,7 @@ fs_list *SS_FSBuildNodes(ua_dataSS_t * ua_dataSS)
     char *sha1trg = NULL;
     char *change_type = NULL;
     char *file_type = NULL;
+    char *saveptr;
     uint32_t ulPatchCount = 0, del_type = DELETES;
     fs_params *fs_diffhead = NULL;
     fs_params *fs_difftail = NULL;
@@ -870,13 +881,13 @@ SYM:NEW:system/lib/firmware/vbc_eq:/opt/system/vbc_eq
             }
             //LOGL(LOG_SSENGINE, "DIFF LINE:[%d] [%s] \n",i+1,line);
 
-            change_type = strtok(line, SS_TOEKN_COLON);
-            file_type = strtok(NULL, SS_TOEKN_COLON);
+            change_type = strtok_r(line, SS_TOEKN_COLON, &saveptr);
+            file_type = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
 
-            if (strcmp(change_type, SS_STRING_MOVE) == 0) {     // && strcmp(file_type,"TPK") == 0){
-                source_name = strtok(NULL, SS_TOEKN_COLON);
-                target_name = strtok(NULL, SS_TOEKN_COLON);
-                sha1src = strtok(NULL, SS_TOKEN_NEWLINE);
+            if (change_type && strcmp(change_type, SS_STRING_MOVE) == 0) {     // && strcmp(file_type,"TPK") == 0){
+                source_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                target_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                sha1src = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 //LOGL(LOG_SSENGINE, "%s Index [%d]\n", SS_STRING_MOVE, i);
 
                 if (!source_name || !target_name || !sha1src) {
@@ -892,15 +903,15 @@ SYM:NEW:system/lib/firmware/vbc_eq:/opt/system/vbc_eq
                 if (retval == E_SS_FAILURE)     // ONLY test purpose, should enable this
                     goto CleanUp;
                 SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 0);
-            } else if (strcmp(change_type, SS_STRING_DIFF) == 0) {      // && strcmp(file_type,"TPK") == 0){
-                source_name = strtok(NULL, SS_TOEKN_COLON);
-                target_name = strtok(NULL, SS_TOEKN_COLON);
-                sha1src = strtok(NULL, SS_TOEKN_COLON);
-                sha1trg = strtok(NULL, SS_TOEKN_COLON);
-                patch_name = strtok(NULL, SS_TOKEN_NEWLINE);
+            } else if (change_type && strcmp(change_type, SS_STRING_DIFF) == 0) {      // && strcmp(file_type,"TPK") == 0){
+                source_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                target_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                sha1src = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                sha1trg = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                patch_name = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 //LOGL(LOG_SSENGINE, "%s Index [%d]\n", SS_STRING_DIFF, i);
 
-                if (strlen(patch_name) <= SS_MAX_NAMELENSUPPORTED) {
+                if (patch_name && (strlen(patch_name) <= SS_MAX_NAMELENSUPPORTED)) {
                     retval =
                         SS_AppendNode(ua_dataSS->update_data->ua_delta_path, &fs_diffhead, &fs_difftail,
                                       source_name, target_name, patch_name, sha1src, sha1trg, DIFFS,
@@ -937,19 +948,19 @@ SYM:NEW:system/lib/firmware/vbc_eq:/opt/system/vbc_eq
                 break;
             }
 
-            change_type = strtok(line, SS_TOEKN_COLON);
-            file_type = strtok(NULL, SS_TOEKN_COLON);
+            change_type = strtok_r(line, SS_TOEKN_COLON, &saveptr);
+            file_type = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
 
-            if (strcmp(file_type, SS_STRING_REG) == 0) {
-                source_name = strtok(NULL, SS_TOEKN_COLON);
-                sha1src = strtok(NULL, SS_TOKEN_NEWLINE);
+            if (file_type && strcmp(file_type, SS_STRING_REG) == 0) {
+                source_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                sha1src = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 del_type = DELETES;
-            } else if (strcmp(file_type, SS_STRING_SYM) == 0) {
-                source_name = strtok(NULL, SS_TOKEN_NEWLINE);
+            } else if (file_type && strcmp(file_type, SS_STRING_SYM) == 0) {
+                source_name = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 sha1src = string_na;
                 del_type = DELETES;
-            } else if (strcmp(file_type, SS_STRING_END) == 0) {
-                source_name = strtok(NULL, SS_TOKEN_NEWLINE);
+            } else if (file_type && strcmp(file_type, SS_STRING_END) == 0) {
+                source_name = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 sha1src = string_na;
                 del_type = DELETE_END;
             }
@@ -985,13 +996,14 @@ SYM:NEW:system/lib/firmware/vbc_eq:/opt/system/vbc_eq
             }
             //LOGL(LOG_SSENGINE, "SYMDIFF LINE:[%d] [%s] \n",i+1,line);
 
-            change_type = strtok(line, SS_TOEKN_COLON);
-            file_type = strtok(NULL, SS_TOEKN_COLON);
+            change_type = strtok_r(line, SS_TOEKN_COLON, &saveptr);
+            file_type = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
 
-            if (strcmp(change_type, SS_STRING_SYM) == 0 && strcmp(file_type, SS_STRING_DIFF) == 0) {    // && strcmp(file_type,"TPK") == 0){
-                source_name = strtok(NULL, SS_TOEKN_COLON);
-                target_name = strtok(NULL, SS_TOEKN_COLON);
-                patch_name = strtok(NULL, SS_TOKEN_NEWLINE);
+            if ((change_type && file_type) &&
+                    strcmp(change_type, SS_STRING_SYM) == 0 && strcmp(file_type, SS_STRING_DIFF) == 0) {    // && strcmp(file_type,"TPK") == 0){
+                source_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                target_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                patch_name = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 //LOGL(LOG_SSENGINE, "%s %s Index [%d]\n", SS_STRING_SYM, SS_STRING_DIFF, i);
 
                 if (!source_name || !target_name || !patch_name) {
@@ -1019,12 +1031,13 @@ SYM:NEW:system/lib/firmware/vbc_eq:/opt/system/vbc_eq
             }
             //LOGL(LOG_SSENGINE, "SYMNEWS LINE:[%d] [%s] \n",i+1,line);
 
-            change_type = strtok(line, SS_TOEKN_COLON);
-            file_type = strtok(NULL, SS_TOEKN_COLON);
+            change_type = strtok_r(line, SS_TOEKN_COLON, &saveptr);
+            file_type = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
 
-            if (strcmp(change_type, SS_STRING_SYM) == 0 && strcmp(file_type, SS_STRING_NEW) == 0) {
-                source_name = strtok(NULL, SS_TOEKN_COLON);
-                patch_name = strtok(NULL, SS_TOKEN_NEWLINE);
+            if ((change_type && file_type) &&
+                    (strcmp(change_type, SS_STRING_SYM) == 0 && strcmp(file_type, SS_STRING_NEW) == 0)) {
+                source_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
+                patch_name = strtok_r(NULL, SS_TOKEN_NEWLINE, &saveptr);
                 //LOGL(LOG_SSENGINE, "%s %s Index [%d]\n", SS_STRING_SYM, SS_STRING_NEW, i);
 
                 if (!source_name || !patch_name) {
@@ -1145,7 +1158,7 @@ int SS_FSSetAttributes(ua_dataSS_t * ua_dataSS)
     }
 
     while (pline) {
-        pfilePath = strtok(pline, "\"");
+        pfilePath = strtok_r(pline, "\"", &psaveptr);
 
         if (pfilePath && strcmp(pfilePath, SS_FWSLASH) == 0) {
             LOGE("\n skip root: it is RO");
@@ -1153,9 +1166,9 @@ int SS_FSSetAttributes(ua_dataSS_t * ua_dataSS)
             continue;
         }
 
-        pfiletype = strtok(NULL, SS_TOKEN_SPACE);
-        attributSize = strtok(NULL, SS_TOKEN_SPACE);
-        pattribs = strtok(NULL, SS_TOKEN_NEWLINE);
+        pfiletype = strtok_r(NULL, SS_TOKEN_SPACE, &psaveptr);
+        attributSize = strtok_r(NULL, SS_TOKEN_SPACE, &psaveptr);
+        pattribs = strtok_r(NULL, SS_TOKEN_NEWLINE, &psaveptr);
         LOG("\nSS_FSSetAttributes [%s][%s][%s]", pfiletype, attributSize, pattribs);
         if (pattribs && pfilePath && pfiletype) {
             ulAttribSize = strlen(pattribs);
index 8421eac061667b630c21add9992b4cef6a6b5ebf..5fa32208e2124db23fe9c9ddd50626a301ffe43e 100755 (executable)
@@ -137,7 +137,7 @@ int log_printf(FILE* log_fp, char* format_str, ...)
        va_list list;
 
        va_start(list, format_str);
-       vsprintf(log_str, format_str, list);
+       vsnprintf(log_str, sizeof(log_str), format_str, list);
        va_end(list);
 
        len = strlen(log_str);
index 8f8226e905663b5223477156d80383df6f8c44db..5e10a88b95c518bb1fc04154998a88c48af9d20f 100755 (executable)
@@ -232,7 +232,7 @@ int tar_get_item_offset(char *tar, char *item)
         }
 
         /* get file name and file size */
-        memcpy(name, header, sizeof(name) - 1);//wgid: 24572
+        memcpy(name, header, sizeof(name) - 1);
         memcpy(size_oct, header + TAR_ITEM_SIZE_POSITION, sizeof(size_oct));
         size_dec = strtoul(size_oct, NULL, TAR_SIZE_OF_ITEM_SIZE);
         if (size_dec > MAX_ITEM_SIZE) {
@@ -404,7 +404,7 @@ char tar_get_item_type(char *tar, char *item)
         }
 
         /* get file name and file size */
-        memcpy(name, header, sizeof(name) - 1);//wgid: 24573
+        memcpy(name, header, sizeof(name) - 1);
         memcpy(size_oct, header + TAR_ITEM_SIZE_POSITION, sizeof(size_oct));
         size_dec = strtoul(size_oct, NULL, TAR_SIZE_OF_ITEM_SIZE);
         if (size_dec > MAX_ITEM_SIZE) {
@@ -771,7 +771,7 @@ int tar_get_folder_size(char *tar, char *item)
         }
 
         /* get file name and file size */
-        memcpy(name, header, sizeof(name) - 1);//wgid: 24574
+        memcpy(name, header, sizeof(name) - 1);
         memcpy(size_oct, header + TAR_ITEM_SIZE_POSITION, sizeof(size_oct));
         size_dec = strtoul(size_oct, NULL, TAR_SIZE_OF_ITEM_SIZE);
         if (size_dec > MAX_ITEM_SIZE) {
@@ -888,7 +888,7 @@ int tar_extract_folder(char *tar, char *item, char *path)
                 memset(name, 0, sizeof(name));
                 strncpy(name, buff + 157, 100); //157, target link name will be present
                 memset(dirPath, 0, sizeof(dirPath));
-                sprintf(dirPath, "%s/%s", path, fullname + folderpathlen);
+                snprintf(dirPath, sizeof(dirPath), "%s/%s", path, fullname + folderpathlen);
                 LOG(" Creating Symlink [%s][%s]\n", name, dirPath);
                 ret = symlink(name, dirPath); // use ss_link
                 if (ret < 0)
@@ -907,7 +907,7 @@ int tar_extract_folder(char *tar, char *item, char *path)
             if (strncmp(fullname, item, folderpathlen) == 0) {
                 //LOG(" Extracting dir %s\n", fullname);
                 memset(dirPath, 0, sizeof(dirPath));
-                sprintf(dirPath, "%s/%s", path, fullname + folderpathlen);
+                snprintf(dirPath, sizeof(dirPath), "%s/%s", path, fullname + folderpathlen);
                 create_dir(dirPath, parseoct(fullname + 100, 8));
             }
 
@@ -940,13 +940,14 @@ int tar_extract_folder(char *tar, char *item, char *path)
                     memset(name, 0, sizeof(name));
                     memset(dirPath, 0, sizeof(dirPath));
                     strncpy(name, buff, 100);
-                    strcat(name, buff + PREFIX_INDICATOR_BYTE);
-                    sprintf(dirPath, "%s/%s", path, name + folderpathlen);
+                   snprintf(name + strlen(name), sizeof(name) - strlen(name),
+                                   "%s", buff + PREFIX_INDICATOR_BYTE);
+                    snprintf(dirPath, sizeof(dirPath), "%s/%s", path, name + folderpathlen);
                     LOG(" File Name is longer than 100 bytes -Remaining Str [%s]\n Full Str[%s]", dirPath);
                 } else {
                     //LOG(" Extracting file %s\n", fullname);
                     memset(dirPath, 0, sizeof(dirPath));
-                    sprintf(dirPath, "%s/%s", path, fullname + folderpathlen);
+                    snprintf(dirPath, sizeof(dirPath), "%s/%s", path, fullname + folderpathlen);
                     f = create_file(dirPath, parseoct(fullname + 100, 8));
                 }
             }
@@ -998,6 +999,7 @@ int fast_tar_extract_file(char *tar, char *item, char *pathname, int size, int o
     ssize_t rdcnt = 0;
     ssize_t writeCount = 0;
     char *buf = NULL;
+    char err_buf[256];
     int fd2;
 
     if (gTarFd > 0)
@@ -1038,7 +1040,8 @@ int fast_tar_extract_file(char *tar, char *item, char *pathname, int size, int o
     writeCount = write(fd2, buf, rdcnt);
     if (writeCount != rdcnt) {
         LOG("writeCount write fail(%s from %s).\n", item, tar);
-        LOG("Oh  dear, something went wrong with read()! %s\n", strerror(errno));
+        strerror_r(errno, err_buf, sizeof(err_buf));
+        LOG("Oh  dear, something went wrong with read()! %s\n", err_buf);
         close(fd);
         close(fd2);
         SS_Free(buf);
@@ -1061,6 +1064,7 @@ int tar_extract_file(char *tar, char *item, char *pathname)
     ssize_t rdcnt = 0;
     ssize_t writeCount = 0;
     char *buf = NULL;
+    char err_buf[256];
     int fd2;
     data_size = tar_get_item_size(tar, item);
     data_offset = tar_get_item_offset(tar, item);
@@ -1104,7 +1108,8 @@ int tar_extract_file(char *tar, char *item, char *pathname)
     writeCount = write(fd2, buf, rdcnt);
     if (writeCount != rdcnt) {
         LOG("writeCount write fail(%s from %s).\n", item, tar);
-        LOG("Oh  dear, something went wrong with read()! %s\n", strerror(errno));
+        strerror_r(errno, err_buf, sizeof(err_buf));
+        LOG("Oh  dear, something went wrong with read()! %s\n", err_buf);
         close(fd);
         close(fd2);
         SS_Free(buf);