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
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename);
|
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename);
|
||||||
#endif
|
#endif
|
||||||
cur = g_path_get_dirname(filename);
|
cur = g_strdup(filename);
|
||||||
for(dir = cur; string_compare(dir, ".") != 0;
|
while(string_compare(cur, ".") != 0)
|
||||||
dir = g_path_get_dirname(cur))
|
|
||||||
{
|
{
|
||||||
g_free(cur);
|
if((p = string_new_append(cur, "/.git", NULL)) == NULL)
|
||||||
cur = dir;
|
|
||||||
if((p = string_new_append(dir, "/.git", NULL)) == NULL)
|
|
||||||
break;
|
break;
|
||||||
res = lstat(p, &st);
|
res = lstat(p, &st);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -396,8 +393,11 @@ static String * _git_get_base(Git * git, char const * filename)
|
||||||
g_free(cur);
|
g_free(cur);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
if(string_compare(dir, "/") == 0)
|
if(string_compare(cur, "/") == 0)
|
||||||
break;
|
break;
|
||||||
|
dir = g_path_get_dirname(cur);
|
||||||
|
g_free(cur);
|
||||||
|
cur = dir;
|
||||||
}
|
}
|
||||||
g_free(cur);
|
g_free(cur);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -362,12 +362,9 @@ static String * _subversion_get_base(SVN * svn, char const * filename)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename);
|
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, filename);
|
||||||
#endif
|
#endif
|
||||||
cur = g_path_get_dirname(filename);
|
cur = g_strdup(filename);
|
||||||
for(dir = cur; string_compare(dir, ".") != 0;
|
while(string_compare(cur, ".") != 0)
|
||||||
dir = g_path_get_dirname(cur))
|
|
||||||
{
|
{
|
||||||
g_free(cur);
|
|
||||||
cur = dir;
|
|
||||||
if((p = string_new_append(dir, "/.svn", NULL)) == NULL)
|
if((p = string_new_append(dir, "/.svn", NULL)) == NULL)
|
||||||
break;
|
break;
|
||||||
res = lstat(p, &st);
|
res = lstat(p, &st);
|
||||||
|
@ -381,6 +378,9 @@ static String * _subversion_get_base(SVN * svn, char const * filename)
|
||||||
}
|
}
|
||||||
if(string_compare(dir, "/") == 0)
|
if(string_compare(dir, "/") == 0)
|
||||||
break;
|
break;
|
||||||
|
dir = g_path_get_dirname(cur);
|
||||||
|
g_free(cur);
|
||||||
|
cur = dir;
|
||||||
}
|
}
|
||||||
g_free(cur);
|
g_free(cur);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user