author | Lars Hjemli <hjemli@gmail.com> | 2009-08-17 07:05:13 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2009-08-17 07:26:17 (UTC) |
commit | 435a1da8d1c43bff2f2ccd5649ea8510eec0b2af (patch) (side-by-side diff) | |
tree | c07a9d096c99a70e78b017b5edccb1eaaffd0795 /cgit.c | |
parent | 8a631b1173b1abecc5a737b0e21751ddbabf9df2 (diff) | |
download | cgit-435a1da8d1c43bff2f2ccd5649ea8510eec0b2af.zip cgit-435a1da8d1c43bff2f2ccd5649ea8510eec0b2af.tar.gz cgit-435a1da8d1c43bff2f2ccd5649ea8510eec0b2af.tar.bz2 |
cgit.c: do not segfault on unexpected query-string format
The querystring_cb() function will be invoked with a NULL value when
the querystring contains a name not followed by a '='. Such a value
used to cause a segfault, which this patch fixes.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -123,24 +123,27 @@ void config_cb(const char *name, const char *value) ctx.repo->module_link= xstrdup(value); else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) { if (*value == '/') ctx.repo->readme = xstrdup(value); else ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); } else if (!strcmp(name, "include")) parse_configfile(value, config_cb); } static void querystring_cb(const char *name, const char *value) { + if (!value) + value = ""; + if (!strcmp(name,"r")) { ctx.qry.repo = xstrdup(value); ctx.repo = cgit_get_repoinfo(value); } else if (!strcmp(name, "p")) { ctx.qry.page = xstrdup(value); } else if (!strcmp(name, "url")) { ctx.qry.url = xstrdup(value); cgit_parse_url(value); } else if (!strcmp(name, "qt")) { ctx.qry.grep = xstrdup(value); } else if (!strcmp(name, "q")) { ctx.qry.search = xstrdup(value); |