git, subversion: avoid a potential double-free
This should fix the detection of directories managed by Git or Subversion.
This commit is contained in:
parent
413f082089
commit
8da8e4f6fb
|
@ -379,13 +379,10 @@ static String * _git_get_base(Git * git, char const * filename)
|
|||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename);
|
||||
#endif
|
||||
cur = g_path_get_dirname(filename);
|
||||
for(dir = cur; string_compare(dir, ".") != 0;
|
||||
dir = g_path_get_dirname(cur))
|
||||
cur = g_strdup(filename);
|
||||
while(string_compare(cur, ".") != 0)
|
||||
{
|
||||
g_free(cur);
|
||||
cur = dir;
|
||||
if((p = string_new_append(dir, "/.git", NULL)) == NULL)
|
||||
if((p = string_new_append(cur, "/.git", NULL)) == NULL)
|
||||
break;
|
||||
res = lstat(p, &st);
|
||||
#ifdef DEBUG
|
||||
|
@ -396,8 +393,11 @@ static String * _git_get_base(Git * git, char const * filename)
|
|||
g_free(cur);
|
||||
return p;
|
||||
}
|
||||
if(string_compare(dir, "/") == 0)
|
||||
if(string_compare(cur, "/") == 0)
|
||||
break;
|
||||
dir = g_path_get_dirname(cur);
|
||||
g_free(cur);
|
||||
cur = dir;
|
||||
}
|
||||
g_free(cur);
|
||||
return NULL;
|
||||
|
|
|
@ -362,12 +362,9 @@ static String * _subversion_get_base(SVN * svn, char const * filename)
|
|||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename);
|
||||
#endif
|
||||
cur = g_path_get_dirname(filename);
|
||||
for(dir = cur; string_compare(dir, ".") != 0;
|
||||
dir = g_path_get_dirname(cur))
|
||||
cur = g_strdup(filename);
|
||||
while(string_compare(cur, ".") != 0)
|
||||
{
|
||||
g_free(cur);
|
||||
cur = dir;
|
||||
if((p = string_new_append(dir, "/.svn", NULL)) == NULL)
|
||||
break;
|
||||
res = lstat(p, &st);
|
||||
|
@ -381,6 +378,9 @@ static String * _subversion_get_base(SVN * svn, char const * filename)
|
|||
}
|
||||
if(string_compare(dir, "/") == 0)
|
||||
break;
|
||||
dir = g_path_get_dirname(cur);
|
||||
g_free(cur);
|
||||
cur = dir;
|
||||
}
|
||||
g_free(cur);
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue
Block a user