author | Lars Hjemli <hjemli@gmail.com> | 2009-08-20 08:07:51 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2009-08-20 08:07:51 (UTC) |
commit | 0374a76ce10e50a803df21288888edd4d26a14a9 (patch) (unidiff) | |
tree | c6bfb9ba79d44b010bd63fecf061af9bbeb39134 | |
parent | e16f1783346a090e4ea1194dcaae7f03e813f6a2 (diff) | |
download | cgit-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>
-rw-r--r-- | cgit.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -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 | } |