Skip to content

Commit 176db3b

Browse files
committed
URL escaping
1 parent 30a231b commit 176db3b

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/ngx_http_auth_jwt_module.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ static ngx_int_t ngx_http_auth_jwt_handler(ngx_http_request_t *r)
187187
ngx_int_t uri_variable_hash;
188188
ngx_http_variable_value_t * request_uri_var;
189189
ngx_str_t uri;
190+
ngx_str_t uri_escaped;
191+
uintptr_t escaped_len;
190192

191193
loginlen = jwtcf->auth_jwt_loginurl.len;
192194

@@ -197,7 +199,7 @@ static ngx_int_t ngx_http_auth_jwt_handler(ngx_http_request_t *r)
197199
uri_variable_hash = ngx_hash_key(uri_variable_name.data, uri_variable_name.len);
198200
request_uri_var = ngx_http_get_variable(r, &uri_variable_name, uri_variable_hash);
199201

200-
// get the uri
202+
// get the URI
201203
if(request_uri_var && !request_uri_var->not_found && request_uri_var->valid)
202204
{
203205
// ideally we would like the uri with the querystring parameters
@@ -211,7 +213,13 @@ static ngx_int_t ngx_http_auth_jwt_handler(ngx_http_request_t *r)
211213
uri = r->uri;
212214
}
213215

214-
r->headers_out.___location->value.len = loginlen + sizeof("?return_url=") - 1 + strlen(scheme) + sizeof("://") - 1 + server.len + uri.len;
216+
// escape the URI
217+
escaped_len = ngx_escape_uri(NULL, uri.data, uri.len, NGX_ESCAPE_URI);
218+
uri_escaped.data = ngx_palloc(r->pool, escaped_len);
219+
uri_escaped.len = escaped_len;
220+
ngx_escape_uri(uri_escaped.data, uri.data, uri.len, NGX_ESCAPE_URI);
221+
222+
r->headers_out.___location->value.len = loginlen + sizeof("?return_url=") - 1 + strlen(scheme) + sizeof("://") - 1 + server.len + url_escaped.len;
215223
return_url = ngx_alloc(r->headers_out.___location->value.len, r->connection->log);
216224
ngx_memcpy(return_url, jwtcf->auth_jwt_loginurl.data, jwtcf->auth_jwt_loginurl.len);
217225
int return_url_idx = jwtcf->auth_jwt_loginurl.len;
@@ -223,8 +231,8 @@ static ngx_int_t ngx_http_auth_jwt_handler(ngx_http_request_t *r)
223231
return_url_idx += sizeof("://") - 1;
224232
ngx_memcpy(return_url+return_url_idx, server.data, server.len);
225233
return_url_idx += server.len;
226-
ngx_memcpy(return_url+return_url_idx, uri.data, uri.len);
227-
return_url_idx += uri.len;
234+
ngx_memcpy(return_url+return_url_idx, url_escaped.data, url_escaped.len);
235+
return_url_idx += url_escaped.len;
228236
r->headers_out.___location->value.data = (u_char *)return_url;
229237

230238
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "redirect for get request");

0 commit comments

Comments
 (0)