Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u8QSJ-003jaw-KU for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Apr 2025 21:19:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u8QSH-00FSS6-Gr for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Apr 2025 21:19:30 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u8QSG-00FSRy-V5 for pgsql-hackers@lists.postgresql.org; Fri, 25 Apr 2025 21:19:30 +0000 Received: from mail-ua1-x92a.google.com ([2607:f8b0:4864:20::92a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u8QSF-001xBG-1p for pgsql-hackers@lists.postgresql.org; Fri, 25 Apr 2025 21:19:28 +0000 Received: by mail-ua1-x92a.google.com with SMTP id a1e0cc1a2514c-8777084a3c0so2295169241.0 for ; Fri, 25 Apr 2025 14:19:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745615966; x=1746220766; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=X9m6GM5gyvhytylQsAYFSE3zd3yr2x6++BNcYfG/ErU=; b=jLkbiKITopPlzggBq3Vd8eP09s4poHEGmEvERXxLxxpdLxRXJ5aqPMaNgRhrUttNcd aEiDwwFrxhF1PEobTFbUSQy17sQAh7DqFh5OM6W+BhKKFLpI6bIwp0irGy5A7zQSWWRz Jb3ikEG7J4kTDxOyOa3yrhHeewgmCZr66D5Hot/T3Gukvc56stKrdPyrIdEde+eIQHlg glAj/FUiPKLYwPHg1d2cd4ZUY+aY1rve29RyyFz5BofwhElaP2hUhVLsv2u9jfMweN70 2E0KVKd2L9BM8sbipOfpOUEHZxcBrtQmpi3VPCJV6bjiaQaxJPz5CYzWReAR3jNhR5Sk d8kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745615966; x=1746220766; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=X9m6GM5gyvhytylQsAYFSE3zd3yr2x6++BNcYfG/ErU=; b=QViuLY0LnCpQ6tBi67Tkh8Zen1Lp8nOgZVmvozoFg7sBGLR2ScAw6y0uUXy2ghffd0 zS5YkX12Y2kINO2P/9kG8iTfY9hN+WmRWFe6J6t1lS6R0+ha/uRsIn/YcSL/Mmwv1KmT m9E0tfclGJTf6Qlv/ZgXcTU4XICJPQKmNqNkolzzvvib3W7VV4XsdDLjyRixlVmddOFI nhBuIHM0ZBzr2XTX6zjnVvqpJyyIt7azmYeD+jHmHhflcW+XzyzI0D9qLxyD/se9VMf3 IUMEf/UZySSEeviRFEWaOsyiYX4dKWwX/LZY17U+1b1m/AUNeLd1AyArLXoD3bIPvzXk IVjA== X-Forwarded-Encrypted: i=1; AJvYcCV34gyzYpj1w9QcZ3bu1gPTaxd4c2OZ5K6F3d84adp9uKmMLib2ZT7FnWaFc9fz+VjenrMAuJQXtAvP5D6L@lists.postgresql.org X-Gm-Message-State: AOJu0YxTEuJUI6ZM4U+tZ0oJW7//Ebug359bI3xU21MFi0kCc8bjbJ6W jNzXLtWPEjam1h/bD0GNhWn8A/k22i9v2a45HZfmf2DFeWBcuWS7neqVE33JEU4ZLIMnsjPcIIT YZmcPyyhwGsfOhdC0q/7Tvl3xXCM= X-Gm-Gg: ASbGnctlYnazI+lm+vPvA9zOqfFQL3c2Oz5kKI5M1X3Gpg+hOGM7AWK7w3vmhhMy9oB zJqBdjLnHbcpK8Og2WH8q9r4NhTH9lH/nDrG5WD49838wpR0pcO2kFYDvNuQBmZwfROujUaz724 dYBG3doIxYySnqLWOGpxhI14HALze+243t2uIJEWkf/d2yB+HlyMcjTxA= X-Google-Smtp-Source: AGHT+IF6Uel/qnOClKqRDitmh7jApTZl5Jm8uPr1AqHKlGycT/ob158IY5IuXmaABV24lVkYrTWhRG8rSTuT34pgAbo= X-Received: by 2002:a05:6102:3f9f:b0:4bb:c24b:b61a with SMTP id ada2fe7eead31-4d545369153mr3194126137.19.1745615966450; Fri, 25 Apr 2025 14:19:26 -0700 (PDT) MIME-Version: 1.0 References: <3C304C9E-976C-4FB9-A883-707E0B90756A@justatheory.com> <546E7C54-D2F4-4DBB-9A06-EBBF90265A2C@justatheory.com> <672C8C5E-519A-4B39-9421-E6C31917B271@justatheory.com> In-Reply-To: <672C8C5E-519A-4B39-9421-E6C31917B271@justatheory.com> From: Matheus Alcantara Date: Fri, 25 Apr 2025 18:18:58 -0300 X-Gm-Features: ATxdqUGEvZ-Igcq-F0udJiyM9w4Q4mXJlUvrqY8h5H83jsgo9uyRUnFNAR98LOA Message-ID: Subject: Re: extension_control_path and "directory" To: "David E. Wheeler" Cc: Christoph Berg , Peter Eisentraut , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000985f250633a0e32d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000985f250633a0e32d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 25, 2025 at 4:13=E2=80=AFPM David E. Wheeler wrote: > > On Apr 25, 2025, at 09:25, Matheus Alcantara w= rote: > > > Yes, you are right. The problem was where I was asserting > > control->control_dir !=3D NULL. I've moved the assert after the "if > > (!filename)" check that returns an error if the extension was not found= . > > > > Attached v3 with this fix and also a TAP test for this scenario. > > That fixes the segfault, thank you. > Great, thanks for testing! > > I'm just a bit confused how you get it working using /extension at the > > end of extension_control_path since with this patch this suffix is not > > necessary and since we hard coded append this it should return an error > > when trying to search on something like > > It worked with > > extension_control_path =3D '/Users/david/Downloads/share/postgresql/exten= sion:$system=E2=80=99 > > But not with > > extension_control_path =3D '/Users/david/Downloads/share/postgresql:$syst= em=E2=80=99 > > And here is where the control file actually is: > > =E2=9D=AF ll ~/Downloads/share/postgresql/extension total 8 > -rw-r--r-- 1 david staff 161B Apr 24 18:07 semver.control > > So I don=E2=80=99t know the answer to your question, but it=E2=80=99d be = handy to have functions that return a list of resolved paths from extension= _control_path and dynamic_library_path, since they get mangled. > Ok, I was testing using extension_control_path =3D '$system:/my/custom/path= ' (starting with the macro) and it was working as expected, testing with the macro at the end does not work. The problem was on find_extension_control_filename() that was appending the /extension at the end of the entire extension_control_path GUC value instead of just the custom paths. To append the /extension at each path on extension_control_path would require some changes on find_in_path() that find_extension_control_filename() calls, which I think that it would make the function more complicated. I've them created a similar find_in_paths() function that works in the same way but it receives a List of paths instead of the string of paths separated by ":". We can get this List of paths using get_extension_control_directories() that also handle the macro substitution like find_in_path(). Attached v4 with these fixes. I hope that now you should be able to omit the /extension from the GUC value. --=20 Matheus Alcantara --000000000000985f250633a0e32d Content-Type: application/octet-stream; name="v4-0001-Make-directory-work-with-extension-control-path.patch" Content-Disposition: attachment; filename="v4-0001-Make-directory-work-with-extension-control-path.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9xanfv40 RnJvbSA2ZWI2NTVmYmU1OTA4M2E2MGQzZGZkYjM4MDRlZWFlYWExNzFhZDJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFdlZCwgMjMgQXByIDIwMjUgMTY6MTE6MjQgLTAzMDAKU3ViamVjdDogW1BBVENIIHY0XSBN YWtlICJkaXJlY3RvcnkiIHdvcmsgd2l0aCBleHRlbnNpb24gY29udHJvbCBwYXRoCgpQcmV2aW91 c2x5IGV4dGVuc2lvbnMgaW5zdGFsbGVkIG9uIGEgY3VzdG9tIHBhdGggdGhhdCBpcyBhdmFpbGFi bGUgdmlhCmV4dGVuc2lvbl9jb250cm9sX3BhdGggR1VDIHRoYXQgc2V0IHRoZSAiZGlyZWN0b3J5 IiBmaWVsZCBvbiAuY29udHJvbApmaWxlIHdhcyBub3QgYmVpbmcgYWJsZSB0byBDUkVBVEUuIFRo aXMgd2FzIGhhcHBlbmluZyBiZWNhdXNlIG9uCmdldF9leHRlbnNpb25fc2NyaXB0X2RpcmVjdG9y eSB3YXMgaGFyZCBjb2RlZCB0byBzZWFyY2ggZm9yIHRoZSBzY3JpcHQKZmlsZXMgb25seSBvbiB0 aGUgc2hhcmUgc3lzdGVtIGRpci4KClRoaXMgY29tbWl0IGZpeCB0aGlzIGlzc3VlIGJ5IHVzaW5n IHRoZSBjb250cm9sLT5jb250cm9sX2RpciBhcyBhIHNoYXJlCmRpciB0byByZXR1cm4gdGhlIHBh dGggb2YgdGhlIGV4dGVuc2lvbiBzY3JpcHQgZmlsZXMuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXh0ZW5zaW9uLmMgICAgICAgICAgICAgIHwgOTkgKysrKysrKysrKysrKystLS0tLQogLi4u L3QvMDAxX2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwgICAgICAgICAgIHwgOTMgKysrKysrKysr KysrLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTQ0IGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggMTgwZjRhZjliZTMuLmMyYjk4NzRi M2UyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYwpAQCAtODMsNiArODMsOCBAQCBPaWQJCQlD dXJyZW50RXh0ZW5zaW9uT2JqZWN0ID0gSW52YWxpZE9pZDsKIHR5cGVkZWYgc3RydWN0IEV4dGVu c2lvbkNvbnRyb2xGaWxlCiB7CiAJY2hhcgkgICAqbmFtZTsJCQkvKiBuYW1lIG9mIHRoZSBleHRl bnNpb24gKi8KKwljaGFyCSAgICpiYXNlZGlyOwkJLyogYmFzZSBkaXJlY3Rvcnkgd2hlcmUgY29u dHJvbCBhbmQgc2NyaXB0CisJCQkJCQkJCSAqIGZpbGVzIGFyZSBsb2NhdGVkICovCiAJY2hhcgkg ICAqY29udHJvbF9kaXI7CS8qIGRpcmVjdG9yeSB3aGVyZSBjb250cm9sIGZpbGUgd2FzIGZvdW5k ICovCiAJY2hhcgkgICAqZGlyZWN0b3J5OwkJLyogZGlyZWN0b3J5IGZvciBzY3JpcHQgZmlsZXMg Ki8KIAljaGFyCSAgICpkZWZhdWx0X3ZlcnNpb247CS8qIGRlZmF1bHQgaW5zdGFsbCB0YXJnZXQg dmVyc2lvbiwgaWYgYW55ICovCkBAIC0xNTMsNiArMTU1LDcgQEAgc3RhdGljIHZvaWQgRXhlY0Fs dGVyRXh0ZW5zaW9uQ29udGVudHNSZWN1cnNlKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICpz dG10LAogc3RhdGljIGNoYXIgKnJlYWRfd2hvbGVfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwg aW50ICpsZW5ndGgpOwogc3RhdGljIEV4dGVuc2lvbkNvbnRyb2xGaWxlICpuZXdfRXh0ZW5zaW9u Q29udHJvbEZpbGUoY29uc3QgY2hhciAqZXh0bmFtZSk7CiAKK2NoYXIJICAgKmZpbmRfaW5fcGF0 aHMoY29uc3QgY2hhciAqYmFzZW5hbWUsIExpc3QgKnBhdGhzKTsKIAogLyoKICAqIGdldF9leHRl bnNpb25fb2lkIC0gZ2l2ZW4gYW4gZXh0ZW5zaW9uIG5hbWUsIGxvb2sgdXAgdGhlIE9JRApAQCAt Mzc2LDYgKzM3OSwxNCBAQCBnZXRfZXh0ZW5zaW9uX2NvbnRyb2xfZGlyZWN0b3JpZXModm9pZCkK IAogCQkJLyogU3Vic3RpdHV0ZSB0aGUgcGF0aCBtYWNybyBpZiBuZWVkZWQgKi8KIAkJCW1hbmds ZWQgPSBzdWJzdGl0dXRlX3BhdGhfbWFjcm8ocGllY2UsICIkc3lzdGVtIiwgc3lzdGVtX2Rpcik7 CisKKwkJCS8qCisJCQkgKiBBcHBlbmQgImV4dGVuc2lvbiIgc3VmZml4IGluIGNhc2UgaXMgYSBj dXN0b20gZXh0ZW5zaW9uIGNvbnRyb2wKKwkJCSAqIHBhdGguCisJCQkgKi8KKwkJCWlmIChzdHJj bXAocGllY2UsICIkc3lzdGVtIikgIT0gMCkKKwkJCQltYW5nbGVkID0gcHNwcmludGYoIiVzL2V4 dGVuc2lvbiIsIG1hbmdsZWQpOworCiAJCQlwZnJlZShwaWVjZSk7CiAKIAkJCS8qIENhbm9uaWNh bGl6ZSB0aGUgcGF0aCBiYXNlZCBvbiB0aGUgT1MgYW5kIGFkZCB0byB0aGUgbGlzdCAqLwpAQCAt NDAxLDI4ICs0MTIsMTYgQEAgZ2V0X2V4dGVuc2lvbl9jb250cm9sX2RpcmVjdG9yaWVzKHZvaWQp CiBzdGF0aWMgY2hhciAqCiBmaW5kX2V4dGVuc2lvbl9jb250cm9sX2ZpbGVuYW1lKEV4dGVuc2lv bkNvbnRyb2xGaWxlICpjb250cm9sKQogewotCWNoYXIJCXNoYXJlcGF0aFtNQVhQR1BBVEhdOwot CWNoYXIJICAgKnN5c3RlbV9kaXI7CiAJY2hhcgkgICAqYmFzZW5hbWU7Ci0JY2hhcgkgICAqZWNw OwogCWNoYXIJICAgKnJlc3VsdDsKKwlMaXN0CSAgICpwYXRoczsKIAogCUFzc2VydChjb250cm9s LT5uYW1lKTsKIAotCWdldF9zaGFyZV9wYXRoKG15X2V4ZWNfcGF0aCwgc2hhcmVwYXRoKTsKLQlz eXN0ZW1fZGlyID0gcHNwcmludGYoIiVzL2V4dGVuc2lvbiIsIHNoYXJlcGF0aCk7Ci0KIAliYXNl bmFtZSA9IHBzcHJpbnRmKCIlcy5jb250cm9sIiwgY29udHJvbC0+bmFtZSk7CiAKLQkvKgotCSAq IGZpbmRfaW5fcGF0aCgpIGRvZXMgbm90aGluZyBpZiB0aGUgcGF0aCB2YWx1ZSBpcyBlbXB0eS4g IFRoaXMgaXMgdGhlCi0JICogaGlzdG9yaWNhbCBiZWhhdmlvciBmb3IgZHluYW1pY19saWJyYXJ5 X3BhdGgsIGJ1dCBpdCBtYWtlcyBubyBzZW5zZSBmb3IKLQkgKiBleHRlbnNpb25zLiAgU28gaW4g dGhhdCBjYXNlLCBzdWJzdGl0dXRlIGEgZGVmYXVsdCB2YWx1ZS4KLQkgKi8KLQllY3AgPSBFeHRl bnNpb25fY29udHJvbF9wYXRoOwotCWlmIChzdHJsZW4oZWNwKSA9PSAwKQotCQllY3AgPSAiJHN5 c3RlbSI7Ci0JcmVzdWx0ID0gZmluZF9pbl9wYXRoKGJhc2VuYW1lLCBlY3AsICJleHRlbnNpb25f Y29udHJvbF9wYXRoIiwgIiRzeXN0ZW0iLCBzeXN0ZW1fZGlyKTsKKwlwYXRocyA9IGdldF9leHRl bnNpb25fY29udHJvbF9kaXJlY3RvcmllcygpOworCXJlc3VsdCA9IGZpbmRfaW5fcGF0aHMoYmFz ZW5hbWUsIHBhdGhzKTsKIAogCWlmIChyZXN1bHQpCiAJewpAQCAtNDM5LDEyICs0MzgsMTEgQEAg ZmluZF9leHRlbnNpb25fY29udHJvbF9maWxlbmFtZShFeHRlbnNpb25Db250cm9sRmlsZSAqY29u dHJvbCkKIHN0YXRpYyBjaGFyICoKIGdldF9leHRlbnNpb25fc2NyaXB0X2RpcmVjdG9yeShFeHRl bnNpb25Db250cm9sRmlsZSAqY29udHJvbCkKIHsKLQljaGFyCQlzaGFyZXBhdGhbTUFYUEdQQVRI XTsKLQljaGFyCSAgICpyZXN1bHQ7Ci0KIAkvKgogCSAqIFRoZSBkaXJlY3RvcnkgcGFyYW1ldGVy IGNhbiBiZSBvbWl0dGVkLCBhYnNvbHV0ZSwgb3IgcmVsYXRpdmUgdG8gdGhlCi0JICogaW5zdGFs bGF0aW9uJ3Mgc2hhcmUgZGlyZWN0b3J5LgorCSAqIGluc3RhbGxhdGlvbidzIGJhc2UgZGlyZWN0 b3J5LCB3aGljaCBjYW4gYmUgdGhlIHNoYXJlZGlyIG9yIGEgY3VzdG9tCisJICogcGF0aCB0aGF0 IGl0IHdhcyBzZXQgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC4gSXQgZGVwZW5kcyB3aGVyZSB0aGUK KwkgKiAuY29udHJvbCBmaWxlIHdhcyBmb3VuZC4KIAkgKi8KIAlpZiAoIWNvbnRyb2wtPmRpcmVj dG9yeSkKIAkJcmV0dXJuIHBzdHJkdXAoY29udHJvbC0+Y29udHJvbF9kaXIpOwpAQCAtNDUyLDEx ICs0NTAsOCBAQCBnZXRfZXh0ZW5zaW9uX3NjcmlwdF9kaXJlY3RvcnkoRXh0ZW5zaW9uQ29udHJv bEZpbGUgKmNvbnRyb2wpCiAJaWYgKGlzX2Fic29sdXRlX3BhdGgoY29udHJvbC0+ZGlyZWN0b3J5 KSkKIAkJcmV0dXJuIHBzdHJkdXAoY29udHJvbC0+ZGlyZWN0b3J5KTsKIAotCWdldF9zaGFyZV9w YXRoKG15X2V4ZWNfcGF0aCwgc2hhcmVwYXRoKTsKLQlyZXN1bHQgPSAoY2hhciAqKSBwYWxsb2Mo TUFYUEdQQVRIKTsKLQlzbnByaW50ZihyZXN1bHQsIE1BWFBHUEFUSCwgIiVzLyVzIiwgc2hhcmVw YXRoLCBjb250cm9sLT5kaXJlY3RvcnkpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlBc3NlcnQoY29u dHJvbC0+YmFzZWRpciAhPSBOVUxMKTsKKwlyZXR1cm4gcHNwcmludGYoIiVzLyVzIiwgY29udHJv bC0+YmFzZWRpciwgY29udHJvbC0+ZGlyZWN0b3J5KTsKIH0KIAogc3RhdGljIGNoYXIgKgpAQCAt NTUwLDYgKzU0NSwxNCBAQCBwYXJzZV9leHRlbnNpb25fY29udHJvbF9maWxlKEV4dGVuc2lvbkNv bnRyb2xGaWxlICpjb250cm9sLAogCQkJCSBlcnJoaW50KCJUaGUgZXh0ZW5zaW9uIG11c3QgZmly c3QgYmUgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gd2hlcmUgUG9zdGdyZVNRTCBpcyBydW5uaW5n LiIpKSk7CiAJfQogCisJLyogQXNzZXJ0IHRoYXQgdGhlIGNvbnRyb2xfZGlyIGVuZHMgd2l0aCAv ZXh0ZW5zaW9uICovCisJQXNzZXJ0KGNvbnRyb2wtPmNvbnRyb2xfZGlyICE9IE5VTEwpOworCUFz c2VydChzdHJjbXAoY29udHJvbC0+Y29udHJvbF9kaXIgKyBzdHJsZW4oY29udHJvbC0+Y29udHJv bF9kaXIpIC0gc3RybGVuKCIvZXh0ZW5zaW9uIiksICIvZXh0ZW5zaW9uIikgPT0gMCk7CisKKwlj b250cm9sLT5iYXNlZGlyID0gcG5zdHJkdXAoCisJCQkJCQkJCWNvbnRyb2wtPmNvbnRyb2xfZGly LAorCQkJCQkJCQlzdHJsZW4oY29udHJvbC0+Y29udHJvbF9kaXIpIC0gc3RybGVuKCIvZXh0ZW5z aW9uIikpOworCiAJaWYgKChmaWxlID0gQWxsb2NhdGVGaWxlKGZpbGVuYW1lLCAiciIpKSA9PSBO VUxMKQogCXsKIAkJLyogbm8gY29tcGxhaW50IGZvciBtaXNzaW5nIGF1eGlsaWFyeSBmaWxlICov CkBAIC0zODYzLDMgKzM4NjYsNTEgQEAgbmV3X0V4dGVuc2lvbkNvbnRyb2xGaWxlKGNvbnN0IGNo YXIgKmV4dG5hbWUpCiAKIAlyZXR1cm4gY29udHJvbDsKIH0KKworCisvKgorICogV29yayBpbiBh IHZlcnkgc2ltaWxhciB3YXkgd2l0aCBmaW5kX2luX3BhdGggYnV0IGl0IHJlY2VpdmVzIGFuIGFs cmVhZHkKKyAqIHBhcnNlZCBMaXN0IG9mIHBhdGhzIHRvIHNlYXJjaCB0aGUgYmFzZW5hbWUgYW5k IGl0IGRvIG5vdCBzdXBwb3J0IG1hY3JvCisgKiByZXBsYWNlbWVudCBvciBjdXN0b20gZXJyb3Ig bWVzc2FnZXMgKGZvciBzaW1wbGljaXR5KS4KKyAqCisgKiBCeSAiYWxyZWFkeSBwYXJzZWQgTGlz dCBvZiBwYXRocyIgdGhpcyBmdW5jdGlvbiBleHBlY3RlZCB0aGF0IHBhdGhzIGFscmVhZHkKKyAq IGhhdmUgYWxsIG1hY3JvcyByZXBsYWNlZC4KKyAqLworY2hhciAqCitmaW5kX2luX3BhdGhzKGNv bnN0IGNoYXIgKmJhc2VuYW1lLCBMaXN0ICpwYXRocykKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOwor CisJLyoKKwkgKiBJZiB0aGUgcGF0aHMgdmFyaWFibGUgaXMgZW1wdHksIGRvbid0IGRvIGEgcGF0 aCBzZWFyY2guCisJICovCisJaWYgKHBhdGhzID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlm b3JlYWNoKGNlbGwsIHBhdGhzKQorCXsKKwkJY2hhcgkgICAqcGF0aCA9IChjaGFyICopIGxmaXJz dChjZWxsKTsKKwkJY2hhcgkgICAqZnVsbDsKKworCQlBc3NlcnQocGF0aCAhPSBOVUxMKTsKKwor CQljYW5vbmljYWxpemVfcGF0aChwYXRoKTsKKworCQkvKiBvbmx5IGFic29sdXRlIHBhdGhzICov CisJCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9OQU1FKSwKKwkJCQkJIGVycm1zZygiY29tcG9uZW50 IGluIHBhcmFtZXRlciBcImV4dGVuc2lvbl9jb250cm9sX3BhdGhcIiBpcyBub3QgYW4gYWJzb2x1 dGUgcGF0aCIpKSk7CisKKwkJZnVsbCA9IHBzcHJpbnRmKCIlcy8lcyIsIHBhdGgsIGJhc2VuYW1l KTsKKworCQllbG9nKERFQlVHMywgIiVzOiB0cnlpbmcgXCIlc1wiIiwgX19mdW5jX18sIGZ1bGwp OworCisJCWlmIChwZ19maWxlX2V4aXN0cyhmdWxsKSkKKwkJCXJldHVybiBmdWxsOworCisJCXBm cmVlKGZ1bGwpOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvdC8wMDFfZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC5wbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3QvMDAxX2V4dGVuc2lvbl9jb250cm9s X3BhdGgucGwKaW5kZXggYzE4NmMxNDcwZjcuLjFlZjc5ZDc1NzRmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy90LzAwMV9leHRlbnNpb25fY29udHJvbF9wYXRo LnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3QvMDAxX2V4dGVuc2lv bl9jb250cm9sX3BhdGgucGwKQEAgLTUsNiArNSw3IEBAIHVzZSB3YXJuaW5ncyBGQVRBTCA9PiAn YWxsJzsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6UGF0aCBxdyggbWFrZV9wYXRo ICk7CiAKIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7 CiAKQEAgLTEyLDI1ICsxMywxNCBAQCAkbm9kZS0+aW5pdDsKIAogIyBDcmVhdGUgYSB0ZW1wb3Jh cnkgZGlyZWN0b3J5IGZvciB0aGUgZXh0ZW5zaW9uIGNvbnRyb2wgZmlsZQogbXkgJGV4dF9kaXIg PSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcigpOworbWFrZV9wYXRoKCIkZXh0X2Rp ci9leHRlbnNpb24iKTsKKwogbXkgJGV4dF9uYW1lID0gInRlc3RfY3VzdG9tX2V4dF9wYXRocyI7 Ci1teSAkY29udHJvbF9maWxlID0gIiRleHRfZGlyLyRleHRfbmFtZS5jb250cm9sIjsKLW15ICRz cWxfZmlsZSA9ICIkZXh0X2Rpci8kZXh0X25hbWUtLTEuMC5zcWwiOwotCi0jIENyZWF0ZSAuY29u dHJvbCAuc3FsIGZpbGUKLW9wZW4gbXkgJGNmLCAnPicsICRjb250cm9sX2ZpbGUgb3IgZGllICJD b3VsZCBub3QgY3JlYXRlIGNvbnRyb2wgZmlsZTogJCEiOwotcHJpbnQgJGNmICJjb21tZW50ID0g J1Rlc3QgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCdcbiI7Ci1wcmludCAkY2YgImRlZmF1bHRfdmVy c2lvbiA9ICcxLjAnXG4iOwotcHJpbnQgJGNmICJyZWxvY2F0YWJsZSA9IHRydWVcbiI7Ci1jbG9z ZSAkY2Y7Ci0KLSMgQ3JlYXRlIC0tMS4wLnNxbCBmaWxlCi1vcGVuIG15ICRzcWxmLCAnPicsICRz cWxfZmlsZSBvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgc3FsIGZpbGU6ICQhIjsKLXByaW50ICRz cWxmICIvKiAkc3FsX2ZpbGUgKi9cbiI7Ci1wcmludCAkc3FsZgotICAiLS0gY29tcGxhaW4gaWYg c2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJ T05cbiI7Ci1wcmludCAkc3FsZgotICBxcSdcXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OICRl eHRfbmFtZSIgdG8gbG9hZCB0aGlzIGZpbGUuIFxccXVpdFxuJzsKLWNsb3NlICRzcWxmOworY3Jl YXRlX2V4dGVuc2lvbigkZXh0X25hbWUsICRleHRfZGlyKTsKKworbXkgJGV4dF9uYW1lMiA9ICJ0 ZXN0X2N1c3RvbV9leHRfcGF0aHNfdXNpbmdfZGlyZWN0b3J5IjsKK21ha2VfcGF0aCgiJGV4dF9k aXIvJGV4dF9uYW1lMiIpOworY3JlYXRlX2V4dGVuc2lvbigkZXh0X25hbWUyLCAkZXh0X2Rpciwg JGV4dF9uYW1lMik7CiAKICMgVXNlIHRoZSBjb3JyZWN0IHNlcGFyYXRvciBhbmQgZXNjYXBlIFwg d2hlbiBydW5uaW5nIG9uIFdpbmRvd3MuCiBteSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiOyIgOiAi OiI7CkBAIC00OCw2ICszOCw3IEBAIGlzKCRlY3AsICJcJHN5c3RlbSRzZXAkZXh0X2RpciIsCiAJ ImN1c3RvbSBleHRlbnNpb24gY29udHJvbCBkaXJlY3RvcnkgcGF0aCBjb25maWd1cmVkIik7CiAK ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBFWFRFTlNJT04gJGV4dF9uYW1l Iik7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgRVhURU5TSU9OICRleHRf bmFtZTIiKTsKIAogbXkgJHJldCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkic2Vs ZWN0ICogZnJvbSBwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucyB3aGVyZSBuYW1lID0gJyRleHRfbmFt ZSciKTsKQEAgLTU1LDI2ICs0Niw4MCBAQCBpcyggJHJldCwKIAkidGVzdF9jdXN0b21fZXh0X3Bh dGhzfDEuMHwxLjB8VGVzdCBleHRlbnNpb25fY29udHJvbF9wYXRoIiwKIAkiZXh0ZW5zaW9uIGlz IGluc3RhbGxlZCBjb3JyZWN0bHkgb24gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMiKTsKIAotbXkg JHJldDIgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiskcmV0ID0gJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAogCSJzZWxlY3QgKiBmcm9tIHBnX2F2YWlsYWJsZV9leHRlbnNpb25f dmVyc2lvbnMgd2hlcmUgbmFtZSA9ICckZXh0X25hbWUnIik7Ci1pcyggJHJldDIsCitpcyggJHJl dCwKIAkidGVzdF9jdXN0b21fZXh0X3BhdGhzfDEuMHx0fHR8Znx0fHx8VGVzdCBleHRlbnNpb25f Y29udHJvbF9wYXRoIiwKIAkiZXh0ZW5zaW9uIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkgb24gcGdf YXZhaWxhYmxlX2V4dGVuc2lvbl92ZXJzaW9ucyIpOwogCiskcmV0ID0gJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJzZWxlY3QgKiBmcm9tIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zIHdo ZXJlIG5hbWUgPSAnJGV4dF9uYW1lMiciKTsKK2lzKCAkcmV0LAorCSJ0ZXN0X2N1c3RvbV9leHRf cGF0aHNfdXNpbmdfZGlyZWN0b3J5fDEuMHwxLjB8VGVzdCBleHRlbnNpb25fY29udHJvbF9wYXRo IiwKKwkiZXh0ZW5zaW9uIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkgb24gcGdfYXZhaWxhYmxlX2V4 dGVuc2lvbnMiKTsKKworJHJldCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkic2Vs ZWN0ICogZnJvbSBwZ19hdmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zIHdoZXJlIG5hbWUgPSAn JGV4dF9uYW1lMiciKTsKK2lzKCAkcmV0LAorCSJ0ZXN0X2N1c3RvbV9leHRfcGF0aHNfdXNpbmdf ZGlyZWN0b3J5fDEuMHx0fHR8Znx0fHx8VGVzdCBleHRlbnNpb25fY29udHJvbF9wYXRoIiwKKwki ZXh0ZW5zaW9uIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkgb24gcGdfYXZhaWxhYmxlX2V4dGVuc2lv bl92ZXJzaW9ucyIpOworCiAjIEVuc3VyZSB0aGF0IGV4dGVuc2lvbnMgaW5zdGFsbGVkIG9uICRz eXN0ZW0gaXMgc3RpbGwgdmlzaWJsZSB3aGVuIHVzaW5nIHdpdGgKICMgY3VzdG9tIGV4dGVuc2lv biBjb250cm9sIHBhdGguCi1teSAkcmV0MyA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KyRyZXQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJInNlbGVjdCBjb3VudCgqKSA+ IDAgYXMgb2sgZnJvbSBwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucyB3aGVyZSBuYW1lID0gJ3BscGdz cWwnIgogKTsKLWlzKCRyZXQzLCAidCIsCitpcygkcmV0LCAidCIsCiAJIlwkc3lzdGVtIGV4dGVu c2lvbiBpcyBpbnN0YWxsZWQgY29ycmVjdGx5IG9uIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zIik7 CiAKIAotbXkgJHJldDQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiskcmV0ID0gJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJzZXQgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCA9 ICcnOyBzZWxlY3QgY291bnQoKikgPiAwIGFzIG9rIGZyb20gcGdfYXZhaWxhYmxlX2V4dGVuc2lv bnMgd2hlcmUgbmFtZSA9ICdwbHBnc3FsJyIKICk7Ci1pcygkcmV0NCwgInQiLAoraXMoJHJldCwg InQiLAogCSJcJHN5c3RlbSBleHRlbnNpb24gaXMgaW5zdGFsbGVkIGNvcnJlY3RseSBvbiBwZ19h dmFpbGFibGVfZXh0ZW5zaW9ucyB3aXRoIGVtcHR5IGV4dGVuc2lvbl9jb250cm9sX3BhdGgiCiAp OwogCisjIFRlc3Qgd2l0aCBhbiBleHRlbnNpb24gdGhhdCBkb2VzIG5vdCBleGlzdHMKK215ICgk Y29kZSwgJHN0ZG91dCwgJHN0ZGVycikgPSAgJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBFWFRFTlNJT04gaW52YWxpZCIpOworaXMoJGNvZGUsIDMsICdlcnJvciB0byBjcmVhdGUgYW4g ZXh0ZW5zaW9uIHRoYXQgZG9lcyBub3QgZXhpc3RzJyk7CitsaWtlKCRzdGRlcnIsIHFyL0VSUk9S OiAgZXh0ZW5zaW9uICJpbnZhbGlkIiBpcyBub3QgYXZhaWxhYmxlLyk7CisKK3N1YiBjcmVhdGVf ZXh0ZW5zaW9uCit7CisJbXkgKCRleHRfbmFtZSwgJGV4dF9kaXIsICRkaXJlY3RvcnkpID0gQF87 CisKKwlteSAkY29udHJvbF9maWxlID0gIiRleHRfZGlyL2V4dGVuc2lvbi8kZXh0X25hbWUuY29u dHJvbCI7CisJbXkgJHNxbF9maWxlOworCisJaWYgKGRlZmluZWQgJGRpcmVjdG9yeSkKKwl7CisJ CSRzcWxfZmlsZSA9ICIkZXh0X2Rpci8kZGlyZWN0b3J5LyRleHRfbmFtZS0tMS4wLnNxbCI7CisJ fQorCWVsc2UKKwl7CisJCSRzcWxfZmlsZSA9ICIkZXh0X2Rpci9leHRlbnNpb24vJGV4dF9uYW1l LS0xLjAuc3FsIjsKKwl9CisKKwkjIENyZWF0ZSAuY29udHJvbCAuc3FsIGZpbGUKKwlvcGVuIG15 ICRjZiwgJz4nLCAkY29udHJvbF9maWxlIG9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSBjb250cm9s IGZpbGU6ICQhIjsKKwlwcmludCAkY2YgImNvbW1lbnQgPSAnVGVzdCBleHRlbnNpb25fY29udHJv bF9wYXRoJ1xuIjsKKwlwcmludCAkY2YgImRlZmF1bHRfdmVyc2lvbiA9ICcxLjAnXG4iOworCXBy aW50ICRjZiAicmVsb2NhdGFibGUgPSB0cnVlXG4iOworCWlmIChkZWZpbmVkICRkaXJlY3Rvcnkp CisJeworCQlwcmludCAkY2YgImRpcmVjdG9yeSA9ICRkaXJlY3RvcnkiOworCX0KKwljbG9zZSAk Y2Y7CisKKwkjIENyZWF0ZSAtLTEuMC5zcWwgZmlsZQorCW9wZW4gbXkgJHNxbGYsICc+JywgJHNx bF9maWxlIG9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSBzcWwgZmlsZTogJCEiOworCXByaW50ICRz cWxmICIvKiAkc3FsX2ZpbGUgKi9cbiI7CisJcHJpbnQgJHNxbGYKKwkgICItLSBjb21wbGFpbiBp ZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVO U0lPTlxuIjsKKwlwcmludCAkc3FsZgorCSAgcXEnXFxlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lP TiAkZXh0X25hbWUiIHRvIGxvYWQgdGhpcyBmaWxlLiBcXHF1aXRcbic7CisJY2xvc2UgJHNxbGY7 Cit9CisKIGRvbmVfdGVzdGluZygpOwotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000985f250633a0e32d--