Hi all, when recently trying out the libcurl-url API, I came across some
behavior which seems buggy to me: when copying a URL using curl_url_dup,
the zone ID is not copied into the new URL.

I wouldn't expect that this would be intended behavior (the curl_url_dup
man page specifies that all the contents of the CURLU handle are copied,
and does not note any exceptions). Could anyone confirm that this is
indeed (not) intended behaviour?

A small program to reproduce this behavior is in the attachments. I
would expect its output to be this:

                Original:  http://[2a04:4e42:e00::347%25eth0]/
                Parsed:    http://[2a04:4e42:e00::347%25eth0]/
                Copy:      http://[2a04:4e42:e00::347%25eth0]/

But end up getting the following output:

                Original:  http://[2a04:4e42:e00::347%25eth0]/
                Parsed:    http://[2a04:4e42:e00::347%25eth0]/
                Copy:      http://[2a04:4e42:e00::347]/

curl version used: 8.2.1-1 x86_64 (Arch Linux)

Thanks,
Rutger
#include <curl/curl.h>

int main(int argc, char *argv[]) {
        // Example URL taken from:
        //   https://everything.curl.dev/libcurl/url/get-part
        const char *input_url = "http://[2a04:4e42:e00::347%25eth0]/";;

        CURLU *h = curl_url();
        CURLUcode rc = curl_url_set(h, CURLUPART_URL, input_url, 0);
        if (rc) {
                printf("Error parsing URL: %s\n", curl_url_strerror(rc));
                return 1;
        }
        CURLU *copy = curl_url_dup(h);

        char *h_str, *copy_str;
        rc = curl_url_get(h, CURLUPART_URL, &h_str, 0);
        if (rc) {
                printf("Error printing parsed URL as string: %s\n",
                       curl_url_strerror(rc));
                return 1;
        }
        rc = curl_url_get(copy, CURLUPART_URL, &copy_str, 0);
        if (rc) {
                printf("Error printing parsed URL as string: %s\n",
                       curl_url_strerror(rc));
                return 1;
        }

        printf("Original:  %s\nParsed:    %s\nCopy:      %s\n",
               input_url, h_str, copy_str);

        curl_free(copy_str);
        curl_free(h_str);
        curl_url_cleanup(copy);
        curl_url_cleanup(h);
}
-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to