init_db : allocate one more byte to boolean value 53/146853/2
authorKichan Kwon <k_c.kwon@samsung.com>
Thu, 31 Aug 2017 01:32:07 +0000 (10:32 +0900)
committerKichan Kwon <k_c.kwon@samsung.com>
Thu, 31 Aug 2017 02:43:46 +0000 (11:43 +0900)
- For null character, write (len + 1) bytes to the DB
- However, only len bytes are allocated for boolean value
- To prevent buffer over-read, give a spare byte

Change-Id: I5582e0ac5c1d5837ce9ac1b295762814011133f0
Signed-off-by: Kichan Kwon <k_c.kwon@samsung.com>
src/init_db/system_info_db_init.c

index 1647e34..8aa8f2e 100644 (file)
@@ -119,7 +119,7 @@ static int db_get_value(GDBM_FILE *db, char *tag, char *name, char *type, char *
 
 static int db_set_value_specific_runtime(GDBM_FILE *db, char *tag, char *name, char *type, char *value, int lang)
 {
-       char value_intg[LANG_MAX];
+       char value_intg[LANG_MAX + 1] = {0};
        int ret;
 
        ret = db_get_value(db, tag, name, type, value_intg, LANG_MAX);
@@ -127,7 +127,7 @@ static int db_set_value_specific_runtime(GDBM_FILE *db, char *tag, char *name, c
                return ret;
 
        value_intg[lang] = (value[0] == 't' ? 'T' : 'F');
-       ret = db_set_value(db, tag, name, type, value_intg, sizeof(value_intg));
+       ret = db_set_value(db, tag, name, type, value_intg, LANG_MAX);
 
        return ret;
 }
@@ -137,10 +137,10 @@ static int db_set_value_foreach_runtime(GDBM_FILE *db, xmlNode *node,
 {
        int rt;
        xmlChar *prop_val;
-       char value_intg[LANG_MAX];
+       char value_intg[LANG_MAX + 1] = {0};
        int ret;
 
-       memset(value_intg, strncmp(value, "true", 4) ? 'F' : 'T', sizeof(value_intg));
+       memset(value_intg, strncmp(value, "true", 4) ? 'F' : 'T', LANG_MAX);
 
        for (rt = 0; rt < LANG_MAX; rt++) {
                if (!runtime[rt].xml_prop)
@@ -155,7 +155,7 @@ static int db_set_value_foreach_runtime(GDBM_FILE *db, xmlNode *node,
                xmlFree(prop_val);
        }
 
-       ret = db_set_value(db, tag, name, type, value_intg, sizeof(value_intg));
+       ret = db_set_value(db, tag, name, type, value_intg, LANG_MAX);
 
        return ret;
 }
@@ -339,7 +339,7 @@ static int system_info_update_db(int argc, char *argv[])
        char type[KEY_MAX] = {0};
        char tag[KEY_MAX] = {0};
        char value[KEY_MAX] = {0};
-       char value_bool[LANG_MAX] = {0};
+       char value_bool[LANG_MAX + 1] = {0};
        enum language lang = LANG_MAX;
        int rt;