pass_start = colon + 1;
pass_len = at - pass_start;
- decoded_user = ngx_pnalloc(pool, 128);
+ decoded_user = ngx_pnalloc(pool, user_len);
if (decoded_user == NULL) {
return NGX_ERROR;
}
- decoded_pass = ngx_pnalloc(pool, 128);
+ decoded_pass = ngx_pnalloc(pool, pass_len);
if (decoded_pass == NULL) {
return NGX_ERROR;
}
p = user_start;
decoded_end = decoded_user;
ngx_unescape_uri(&decoded_end, &p, user_len, NGX_UNESCAPE_URI);
-
user_len = decoded_end - decoded_user;
- if (user_len == 0 || user_len > 127) {
+
+ if (user_len == 0) {
ngx_log_error(NGX_LOG_ERR, log, 0,
- "js_fetch_proxy username invalid or too long "
- "(max 127 bytes after decoding)");
+ "js_fetch_proxy username is empty");
return NGX_ERROR;
}
p = pass_start;
decoded_end = decoded_pass;
ngx_unescape_uri(&decoded_end, &p, pass_len, NGX_UNESCAPE_URI);
-
pass_len = decoded_end - decoded_pass;
- if (pass_len == 0 || pass_len > 127) {
+
+ if (pass_len == 0) {
ngx_log_error(NGX_LOG_ERR, log, 0,
- "js_fetch_proxy password invalid or too long "
- "(max 127 bytes after decoding)");
+ "js_fetch_proxy password is empty");
return NGX_ERROR;
}
js_fetch_proxy $proxy_url;
js_content test.http_fetch;
}
+
+ location /dynamic_user_proxy {
+ set $proxy_url "http://$arg_user:p@127.0.0.1:%%PORT_8081%%";
+ js_fetch_proxy $proxy_url;
+ js_content test.http_fetch;
+ }
}
server {
EOF
-$t->try_run('no js_fetch_proxy')->plan(3);
+$t->try_run('no js_fetch_proxy')->plan(4);
###############################################################################
'dynamic proxy URL with auth');
like(http_get('/dynamic_empty_proxy'), qr/ORIGIN:OK/,
'dynamic empty proxy URL bypasses proxy');
+like(http_get('/dynamic_user_proxy?user=' . ('a' x 200)),
+ qr/PROXY:BAD-AUTH/,
+ 'long user in dynamic proxy URL decoded without overflow');
###############################################################################