aboutsummaryrefslogtreecommitdiff
path: root/src/verify.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/verify.c')
-rw-r--r--src/verify.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/verify.c b/src/verify.c
index 01c61ea..93fd28b 100644
--- a/src/verify.c
+++ b/src/verify.c
@@ -93,7 +93,7 @@ fill_project_name (struct file_triplet *trp)
char *blurb;
size_t size;
FILE *fp;
- char *project, *p;
+ char *p;
const char *directory;
int rc;
@@ -150,23 +150,32 @@ fill_project_name (struct file_triplet *trp)
trp->file[file_directive].name);
return 1;
}
- p = strchr (directory, '/');
+
+ trp->relative_dir = safe_file_name (triplet_strdup (trp, directory));
+ if (!trp->relative_dir || trp->relative_dir[0] == '/')
+ {
+ logmsg (LOG_ERR, _("%s: invalid directory: %s"),
+ trp->file[file_directive].name, directory);
+ return 1;
+ }
+
+ p = strchr (trp->relative_dir, '/');
if (p)
{
- size_t len = p - directory;
+ size_t len = p - trp->relative_dir;
if (len == 0)
{
logmsg (LOG_ERR, _("%s: empty `directory' directive"),
trp->file[file_directive].name);
return 1;
}
- project = xmalloc (len + 1);
- memcpy (project, directory, len);
- project[len] = 0;
+ obstack_grow (&trp->obstk, trp->relative_dir, len);
+ obstack_1grow (&trp->obstk, 0);
+ trp->project = obstack_finish (&trp->obstk);
}
else
- project = xstrdup (directory);
- trp->project = xstrdup (project);
+ trp->project = trp->relative_dir;
+
return 0;
}
@@ -254,16 +263,16 @@ verify_directive_file (struct file_triplet *trp)
memset (&info, 0, sizeof (info));
p = dictionary_result (dict, md, i, 0);
if (p)
- info.name = xstrdup (p);
+ info.name = triplet_strdup (trp, p);
p = dictionary_result (dict, md, i, 1);
if (p)
- info.realname = xstrdup (p);
+ info.realname = triplet_strdup (trp, p);
p = dictionary_result (dict, md, i, 2);
if (p)
- info.email = xstrdup (p);
+ info.email = triplet_strdup (trp, p);
p = dictionary_result (dict, md, i, 3);
if (p)
- info.gpg_key = xstrdup (p);
+ info.gpg_key = triplet_strdup (trp, p);
if (debug_level > 3)
{
@@ -278,10 +287,7 @@ verify_directive_file (struct file_triplet *trp)
logmsg (LOG_ERR,
_("project-uploader dictionary error: malformed row %lu"),
(unsigned long) i);
- free (info.name);
- free (info.realname);
- free (info.gpg_key);
- free (info.email);
+ /* FIXME: Memory not reclaimed */
continue;
}

Return to:

Send suggestions and report system problems to the System administrator.