[uri] Avoid interpreting DOS-style path names as opaque URIs
authorMichael Brown <mcb30@etherboot.org>
Fri, 24 Oct 2008 03:08:43 +0000 (04:08 +0100)
committerMichael Brown <mcb30@etherboot.org>
Fri, 24 Oct 2008 03:08:43 +0000 (04:08 +0100)
A DOS-style full path name such as "C:\Program Files\tftpboot\nbp.0"
satisfies the syntax requirements for a URI with a scheme of "C" and
an opaque portion of "\Program Files\tftpboot\nbp.0".

Add a check in parse_uri() to ignore schemes that are apparently only
a single character long; this avoids interpreting DOS-style paths in
this way, and shouldn't affect any practical URI scheme.

src/core/uri.c

index cf2b071..7bb46da 100644 (file)
@@ -92,8 +92,12 @@ struct uri * parse_uri ( const char *uri_string ) {
                uri->fragment = tmp;
        }
 
-       /* Identify absolute/relative URI */
-       if ( ( tmp = strchr ( raw, ':' ) ) ) {
+       /* Identify absolute/relative URI.  We ignore schemes that are
+        * apparently only a single character long, since otherwise we
+        * misinterpret a DOS-style path name ("C:\path\to\file") as a
+        * URI with scheme="C",opaque="\path\to\file".
+        */
+       if ( ( tmp = strchr ( raw, ':' ) ) && ( tmp > ( raw + 1 ) ) ) {
                /* Absolute URI: identify hierarchical/opaque */
                uri->scheme = raw;
                *(tmp++) = '\0';