akosut 96/08/08 10:01:16
Modified: src util_script.c Log: Fix problems with SCRIPT_NAME and PATH_INFO when "special" sorts of URL-to-filename mapping occurs. Reviewed by: Robert S. Thau, Ben Laurie Revision Changes Path 1.20 +22 -7 apache/src/util_script.c Index: util_script.c =================================================================== RCS file: /export/home/cvs/apache/src/util_script.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C3 -r1.19 -r1.20 *** util_script.c 1996/08/06 19:31:06 1.19 --- util_script.c 1996/08/08 17:01:15 1.20 *************** *** 193,198 **** --- 193,215 ---- } } + /* This "cute" little function comes about because the path info on + * filenames and URLs aren't always the same. So we take the two, + * 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); + + while (lu-- && lp-- && uri[lu] == path_info[lp]); + + while (uri[lu] != '\0' && uri[lu] != '/') + lu++; + + return lu; + } void add_cgi_vars(request_rec *r) { *************** *** 212,222 **** if (!r->path_info || !*r->path_info || !strcmp (r->protocol, "INCLUDED")) { table_set (e, "SCRIPT_NAME", r->uri); } else { ! int path_info_start = strlen (r->uri) - strlen (r->path_info); ! ! r->uri[path_info_start] = '\0'; ! table_set (e, "SCRIPT_NAME", r->uri); ! r->uri[path_info_start] = '/'; } if (r->path_info && r->path_info[0]) { --- 229,239 ---- if (!r->path_info || !*r->path_info || !strcmp (r->protocol, "INCLUDED")) { table_set (e, "SCRIPT_NAME", r->uri); } else { ! int path_info_start = find_path_info (r->uri, r->path_info); ! ! table_set (e, "SCRIPT_NAME", pstrndup(r->pool, r->uri, ! path_info_start)); ! table_set (e, "PATH_INFO", r->uri + path_info_start); } if (r->path_info && r->path_info[0]) { *************** *** 228,235 **** request_rec *pa_req = sub_req_lookup_uri( escape_uri(r->pool, r->path_info), r); - table_set (e, "PATH_INFO", r->path_info); - /* Don't bother destroying pa_req --- it's only created in * child processes which are about to jettison their address * space anyway. BTW, we concatenate filename and path_info --- 245,250 ----