]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[autoboot] Avoid using uri_dup() for constructed TFTP URI
authorMichael Brown <mcb30@ipxe.org>
Tue, 1 Feb 2011 02:56:06 +0000 (02:56 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 1 Feb 2011 02:56:06 +0000 (02:56 +0000)
uri_dup() chokes on duplicating a URI with a path that does not begin
with a slash.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/usr/autoboot.c

index 91f1c6e8bd713548a06884eb6390178aba447d16..20c67f341402a7e49c0ed81cae29114da9556392 100644 (file)
@@ -66,8 +66,9 @@ static struct net_device * find_boot_netdev ( void ) {
  */
 static struct uri * parse_next_server_and_filename ( struct in_addr next_server,
                                                     const char *filename ) {
+       char buf[ 23 /* "tftp://xxx.xxx.xxx.xxx/" */ + strlen ( filename )
+                 + 1 /* NUL */ ];
        struct uri *uri;
-       struct uri *tmp;
 
        /* Parse filename */
        uri = parse_uri ( filename );
@@ -81,11 +82,10 @@ static struct uri * parse_next_server_and_filename ( struct in_addr next_server,
         * significant for TFTP.
         */
        if ( ! uri_is_absolute ( uri ) ) {
-               tmp = uri;
-               tmp->scheme = "tftp";
-               tmp->host = inet_ntoa ( next_server );
-               uri = uri_dup ( tmp );
-               uri_put ( tmp );
+               uri_put ( uri );
+               snprintf ( buf, sizeof ( buf ), "tftp://%s/%s",
+                          inet_ntoa ( next_server ), filename );
+               uri = parse_uri ( filename );
                if ( ! uri )
                        return NULL;
        }