git, subversion: avoid a potential double-free

This should fix the detection of directories managed by Git or
Subversion.
This commit is contained in:
Pierre Pronchery 2024-06-03 03:02:27 +02:00
parent 413f082089
commit 8da8e4f6fb
2 changed files with 12 additions and 12 deletions

View File

@ -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;

View File

@ -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;