mirror of
https://github.com/ipxe/ipxe
synced 2025-12-21 04:20:17 +03:00
[uri] Apply URI decoding for all parsed URIs
The various early-exit paths in parse_uri() accidentally bypass the
URI field decoding. The result is that opaque or relative URIs do not
undergo URI field decoding, resulting in double-encoding when the URIs
are subsequently used. For example:
#!ipxe
set mac ${macstring}
imgfetch /boot/by-mac/${mac:uristring}
would result in an HTTP GET such as
GET /boot/by-mac/00%253A0c%253A29%253Ac5%253A39%253Aa1 HTTP/1.1
rather than the expected
GET /boot/by-mac/00%3A0c%3A29%3Ac5%3A39%3Aa1 HTTP/1.1
Fix by ensuring that URI decoding is always applied regardless of the
URI format.
Reported-by: Andrew Widdersheim <awiddersheim@inetu.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -419,11 +419,11 @@ struct uri * parse_uri ( const char *uri_string ) {
|
||||
uri->port = tmp;
|
||||
}
|
||||
|
||||
done:
|
||||
/* Decode fields in-place */
|
||||
for ( field = 0 ; field < URI_FIELDS ; field++ )
|
||||
uri_decode_inplace ( uri, field );
|
||||
|
||||
done:
|
||||
DBGC ( uri, "URI parsed \"%s\" to", uri_string );
|
||||
uri_dump ( uri );
|
||||
DBGC ( uri, "\n" );
|
||||
|
||||
Reference in New Issue
Block a user