Fix crash issue due to garbage value 07/227307/1 accepted/tizen/unified/20200407.043020 submit/tizen/20200406.033132
authorjiyong.min <jiyong.min@samsung.com>
Wed, 11 Mar 2020 06:17:09 +0000 (15:17 +0900)
committerJiyong Min <jiyong.min@samsung.com>
Wed, 11 Mar 2020 06:51:19 +0000 (06:51 +0000)
  - If the result of g_convert() is empty string, the written_len is 0.
    Then (unsigned int)'written_len - 1' became garbage value and
    checking carriage return make crash.

(gdb)bt full
mmfile_string_convert ...mm_file_util_string.c:189
        i = 1395696
        result = 0xae45a410 ""
        err = 0x0
        written_len = 0

Change-Id: I61b4c3e4a6b938ce549844e163dc46f47398aa98

packaging/libmm-fileinfo.spec
utils/mm_file_util_string.c

index 1eef915..6561d3b 100644 (file)
@@ -1,6 +1,6 @@
 Name:      libmm-fileinfo
 Summary:    Media Fileinfo
-Version:    0.6.86
+Version:    0.6.87
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0
index be784ab..96f549c 100755 (executable)
@@ -173,18 +173,19 @@ char *mmfile_string_convert(const char *str, unsigned int len,
        result = g_convert(str, len, to_codeset, from_codeset, bytes_read, &written_len, &err);
 
        /*if converting failed, return null string.*/
-       if (!result) {
+       if (!result || written_len == 0) {
                debug_warning(RELEASE, "text encoding failed.[%s][%d]\n", str, len);
 
                if (err != NULL) {
                        debug_warning(DEBUG, "Error msg [%s]", err->message);
                        g_error_free(err);
                }
+               mmfile_free(result);
 
                written_len = 0;
        } else {
                /* check carriage return */
-               unsigned int i = 0;
+               gsize i = 0;
                for (i = 0; i < written_len - 1; i++) {
                        if (result[i] == '\r') {
                                if (result[i + 1] != '\n')