From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id E094B3857C60 for ; Fri, 27 Aug 2021 15:07:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E094B3857C60 Received: from mail-io1-f71.google.com (mail-io1-f71.google.com [209.85.166.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-304-lCfLFRwaPNyJzNUTYuhHvg-1; Fri, 27 Aug 2021 11:07:12 -0400 X-MC-Unique: lCfLFRwaPNyJzNUTYuhHvg-1 Received: by mail-io1-f71.google.com with SMTP id c22-20020a5d9a960000b029059c9e04cd63so4117538iom.23 for ; Fri, 27 Aug 2021 08:07:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=h+qAOGq9bsHV0garuMC/lVtBCGGHwdBwTTTpgZtQ74U=; b=hFmkLhykDLEHHoV61VmpVDmDkAMT5YRvlIp53zzMsnWcAoYOIRWuRzfCJ/M4tWCGPU u2Xi7GiS8GNdQ3kqB5rEs/VbX/XHtOYu9glqaTdEiEyUZPt1QoFBzp3U8LWLOWtuZyn/ nUKBsXTe8AI5IylL2E8sEtbURCodWUAuxB+bUwDmiFZJqo2nNOUz3lwv9VHNYFbdXbUt 5ucf40UwIqcYOZKP+Qc43ZBMwTVSqbDoXjEmL5qJMtccK2zv8OzQtG2pzthLVNTXV2+V 4FC3W/GaDzQALKriov578WnSXW7pHh05EvnoUS/4pfQXbLbaAPniee029BnDGES7gwcB EP9Q== X-Gm-Message-State: AOAM532Xr9kP3YJVwqyJ7GSjb+CxYgBloIkpgm4S1V8U4Y2SqKai7Mb9 79XHl6UeMr2Svf904Kmi0511Dcfn2iYxj7kFo5ZFARgvhRC6p5hAQtm/f27OTERsv44PZAiKUor MoFDdep/VYmHI4vvfcxoHeNXjuMmbYRzRrDv0CNG2zQ== X-Received: by 2002:a5d:9ada:: with SMTP id x26mr7674961ion.50.1630076831604; Fri, 27 Aug 2021 08:07:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz0tZCjH/TQhuYRBRl4i/T2f1Ji/UzNV+aSrCBaqmpMvgXaONo5AIpN7amAbvD089vvYakoxbVFTyuLMM1pBMA= X-Received: by 2002:a5d:9ada:: with SMTP id x26mr7674942ion.50.1630076831364; Fri, 27 Aug 2021 08:07:11 -0700 (PDT) MIME-Version: 1.0 References: <20210826210213.GM416@redhat.com> In-Reply-To: From: Noah Sanci Date: Fri, 27 Aug 2021 11:07:00 -0400 Message-ID: Subject: Re: [Bug debuginfod/28034] client-side %-escape url characters To: "Frank Ch. Eigler" Cc: elfutils-devel@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000007da31705ca8bd6a6" X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Aug 2021 15:07:25 -0000 --0000000000007da31705ca8bd6a6 Content-Type: text/plain; charset="UTF-8" Hello Update 2, no longer append nulls unnecessarily. -Noah Sanci On Fri, Aug 27, 2021 at 10:44 AM Noah Sanci wrote: > > Hello, > > Here is an updated patch, using memmove. Much smaller. > > Thanks for the suggestions, > > Noah Sanci > > > On Thu, Aug 26, 2021 at 5:02 PM Frank Ch. Eigler wrote: > > > > Hi - > > > > > /* PR28034 escape characters in completed url to %hh format. */ > > > - char *escaped_string; > > > - escaped_string = curl_easy_escape(data[i].handle, filename, 0); > > > - if (!escaped_string) > > > + char escaped_string[PATH_MAX] = {'\0'}; > > > + char *loc = (char *) filename; > > > + char *loc2; > > > + char *tmp; > > > + for(size_t j = 0; j < strlen(filename); ++j) > > > { > > > - rc = -ENOMEM; > > > - goto out2; > > > + loc2 = strstr(loc, "/"); > > > + // If the first character is a '/' > > > [...] > > > > Holy cow that's a lot of work to do it this way. > > A couple of alternatives: > > > > - ditch curl_easy_escape :-( and use a > > malloc(strlen(x)*3) > > byte-by-byte copy from source string into destination > > if not [a-zA-Z0-9/.~] then %-escape > > > > or: > > - keep curl_easy_escape and postprocess > > byte-by-byte examine the result of curl_easy_escape > > - if seeing a "%2F", replace the % with a / and memmove the > > rest of the string 2 bytes ahead > > > > It shouldn't need strtok or strstr or a lot of logic or stuff like > > that really. > > > > - FChE > > --0000000000007da31705ca8bd6a6 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-debuginfod-PR28034-client-side-escape-url-characters.patch" Content-Disposition: attachment; filename="0001-debuginfod-PR28034-client-side-escape-url-characters.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ksuhmjyz0 RnJvbSBmNWM3YzAwYzc2YjIwMDY3NTU1NmEwZWNjNmJkOGE1ZmRjN2EzMGVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIFNhbmNpIDxuc2FuY2lAcmVkaGF0LmNvbT4KRGF0ZTog RnJpLCAxNiBKdWwgMjAyMSAxNToxNjoyMCAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIGRlYnVnaW5m b2Q6IFBSMjgwMzQgLSBjbGllbnQtc2lkZSAlLWVzY2FwZSB1cmwgY2hhcmFjdGVycwoKV2hlbiBy ZXF1ZXN0aW5nIHNvbWUgc291cmNlIGZpbGVzLCBzb21lIFVSTC1pbmNvbnZlbmllbnQgY2hhcnMK c29tZXRpbWVzIHBvcCB1cC4gIEV4YW1wbGUgZnJvbSBmMzMgbGlic3RkYysrOgovYnVpbGRpZC80 NGQ4NDg1Y2I3NTUxMmMyY2E1YzhmNzBhZmJkNDc1Y2FlMzBhZjRmL3NvdXJjZS91c3Ivc3JjL2Rl YnVnLwpnY2MtMTAuMy4xLTEuZmMzMy54ODZfNjQvb2JqLXg4Nl82NC1yZWRoYXQtbGludXgveDg2 XzY0LXJlZGhhdC1saW51eC8KbGlic3RkYysrLXYzL3NyYy9jKysxMS8uLi8uLi8uLi8uLi8uLi9s aWJzdGRjKystdjMvc3JjL2MrKzExLwpjb25kaXRpb25fdmFyaWFibGUuY2MKQXMgdGhpcyBVUkwg aXMgcGFzc2VkIGludG8gZGVidWdpbmZvZCdzIGhhbmRsZXJfY2IsIGl0IGFwcGVhcnMgdGhhdCB0 aGUKKyBzaWducyBhcmUgaGVscGZ1bGx5IHVuZXNjYXBlZCB0byBzcGFjZXMgYnkgbGlibWljcm9o dHRwZCwgd2hpY2gKJ2NvdXJzZSBicmVha3MgZXZlcnl0aGluZy4KSW4gb3JkZXIgdG8gZW5zdXJl IHRoZSBzZXJ2ZXIgcHJvcGVybHkgcGFyc2VzIHVybHMgc3VjaCBhcyB0aGlzIG9uZSwKJS1lc2Nh cGUgY2hhcmFjdGVycyBvbiB0aGUgY2xpZW50IHNpZGUgc28gdGhhdCB0aGUgY29ycmVjdCB1cmwK aXMgcHJlc2VydmVkIGFuZCBwcm9wZXJseSBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlLgoK aHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjgwMzQKClNp Z25lZC1vZmYtYnk6IE5vYWggU2FuY2kgPG5zYW5jaUByZWRoYXQuY29tPgotLS0KIGRlYnVnaW5m b2QvZGVidWdpbmZvZC1jbGllbnQuYyB8IDEyICsrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kZWJ1Z2luZm9k L2RlYnVnaW5mb2QtY2xpZW50LmMgYi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMKaW5k ZXggN2Q0YjIyMGYuLjZkYjgyZjc5IDEwMDY0NAotLS0gYS9kZWJ1Z2luZm9kL2RlYnVnaW5mb2Qt Y2xpZW50LmMKKysrIGIvZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWNsaWVudC5jCkBAIC05MDUsMTMg KzkwNSwyMyBAQCBkZWJ1Z2luZm9kX3F1ZXJ5X3NlcnZlciAoZGVidWdpbmZvZF9jbGllbnQgKmMs CiAgICAgICAgIHsKICAgICAgICAgICAvKiBQUjI4MDM0IGVzY2FwZSBjaGFyYWN0ZXJzIGluIGNv bXBsZXRlZCB1cmwgdG8gJWhoIGZvcm1hdC4gKi8KICAgICAgICAgICBjaGFyICplc2NhcGVkX3N0 cmluZzsKKyAgICAgICAgICBjaGFyICpsb2M7CiAgICAgICAgICAgZXNjYXBlZF9zdHJpbmcgPSBj dXJsX2Vhc3lfZXNjYXBlKGRhdGFbaV0uaGFuZGxlLCBmaWxlbmFtZSwgMCk7CiAgICAgICAgICAg aWYgKCFlc2NhcGVkX3N0cmluZykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmMgPSAt RU5PTUVNOwogICAgICAgICAgICAgICBnb3RvIG91dDI7CiAgICAgICAgICAgICB9Ci0gICAgICAg ICAgc25wcmludGYoZGF0YVtpXS51cmwsIFBBVEhfTUFYLCAiJXMvJXMvJXMvJXMiLCBzZXJ2ZXJf dXJsLAorCisgICAgICAgICAgbG9jID0gc3Ryc3RyKGVzY2FwZWRfc3RyaW5nLCAiJTJGIik7Cisg ICAgICAgICAgaWYgKGxvYyAhPSBOVUxMKQorICAgICAgICAgICAgd2hpbGUoIChsb2MgPSBzdHJz dHIobG9jLCAiJTJGIikpICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvY1sw XSA9ICcvJzsKKyAgICAgICAgICAgICAgICAvLyBwdWxsIHRoZSBzdHJpbmcgYmFjayBhZnRlciBy ZXBsYWNlbWVudAorICAgICAgICAgICAgICAgIG1lbW1vdmUobG9jKzEsbG9jKzMsc3RybGVuKGxv YyszKSsxKTsKKyAgICAgICAgICAgICAgfSAKKyAgICAgICAgICBzbnByaW50ZihkYXRhW2ldLnVy bCwgUEFUSF9NQVgsICIlcy8lcy8lcyVzIiwgc2VydmVyX3VybCwKICAgICAgICAgICAgICAgICAg ICBidWlsZF9pZF9ieXRlcywgdHlwZSwgZXNjYXBlZF9zdHJpbmcpOwogICAgICAgICAgIGN1cmxf ZnJlZShlc2NhcGVkX3N0cmluZyk7CiAgICAgICAgIH0KLS0gCjIuMzEuMQoK --0000000000007da31705ca8bd6a6--