fielding 97/03/18 01:46:29
Modified: src util_script.h util_script.c mod_negotiation.c Log: Fixed infinite loop when a trailing slash is included after a type map file URL (extra path info). Submitted by: Petr Lampa and Roy Fielding Reviewed by: Dean Gaudet Revision Changes Path 1.14 +1 -0 apache/src/util_script.h Index: util_script.h =================================================================== RCS file: /export/home/cvs/apache/src/util_script.h,v retrieving revision 1.13 retrieving revision 1.14 diff -C3 -r1.13 -r1.14 *** util_script.h 1997/01/01 18:10:47 1.13 --- util_script.h 1997/03/18 09:46:27 1.14 *************** *** 61,66 **** --- 61,67 ---- char **create_argv_cmd(pool *p, char *av0, const char *args, char *path); #endif char **create_environment(pool *p, table *t); + int find_path_info(char *uri, char *path_info); void add_cgi_vars(request_rec *r); void add_common_vars(request_rec *r); #define scan_script_header(a1,a2) scan_script_header_err(a1,a2,NULL) 1.47 +1 -1 apache/src/util_script.c Index: util_script.c =================================================================== RCS file: /export/home/cvs/apache/src/util_script.c,v retrieving revision 1.46 retrieving revision 1.47 diff -C3 -r1.46 -r1.47 *** util_script.c 1997/03/03 05:01:44 1.46 --- util_script.c 1997/03/18 09:46:27 1.47 *************** *** 213,219 **** * and find as much of the two that match as possible. */ ! static int find_path_info (char *uri, char *path_info) { int lu = strlen(uri); int lp = strlen(path_info); --- 213,219 ---- * and find as much of the two that match as possible. */ ! int find_path_info (char *uri, char *path_info) { int lu = strlen(uri); int lp = strlen(path_info); 1.36 +6 -1 apache/src/mod_negotiation.c Index: mod_negotiation.c =================================================================== RCS file: /export/home/cvs/apache/src/mod_negotiation.c,v retrieving revision 1.35 retrieving revision 1.36 diff -C3 -r1.35 -r1.36 *** mod_negotiation.c 1997/03/14 03:27:32 1.35 --- mod_negotiation.c 1997/03/18 09:46:28 1.36 *************** *** 62,67 **** --- 62,68 ---- #include "http_request.h" #include "http_core.h" #include "http_log.h" + #include "util_script.h" /* define TCN_02 to allow for Holtman I-D transparent negotiation. * This file currently implements the draft-02, except for *************** *** 1875,1883 **** if (na_result == na_not_applied) set_neg_headers(r, neg, na_not_applied); udir = make_dirstr (r->pool, r->uri, count_dirs (r->uri)); udir = escape_uri(r->pool, udir); ! internal_redirect (make_full_path (r->pool, udir, best->file_name), r); return OK; } --- 1876,1888 ---- if (na_result == na_not_applied) set_neg_headers(r, neg, na_not_applied); + if (r->path_info && *r->path_info) { + r->uri[find_path_info(r->uri, r->path_info)] = '\0'; + } udir = make_dirstr (r->pool, r->uri, count_dirs (r->uri)); udir = escape_uri(r->pool, udir); ! internal_redirect(pstrcat(r->pool, udir, best->file_name, r->path_info, ! NULL), r); return OK; }