hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=0882acfe934f16ac8aee0552c37683a68de8834a

commit 0882acfe934f16ac8aee0552c37683a68de8834a
Author: Hermet Park <[email protected]>
Date:   Thu Jun 2 00:08:04 2016 +0900

    edc_navigator: compare name elaborately to search the part correctly.
    
    previous string compare is not enough find the string if there are similar 
ones.
    
    now compare them in detail to correct this.
    
    @fix T3736
---
 src/bin/edc_navigator.c | 126 ++++++++++++++++++++++++++++--------------------
 1 file changed, 74 insertions(+), 52 deletions(-)

diff --git a/src/bin/edc_navigator.c b/src/bin/edc_navigator.c
index e1853a3..581150a 100644
--- a/src/bin/edc_navigator.c
+++ b/src/bin/edc_navigator.c
@@ -6,6 +6,18 @@
 #define IDX_MAX 999999
 #define PROGRAM_IDX (IDX_MAX - 1)
 
+#define ESCAPE_GOTO_END() \
+   p = strstr(++p, "\""); \
+   if (!p) goto end; \
+   p++; \
+   continue
+
+#define ESCAPE_RET_NULL() \
+   p = strstr(++p, "\""); \
+   if (!p) return NULL; \
+   p++; \
+   continue
+
 typedef struct group_it_s group_it;
 typedef struct part_it_s part_it;
 typedef struct state_it_s state_it;
@@ -278,10 +290,7 @@ find_group_proc_internal(char *utf8, char *utf8_end, const 
char *group_name)
         //Skip " ~ " Section
         if (*p == '\"')
           {
-             p = strstr(++p, "\"");
-             if (!p) return NULL;
-             p++;
-             continue;
+             ESCAPE_RET_NULL();
           }
 
         if (!strncmp("group", p, strlen("group")))
@@ -289,17 +298,24 @@ find_group_proc_internal(char *utf8, char *utf8_end, 
const char *group_name)
              p = strstr((p + 5), "\"");
              if (!p) return NULL;
              p++;
-             if (!strncmp(group_name, p, strlen(group_name)))
+             int group_name_len = strlen(group_name);
+             if (!strncmp(group_name, p, group_name_len))
                {
-                  result = p;
-                  break;
+                  //Compare Elaborately 
+                  char *next_quote = strstr(p, "\"");
+                  if (group_name_len == (next_quote - p))
+                    {
+                       result = p;
+                       break;
+                    }
+                  else
+                    {
+                       ESCAPE_RET_NULL();
+                    }
                }
              else
                {
-                  p = strstr(p, "\"");
-                  if (!p) return NULL;
-                  p++;
-                  continue;
+                  ESCAPE_RET_NULL();
                }
           }
         p++;
@@ -353,10 +369,7 @@ find_part_proc_internal(char *utf8, char *utf8_end, const 
char* group_name,
         //Skip " ~ " Section
         if (*p == '\"')
           {
-             p = strstr(++p, "\"");
-             if (!p) return NULL;
-             p++;
-             continue;
+             ESCAPE_RET_NULL();
           }
 
         if (!strncmp(part_type, p, strlen(part_type)))
@@ -364,17 +377,24 @@ find_part_proc_internal(char *utf8, char *utf8_end, const 
char* group_name,
              p = strstr((p + strlen(part_type)), "\"");
              if (!p) return NULL;
              p++;
-             if (!strncmp(part_name, p, strlen(part_name)))
+             int part_name_len = strlen(part_name);
+             if (!strncmp(part_name, p, part_name_len))
                {
-                  result = p;
-                  break;
+                  //Compare Elaborately 
+                  char *next_quote = strstr(p, "\"");
+                  if (part_name_len == (next_quote - p))
+                    {
+                       result = p;
+                       break;
+                    }
+                  else
+                    {
+                       ESCAPE_RET_NULL();
+                    }
                }
              else
                {
-                  p = strstr(p, "\"");
-                  if (!p) return NULL;
-                  p++;
-                  continue;
+                  ESCAPE_RET_NULL();
                }
           }
 
@@ -391,10 +411,7 @@ find_part_proc_internal(char *utf8, char *utf8_end, const 
char* group_name,
                }
              else
                {
-                  p = strstr(p, "\"");
-                  if (!p) return NULL;
-                  p++;
-                  continue;
+                  ESCAPE_RET_NULL();
                }
           }
 
@@ -459,10 +476,7 @@ find_state_proc(const char *group_name, const char 
*part_name,
         //Skip " ~ " Section
         if (*p == '\"')
           {
-             p = strstr(++p, "\"");
-             if (!p) goto end;
-             p++;
-             continue;
+             ESCAPE_GOTO_END();
           }
 
         if (!strncmp("desc", p, strlen("desc")))
@@ -470,17 +484,24 @@ find_state_proc(const char *group_name, const char 
*part_name,
              p = strstr((p + 4), "\"");
              if (!p) goto end;
              p++;
-             if (!strncmp(state_name, p, strlen(state_name)))
+             int state_name_len = strlen(state_name);
+             if (!strncmp(state_name, p, state_name_len))
                {
-                  result = p;
-                  break;
+                  //Compare Elaborately
+                  char *next_quote = strstr(p, "\"");
+                  if (state_name_len == (next_quote - p))
+                    {
+                       result = p;
+                       break;
+                    }
+                  else
+                    {
+                       ESCAPE_GOTO_END();
+                    }
                }
              else
                {
-                  p = strstr(p, "\"");
-                  if (!p) goto end;
-                  p++;
-                  continue;
+                  ESCAPE_GOTO_END();
                }
           }
         p++;
@@ -513,10 +534,7 @@ find_programs_proc_internal(char *utf8, char *utf8_end, 
const char *group_name)
         //Skip " ~ " Section
         if (*p == '\"')
           {
-             p = strstr(++p, "\"");
-             if (!p) return NULL;
-             p++;
-             continue;
+             ESCAPE_RET_NULL();
           }
 
         if (!strncmp("programs", p, strlen("programs")))
@@ -580,10 +598,7 @@ find_program_proc(const char *group_name, const char 
*program_name)
         //Skip " ~ " Section
         if (*p == '\"')
           {
-             p = strstr(++p, "\"");
-             if (!p) goto end;
-             p++;
-             continue;
+             ESCAPE_GOTO_END();
           }
 
         if (!strncmp("program", p, strlen("program")))
@@ -591,17 +606,24 @@ find_program_proc(const char *group_name, const char 
*program_name)
              p = strstr((p + 6), "\"");
              if (!p) goto end;
              p++;
-             if (!strncmp(program_name, p, strlen(program_name)))
+             int program_name_len = strlen(program_name);
+             if (!strncmp(program_name, p, program_name_len))
                {
-                  result = p;
-                  break;
+                  //Compare Elaborately 
+                  char *next_quote = strstr(p, "\"");
+                  if (program_name_len == (next_quote - p))
+                    {
+                       result = p;
+                       break;
+                    }
+                  else
+                    {
+                       ESCAPE_GOTO_END();
+                    }
                }
              else
                {
-                  p = strstr(p, "\"");
-                  if (!p) goto end;
-                  p++;
-                  continue;
+                  ESCAPE_GOTO_END();
                }
           }
         p++;

-- 


Reply via email to