fix __get_date_and_time() to avoid buffer overflow 66/260066/1
authorJinWang An <jinwang.an@samsung.com>
Fri, 18 Jun 2021 05:44:25 +0000 (14:44 +0900)
committerJinWang An <jinwang.an@samsung.com>
Fri, 18 Jun 2021 05:44:25 +0000 (14:44 +0900)
Change-Id: Ib5151f08b4daf8a2cf6a0d35b3becb75d5545f64
Signed-off-by: JinWang An <jinwang.an@samsung.com>
i18ninfo/i18ninfo.cpp
tests/utc-capi-base-utils-udatepg.c

index 4c7df5a..7daf794 100644 (file)
@@ -547,12 +547,15 @@ static int __get_date_and_time(char *input_time)
        /* To get default time zone id */
        i18n_timezone_h tmz;
        char *timezone_id;
+       int timezone_id_len = 0;
        i18n_uchar default_timezone_id[BUF_SIZE] = {0, };
 
        ret = i18n_timezone_create_default(&tmz);
        CHECK_ERROR("18n_timezone_create_default", ret);
        ret = i18n_timezone_get_id(tmz, &timezone_id);
-       i18n_ustring_copy_ua_n(default_timezone_id, timezone_id, strlen(timezone_id));
+       timezone_id_len = strlen(timezone_id);
+       i18n_ustring_copy_ua_n(default_timezone_id, timezone_id,
+                                                       (timezone_id_len > BUF_SIZE - 1)? BUF_SIZE - 1 : timezone_id_len);
 
        int pattern_len, len;
        i18n_uchar pattern[BUF_SIZE], skeleton[BUF_SIZE];
index b30823c..943fd29 100644 (file)
@@ -107,7 +107,9 @@ int utc_capi_base_utils_i18n_udatepg_get_best_pattern_p(void)
 {
     assert_neq(dtpg, NULL);
     const char *a_skeleton = "MMMdd";
+    const char *b_skeleton = "MMMM";
     i18n_uchar skeleton[SKELETON_LEN] = { 0, };
+    i18n_uchar bskeleton[SKELETON_LEN] = { 0, };
     i18n_uchar best_pattern[I18N_ret_LEN] = { 0, };
     int skeleton_len;
     int best_pattern_len;
@@ -121,6 +123,14 @@ int utc_capi_base_utils_i18n_udatepg_get_best_pattern_p(void)
         capacity, &best_pattern_len);
     assert_eq(ret, I18N_ERROR_NONE);
 
+    i18n_ustring_copy_ua(bskeleton, b_skeleton);
+    skeleton_len = i18n_ustring_get_length(bskeleton);
+    capacity = (int)(sizeof(best_pattern)/sizeof(best_pattern[0]));
+
+    ret = i18n_udatepg_get_best_pattern(dtpg, bskeleton, skeleton_len, best_pattern,
+        capacity, &best_pattern_len);
+    assert_eq(ret, I18N_ERROR_NONE);
+
     return 0;
 }