[uri] Apply URI decoding for all parsed URIs
authorMichael Brown <mcb30@ipxe.org>
Tue, 26 Jan 2016 16:16:13 +0000 (16:16 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 26 Jan 2016 16:16:13 +0000 (16:16 +0000)
commite55ec845e6ed889a43c14c72ddb9183e0b87c60b
treea86a7705f40d57105e2e6bfdc2643b20b7364b8f
parentf0e9e55442023c2f18e62cf74fe9098e0a6f5347
[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>
src/core/uri.c
src/tests/uri_test.c