diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2016-10-28 15:10:45 -0400 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2016-10-29 09:14:07 -0400 |
commit | b29e69e5b746d1ee1d371893170b6ce31bbdb20e (patch) | |
tree | 1a78905bbfb1fece996c585dcce3ace122ba874c | |
parent | 204df0681400da072116633b1d4368e6aa900d13 (diff) | |
download | lighttpd-git-b29e69e5b746d1ee1d371893170b6ce31bbdb20e.tar.gz |
[mod_scgi] fix prefix matching to always match url
Fix mod_scgi prefix matching: match the prefix always against url,
not the absolute filepath (regardless of check-local)
(apply fix similar to commit:fe8b7e57 applied to mod_fastcgi in 2008)
-rw-r--r-- | src/mod_scgi.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/mod_scgi.c b/src/mod_scgi.c index db7e7d36..cb093fbb 100644 --- a/src/mod_scgi.c +++ b/src/mod_scgi.c @@ -2669,7 +2669,7 @@ static int scgi_patch_connection(server *srv, connection *con, plugin_data *p) { static handler_t scgi_check_extension(server *srv, connection *con, void *p_d, int uri_path_handler) { plugin_data *p = p_d; - size_t s_len; + size_t s_len, uri_path_len; size_t k; buffer *fn; scgi_extension *extension = NULL; @@ -2685,6 +2685,7 @@ static handler_t scgi_check_extension(server *srv, connection *con, void *p_d, i if (buffer_string_is_empty(fn)) return HANDLER_GO_ON; s_len = buffer_string_length(fn); + uri_path_len = buffer_string_length(con->uri.path); scgi_patch_connection(srv, con, p); @@ -2697,15 +2698,15 @@ static handler_t scgi_check_extension(server *srv, connection *con, void *p_d, i ct_len = buffer_string_length(ext->key); - if (s_len < ct_len) continue; - - /* check extension in the form "/scgi_pattern" */ - if (*(ext->key->ptr) == '/') { - if (strncmp(fn->ptr, ext->key->ptr, ct_len) == 0) { + /* check _url_ in the form "/scgi_pattern" */ + if (extension->key->ptr[0] == '/') { + if (ct_len <= uri_path_len + && 0 == strncmp(con->uri.path->ptr, ext->key->ptr, ct_len)) { extension = ext; break; } - } else if (0 == strncmp(fn->ptr + s_len - ct_len, ext->key->ptr, ct_len)) { + } else if (ct_len <= s_len + && 0 == strncmp(fn->ptr + s_len - ct_len, ext->key->ptr, ct_len)) { /* check extension in the form ".fcg" */ extension = ext; break; |