emulator_options: fix critical bug
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 29 Dec 2015 04:52:03 +0000 (13:52 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Wed, 30 Dec 2015 02:26:32 +0000 (11:26 +0900)
Variable value is contaminated during it is processed. We fix this
issue and prevent a recurrence of this issue by using "const" keyword.

Change-Id: I7d50a82a10a6b43b203e78b5394bf3eb8e0231a2
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
tizen/src/emul_state.c
tizen/src/emulator_options.c
tizen/src/emulator_options.h

index 3de5768..8befca6 100644 (file)
@@ -377,8 +377,8 @@ const char *get_kernel_log_redirect_file(void)
         return kernel_log_redirect_file;
     }
 
-    char *vms_path = get_variable("vms_path");
-    char *vm_name = get_variable("vm_name");
+    const char *vms_path = get_variable("vms_path");
+    const char *vm_name = get_variable("vm_name");
     if (!vms_path || !vm_name) {
         // we can not specify log path.
         // emulator may not be launched from emulator-manager.
@@ -443,8 +443,8 @@ const char *get_log_redirect_file(void)
         LOG_WARNING("Can not identify log redirection path, "
                 "We should assume it !!!\n");
 
-        char *vms_path = get_variable("vms_path");
-        char *vm_name = get_variable("vm_name");
+        const char *vms_path = get_variable("vms_path");
+        const char *vm_name = get_variable("vm_name");
         if (!vms_path || !vm_name) {
             // we can not specify log path.
             // emulator may not be launched from emulator-manager.
index a47fe09..2fcbce4 100644 (file)
@@ -101,7 +101,7 @@ void set_variable(const char * const arg1, const char * const arg2,
     QTAILQ_INSERT_TAIL(&variables, var, entry);
 }
 
-char *get_variable(const char * const name)
+const char *get_variable(const char * const name)
 {
     struct variable *var = NULL;
 
@@ -139,7 +139,7 @@ static void reset_default_opts(void)
 #endif
 }
 
-static char *substitute_variables(char *src, bool recursive)
+static char *substitute_variables(const char *src, bool recursive)
 {
     int i = 0;
     int start_index = -1;
@@ -149,10 +149,9 @@ static char *substitute_variables(char *src, bool recursive)
     // strip quotes
     int len = strlen(src);
     if (src[0] == '"' && src[len - 1] == '"') {
-        src[len - 1] = '\0';
-        str = g_strdup(src + 1);
+        str = g_strndup(src + 1, len -2);
     } else {
-        str = g_strdup(src);
+        str = g_strndup(src, len);
     }
 
     for (i = 0; str[i]; ++i) {
@@ -170,7 +169,7 @@ static char *substitute_variables(char *src, bool recursive)
             }
 
             char name[TOKEN_LIMIT];
-            char *value = NULL;
+            const char *value = NULL;
             char *buf = NULL;
             int length;
 
@@ -329,6 +328,7 @@ bool load_conf(const char * const conf)
     }
 
     fclose(file);
+
     return true;
 }
 
index f085f1b..40396c6 100644 (file)
@@ -38,7 +38,7 @@
 #endif
 
 void set_variable(const char * const arg1, const char * const arg2, bool override);
-char *get_variable(const char * const name);
+const char *get_variable(const char * const name);
 void reset_variables(void);
 bool load_conf(const char * const conf);
 #ifdef SUPPORT_SKIN_OPTIONS