summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2009-08-20 08:07:51 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-08-20 08:07:51 (UTC)
commit0374a76ce10e50a803df21288888edd4d26a14a9 (patch) (unidiff)
treec6bfb9ba79d44b010bd63fecf061af9bbeb39134
parente16f1783346a090e4ea1194dcaae7f03e813f6a2 (diff)
downloadcgit-0374a76ce10e50a803df21288888edd4d26a14a9.zip
cgit-0374a76ce10e50a803df21288888edd4d26a14a9.tar.gz
cgit-0374a76ce10e50a803df21288888edd4d26a14a9.tar.bz2
cgit.c: fix caching keyed on PATH_INFO with no QUERY_STRING
When generating a hash for caching, ctx.qry.raw is used as key. And since cgit_parse_url() zero-terminates it's argument (after the repo path), ctx.qry.raw must xstrdup(ctx.qry.url). Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/cgit.c b/cgit.c
index 5816f3d..b0e1c44 100644
--- a/cgit.c
+++ b/cgit.c
@@ -526,33 +526,33 @@ int main(int argc, const char **argv)
526 526
527 /* If no url parameter is specified on the querystring, lets 527 /* If no url parameter is specified on the querystring, lets
528 * use PATH_INFO as url. This allows cgit to work with virtual 528 * use PATH_INFO as url. This allows cgit to work with virtual
529 * urls without the need for rewriterules in the webserver (as 529 * urls without the need for rewriterules in the webserver (as
530 * long as PATH_INFO is included in the cache lookup key). 530 * long as PATH_INFO is included in the cache lookup key).
531 */ 531 */
532 path = ctx.env.path_info; 532 path = ctx.env.path_info;
533 if (!ctx.qry.url && path) { 533 if (!ctx.qry.url && path) {
534 if (path[0] == '/') 534 if (path[0] == '/')
535 path++; 535 path++;
536 ctx.qry.url = xstrdup(path); 536 ctx.qry.url = xstrdup(path);
537 if (ctx.qry.raw) { 537 if (ctx.qry.raw) {
538 qry = ctx.qry.raw; 538 qry = ctx.qry.raw;
539 ctx.qry.raw = xstrdup(fmt("%s?%s", path, qry)); 539 ctx.qry.raw = xstrdup(fmt("%s?%s", path, qry));
540 free(qry); 540 free(qry);
541 } else 541 } else
542 ctx.qry.raw = ctx.qry.url; 542 ctx.qry.raw = xstrdup(ctx.qry.url);
543 cgit_parse_url(ctx.qry.url); 543 cgit_parse_url(ctx.qry.url);
544 } 544 }
545 545
546 ttl = calc_ttl(); 546 ttl = calc_ttl();
547 ctx.page.expires += ttl*60; 547 ctx.page.expires += ttl*60;
548 if (ctx.env.request_method && !strcmp(ctx.env.request_method, "HEAD")) 548 if (ctx.env.request_method && !strcmp(ctx.env.request_method, "HEAD"))
549 ctx.cfg.nocache = 1; 549 ctx.cfg.nocache = 1;
550 if (ctx.cfg.nocache) 550 if (ctx.cfg.nocache)
551 ctx.cfg.cache_size = 0; 551 ctx.cfg.cache_size = 0;
552 err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, 552 err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root,
553 ctx.qry.raw, ttl, process_request, &ctx); 553 ctx.qry.raw, ttl, process_request, &ctx);
554 if (err) 554 if (err)
555 cgit_print_error(fmt("Error processing page: %s (%d)", 555 cgit_print_error(fmt("Error processing page: %s (%d)",
556 strerror(err), err)); 556 strerror(err), err));
557 return err; 557 return err;
558} 558}