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.96) (envelope-from ) id 1vLhIw-007RLV-1I for pgsql-bugs@arkaria.postgresql.org; Wed, 19 Nov 2025 12:28:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLhIt-00CplF-26 for pgsql-bugs@arkaria.postgresql.org; Wed, 19 Nov 2025 12:28:55 +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.96) (envelope-from ) id 1vLhIt-00Cpl6-08 for pgsql-bugs@lists.postgresql.org; Wed, 19 Nov 2025 12:28:55 +0000 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vLhIp-000KsM-38 for pgsql-bugs@lists.postgresql.org; Wed, 19 Nov 2025 12:28:54 +0000 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-7b9387df58cso3521312b3a.3 for ; Wed, 19 Nov 2025 04:28:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763555332; x=1764160132; 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=2hFa4shTVCZNOuBbFTny1sJHqzqBDftMkFEamUGiu/U=; b=SlYS1Gy6DPhOMIpA4NQ00qMRtsj57GVcfI/Y6PSbXxy3Yoq3pniXmgSadnkjW3cbhZ +OIxGZ+ZF2lRIrzaqEZgBIaDE/Nn/bi4GkZLXB3hIflKyTN3Z8WidFUx4de6d3rSXiJZ Ak+J/xJuz2kbMd/nRK0VqrtfhqxMsDnF2tmPBaTxstiIYExbn5oyRrF2loOqty9btH4m B677HrqPyKeQ/p8iIDgwKggB9atoCyDrGWZnMpnFFeXgZLTVGnJqALqWOyaFncsjf211 0j/x6UFPZZdnR8ueSx2uVovh1C4MSDbxrre4ldtwIVubSwBCsuiciHa3Of1+lX6GuMoB Mn/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763555332; x=1764160132; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=2hFa4shTVCZNOuBbFTny1sJHqzqBDftMkFEamUGiu/U=; b=AcwfLyjTmUSaEPvtFi5D2ZxCIJrYW+NDmTOL/bVJNwQIYQMsKAu/gSVyLRQcpZ6bhL A7jdKBGNR57cib4mpoDyhpXkaA7ShDZk7a4kbIt1KyRsG1BsrZ+6Amf2ailVLgQKQLPa qIpeenIKmq9xVqd8Tm2GwlfRdX5Dz8aGKL7hZVeocrwhLe7gm+p6qHDBCzNo8BmnHB3K KmoMUKVCpCF65XW1FAZoeSEDP3vqSSdvuZqUbtHDtT8yrY9djC70kiVEP59FRiLkZMIH uvE6odxxMsbzCKy3wcyEGZmz6ousDc/WDRcp/kzJAnbe6uCZ+YB941y4H3H2vXmaCNom +T8A== X-Forwarded-Encrypted: i=1; AJvYcCUfl2WFHaBCjSIs0aJWSanUfGo6b0QwVCcbajLoRG0qrJjUf0B55zsGo2Sr6iF8HXngiflm9czRJ3vU@lists.postgresql.org X-Gm-Message-State: AOJu0YyqIiUFtfOxxT763YV0Bf16z1aKBm4PvsDxmecg1LFOu+eHZt5j yQokJ6o1SMbA5VRnIOm2QbUAfwxl59wMXzYbsV9ToqSRIoa6yQc4pghObNBZYfSs1XKNi3NA2QY SV7TOD8s50PMQ7VQtI0dQiKo+LTVZYD4= X-Gm-Gg: ASbGncv/j4iYW0zAsp/dpA2muuSGjA5jmJKgP5lVrT7VD7phK8WpitIEfWtwhhU4ubd Qclzs6uINDVrVtTJwb2vmYK+pnAEg58z8vOulKpq3V9E9fdlPcGb4gjV322JXWjhMYe++ogazsQ tSGr47Ko0pG6p3hSsiv+Vni6yMEtH9hvQ3G2IILDBETYav1TSQBcdEfYUfHk08C7qnM86sFs6kL V3vF7uEWyurs/Y2/qL8R96KVwMEDfVyOM81r/CU76VQZz7Q1EpuGYYbEFtjRzH9/VVeXqg= X-Google-Smtp-Source: AGHT+IGlq12jov7KWcceeY6RQIgs8FrAKQMOVaAMxNTabWTGwq+Gqs7/wMYhv3QjDPzi+p0928W95Ij9LkO3ALctKZY= X-Received: by 2002:a05:7022:f40f:b0:119:e56b:c75b with SMTP id a92af1059eb24-11b41203ec3mr10596448c88.32.1763555331534; Wed, 19 Nov 2025 04:28:51 -0800 (PST) MIME-Version: 1.0 References: <19095-6d8256d0c37d4be2@postgresql.org> <2305435.1762929527@sss.pgh.pa.us> <7C7B32ED-5742-49D5-9380-5E02AA5B03C4@yesql.se> <057A2AED-0116-446B-8986-57FDA70CA5A3@yesql.se> <2wdijz5mucqx33vqzyep44uyucauw33egvwa7cbociesqlks5x@yj63saikpzwu> In-Reply-To: From: BharatDB Date: Wed, 19 Nov 2025 17:59:09 +0530 X-Gm-Features: AWmQ_bnypEPFhuM3lJcencjLg33MloBRjWwCfp-pZmKygfGRyB0r8lMNZBqRRt8 Message-ID: Subject: Re: BUG #19095: Test if function exit() is used fail when linked static To: Andres Freund , Tom Lane Cc: torsten.rupp@gmx.net, pgsql-bugs@lists.postgresql.org, VASUKI M , daniel@yesql.se, michael@paquier.xyz Content-Type: multipart/mixed; boundary="000000000000147bf40643f1b952" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000147bf40643f1b952 Content-Type: multipart/alternative; boundary="000000000000147bf10643f1b950" --000000000000147bf10643f1b950 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sorry,for the wrong patch this is the correct one.kindly find the attached patch for testing I would love to hear the feedback from you committers. regards, Vasuki M BharatDB,C-DAC Chennai. On Wed, Nov 19, 2025 at 2:38=E2=80=AFPM BharatDB wro= te: > Hi Andres and hackers, > I came up with the solution > =E2=80=94 short follow-up with what I changed and how the Meson check act= ually > runs. > > Summary of what I did > - Added a Meson custom_target in src/interfaces/libpq/meson.build that > scans libpq's object files for direct exit() references. > - Added pthread_exit to the Makefile whitelist (the Makefile test > already existed; this just updates the whitelist). > -Added the custom target in the top level meson.build > > Where the Meson check lives and when it runs > - I put the custom_target in src/interfaces/libpq/meson.build, > immediately after the libpq shared/static library targets are > defined and after the declare_dependency for libpq. That is the > correct location in the libpq build file. > - The custom_target declares `depends: [libpq_st, libpq_so]`. This > is important: it tells Meson to build those targets first so the > .o files are present in the build directory before the check runs. > The check itself does not scan libpq_st or libpq_so; it scans > files in build/src/interfaces/libpq/*.o. > - The command uses `find /src/interfaces/libpq -name '*.o'` > and runs `nm -u` on each .o, piping through `grep -v` for the > whitelisted names and finally checking for exit. > - The check is skipped for: > * cross-builds > * when coverage (b_coverage) is enabled > * on Windows (no nm/grep in the same form there) as Andrew question= ed > > Why pthread_exit is whitelisted > - pthread_exit can legitimately appear in a few build/runtime > configurations (thread runtimes or link-time glue), and the > Makefile test was updated to whitelist it. The Meson check has the > same whitelist so both build systems behave the same. > - Whitelisting pthread_exit doesn't remove the value of the test: > it only avoids false positives for legitimate thread shutdown code. > We still catch direct exit()/ _exit()/abort()-style calls as tom said= . > > How to reproduce locally > - From repo root: > rm -rf build > meson setup build > cd build > ninja > The custom_target runs as part of the normal build and will fail > the build if any .o contains an un-whitelisted exit() reference. > > On Fri, Nov 14, 2025 at 7:31=E2=80=AFPM Andres Freund wrote: > > But more generally: If we allow pthread_exit(), what's the point of this >> test? >> That's one of the functions we better avoid calling, no? >> > I agree it's worth questioning which functions we allow. The > current choice (whitelist pthread_exit) mirrors the Makefile > behavior, avoids false positives, and keeps the test focused on > direct process-termination calls authored in our code. If the > community prefers a stricter policy so we can adjust the whitelist. > > >> ISTM that if we do want to continue having this test, the issue is that >> we're >> testing the shared library - which will have already linked against stat= ic >> libraries like the sanitizer ones or in this case libcrypto. What we >> ought to >> do is to test the .o files constituting libpq.so, rather than the alread= y >> linked .so. That way we will find our own calls to exit etc, but not one= s >> in >> static libraries. >> > > TBH After so many test runs I have finalized > Why scan .o files (not the final .so)? > - A shared library is usually linked with other static libraries > (libcrypto, sanitizer runtimes). If we scan the final .so we'll > see references that originate in those static libraries and produce > false positives. > - If we scan the .o files that make up libpq, we only inspect our > own compilation units and will catch only exit() calls introduced > by our code. > > HTH! I attached the patch and also added the meson test output before > /after of any file containing an 'exit' explicitly; it fails the > build[ninja]. > > Regards, > Vasuki M > BharatDB[CDAC chennai] > --000000000000147bf10643f1b950 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Sorry,for the wrong patch this is the correct=C2=A0one.kin= dly find the attached patch for testing=C2=A0
I would love to hear the f= eedback from you committers.

regards,
Vasuki M=
BharatDB,C-DAC Chennai.=C2=A0

On Wed,= Nov 19, 2025 at 2:38=E2=80=AFPM BharatDB <bharatdbpg@gmail.com> wrote:
Hi Andre= s and hackers,
I came up with the solution
=E2=80=94 short follow-up = with what I changed and how the Meson check actually runs.

Summary o= f what I did
=C2=A0 - Added a Meson custom_target in src/interfaces/libp= q/meson.build that
=C2=A0 =C2=A0 scans libpq's object files for dire= ct exit() references.
=C2=A0 - Added pthread_exit to the Makefile whitel= ist (the Makefile test
=C2=A0 =C2=A0 already existed; this just updates = the whitelist).
=C2=A0 -Added the custom target in the top level = meson.build

Where the Meson check live= s and when it runs
=C2=A0 - I put the custom_target in src/interfaces/li= bpq/meson.build,
=C2=A0 =C2=A0 immediately after the libpq shared/static= library targets are
=C2=A0 =C2=A0 defined and after the declare_depende= ncy for libpq.=C2=A0 That is the
=C2=A0 =C2=A0 correct location in the l= ibpq build file.
=C2=A0 - The custom_target declares `depends: [libpq_st= , libpq_so]`.=C2=A0 This
=C2=A0 =C2=A0 is important: it tells Meson to b= uild those targets first so the
=C2=A0 =C2=A0 .o files are present in th= e build directory before the check runs.
=C2=A0 =C2=A0 The check itself = does not scan libpq_st or libpq_so; it scans
=C2=A0 =C2=A0 files in buil= d/src/interfaces/libpq/*.o.
=C2=A0 - The command uses `find <builddir= >/src/interfaces/libpq -name '*.o'`
=C2=A0 =C2=A0 and runs `n= m -u` on each .o, piping through `grep -v` for the
=C2=A0 =C2=A0 whiteli= sted names and finally checking for exit.
=C2=A0 - The check is skipped = for:
=C2=A0 =C2=A0 =C2=A0 * cross-builds
=C2=A0 =C2=A0 =C2=A0 * when = coverage (b_coverage) is enabled
=C2=A0 =C2=A0 =C2=A0 * on Windows (no n= m/grep in the same form there) as Andrew questioned

Why pthread_exit= is whitelisted
=C2=A0 - pthread_exit can legitimately appear in a few b= uild/runtime
=C2=A0 =C2=A0 configurations (thread runtimes or link-time = glue), and the
=C2=A0 =C2=A0 Makefile test was updated to whitelist it.= =C2=A0 The Meson check has the
=C2=A0 =C2=A0 same whitelist so both buil= d systems behave the same.
=C2=A0 - Whitelisting pthread_exit doesn'= t remove the value of the test:
=C2=A0 =C2=A0 it only avoids false posit= ives for legitimate thread shutdown code.
=C2=A0 =C2=A0 We still catch d= irect exit()/ _exit()/abort()-style calls as tom said.

How to reprod= uce locally
=C2=A0 - From repo root:
=C2=A0 =C2=A0 =C2=A0 rm -rf buil= d
=C2=A0 =C2=A0 =C2=A0 meson setup build
=C2=A0 =C2=A0 =C2=A0 cd buil= d
=C2=A0 =C2=A0 =C2=A0 ninja
=C2=A0 =C2=A0 The custom_target runs as = part of the normal build and will fail
=C2=A0 =C2=A0 the build if any .o= contains an un-whitelisted exit() reference.

On Fri, Nov 14, 2025 at 7:= 31=E2=80=AFPM Andres Freund <andres@anarazel.de> wrote:

But more generally: If we allow pthread_exit(), what's the point of thi= s test?
That's one of the functions we better avoid calling, no?
=C2=A0I agree it's worth questioning which functions we allow.=C2=A0 = The
=C2=A0current choice (whitelist pthread_exit) mirrors the Makefile=C2=A0behavior, avoids false positives, and keeps the test focused on
= =C2=A0direct process-termination calls authored in our code.=C2=A0 If the=C2=A0community prefers a stricter policy so we can adjust the whitelist.=
=C2=A0
ISTM that if we do want to continue having this test, the issue is that we&= #39;re
testing the shared library - which will have already linked against static<= br> libraries like the sanitizer ones or in this case libcrypto. What we ought = to
do is to test the .o files constituting libpq.so, rather than the already linked .so. That way we will find our own calls to exit etc, but not ones i= n
static libraries.
=C2=A0
TBH After so many t= est runs I have finalized
Why scan .o files (not the final .so)?<= br>=C2=A0 - A shared library is usually linked with other static libraries<= br>=C2=A0 =C2=A0 (libcrypto, sanitizer runtimes).=C2=A0 If we scan the fina= l .so we'll
=C2=A0 =C2=A0 see references that originate in those sta= tic libraries and produce
=C2=A0 =C2=A0 false positives.
=C2=A0 - If = we scan the .o files that make up libpq, we only inspect our
=C2=A0 =C2= =A0 own compilation units and will catch only exit() calls introduced
= =C2=A0 =C2=A0 by our code.

HTH! I attached the patch and also= added the meson test output before /after of any file containing an 'e= xit' explicitly; it fails the build[ninja].

Regards,
Vasuki M=
BharatDB[CDAC chennai]
--000000000000147bf10643f1b950-- --000000000000147bf40643f1b952 Content-Type: text/x-patch; charset="UTF-8"; name="0001-libpq-Add-exit-function-check-for-Meson-build-and-wh.patch" Content-Disposition: attachment; filename="0001-libpq-Add-exit-function-check-for-Meson-build-and-wh.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi5z31l60 RnJvbSBmMDY3OTI2NmJkYTc2NWY0ZTFlMTViZmVlOTdkMjgxN2QzYmQ3OGVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXREQlBHIDxiaGFyYXRkYnBnQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAxOSBOb3YgMjAyNSAxNzo0Mzo1MyArMDUzMApTdWJqZWN0OiBbUEFUQ0hdIGxpYnBx OiBBZGQgZXhpdCgpIGZ1bmN0aW9uIGNoZWNrIGZvciBNZXNvbiBidWlsZCBhbmQKIHdoaXRlbGlz dCBwdGhyZWFkX2V4aXQoKQpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxh aW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhlIE1h a2VmaWxlLWJhc2VkIGJ1aWxkIGFscmVhZHkgcGVyZm9ybXMgYSBzYWZldHkgY2hlY2sgdG8gZW5z dXJlIHRoYXQKbGlicHEgZG9lcyBub3QgYWNjaWRlbnRhbGx5IHJlZmVyZW5jZSBleGl0KCkgb3Ig cmVsYXRlZCB0ZXJtaW5hdGlvbgpmdW5jdGlvbnMuCgpNZXNvbiwgaG93ZXZlciwgZGlkIG5vdCBy dW4gdGhpcyBjaGVjay4gQXMgYSByZXN1bHQsIE1lc29uIGJ1aWxkcyBjb3VsZAptaXNzIGFjY2lk ZW50YWwgcmVmZXJlbmNlcyB0byBleGl0KCktZmFtaWx5IGZ1bmN0aW9ucyB3aGljaCBpZGVhbGx5 CnNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW5zaWRlIGxpYnBxLgoKVGhpcyBwYXRjaCBhZGRzIHRo ZSBtaXNzaW5nIHNjYW4gdG8gdGhlIE1lc29uIGJ1aWxkIGJ5OgogIOKAoiBTY2FubmluZyB0aGUg bGlicHEgLm8gZmlsZXMgdXNpbmcgbm0gYW5kIGZpbHRlcmluZyB0aHJvdWdoIHRoZSBzYW1lCiAg ICB3aGl0ZWxpc3QgbG9naWMgYXMgdGhlIE1ha2VmaWxlLgogIOKAoiBBZGRpbmcgcHRocmVhZF9l eGl0KCkgdG8gdGhlIE1lc29uIHdoaXRlbGlzdCwgbWF0Y2hpbmcgdGhlIGJlaGF2aW9yCiAgICBv ZiB0aGUgZXhpc3RpbmcgTWFrZWZpbGUgY2hlY2suCgpXaXRoIHRoaXMgY2hhbmdlLCBib3RoIE1h a2VmaWxlIGFuZCBNZXNvbiBidWlsZHMgYXBwbHkgdGhlIHNhbWUKdmFsaWRhdGlvbiBmb3IgdW53 YW50ZWQgZXhpdCgpIHVzYWdlLgotLS0KIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAg IHwgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUgICAgfCAgNSArKystLQogc3Jj L2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgfCAzMCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCmluZGV4IGMxZTE3YWEz MDQwLi40NzU4OGVhZDlmYiAxMDA2NDQKLS0tIGEvbWVzb24uYnVpbGQKKysrIGIvbWVzb24uYnVp bGQKQEAgLTM4MjAsNiArMzgyMCw3IEBAIGFsaWFzX3RhcmdldCgnYmluJywgYmluX3RhcmdldHMg KyBbbGlicHFfc3RdKQogYWxpYXNfdGFyZ2V0KCdwbCcsIHBsX3RhcmdldHMpCiBhbGlhc190YXJn ZXQoJ2NvbnRyaWInLCBjb250cmliX3RhcmdldHMpCiBhbGlhc190YXJnZXQoJ3Rlc3RwcmVwJywg dGVzdHByZXBfdGFyZ2V0cykKK2FsaWFzX3RhcmdldCgncnVuLWNoZWNrLWxpYnBxJywgW2NoZWNr X2V4aXRfdGFyZ2V0XSkKIAogYWxpYXNfdGFyZ2V0KCd3b3JsZCcsIGFsbF9idWlsdCwgZG9jcykK IGFsaWFzX3RhcmdldCgnaW5zdGFsbC13b3JsZCcsIGluc3RhbGxfcXVpZXQsIGluc3RhbGxkb2Nz KQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9NYWtlZmlsZQppbmRleCBkYTY2NTAwNjZkNC4uN2IyMGQ4NGQ1MWQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL01ha2VmaWxlCkBAIC0xMzcsMTQgKzEzNywxNSBAQCAkKHN0bGliKTogJChPQkpTX1NU QVRJQykKICMgd2hpY2ggc2VlbXMgdG8gaW5zZXJ0IHJlZmVyZW5jZXMgdG8gdGhhdCBldmVuIGlu IHB1cmUgQyBjb2RlLiBFeGNsdWRpbmcKICMgX190c2FuX2Z1bmNfZXhpdCBpcyBuZWNlc3Nhcnkg d2hlbiB1c2luZyBUaHJlYWRTYW5pdGl6ZXIgZGF0YSByYWNlIGRldGVjdG9yCiAjIHdoaWNoIHVz ZSB0aGlzIGZ1bmN0aW9uIGZvciBpbnN0cnVtZW50YXRpb24gb2YgZnVuY3Rpb24gZXhpdC4KLSMg U2tpcCB0aGUgdGVzdCB3aGVuIHByb2ZpbGluZywgYXMgZ2NjIG1heSBpbnNlcnQgZXhpdCgpIGNh bGxzIGZvciB0aGF0LgorI0V4Y2x1ZGluZyBwdGhyZWFkX2V4aXQgYWxsb3dzIGxlZ2l0aW1hdGUg dGhyZWFkIHNodXRkb3duIHBhdGhzIHVzZWQgb24gc29tZSBidWlsZHMuCisjU2tpcCB0aGUgdGVz dCB3aGVuIHByb2ZpbGluZywgYXMgZ2NjIG1heSBpbnNlcnQgZXhpdCgpIGNhbGxzIGZvciB0aGF0 LgogIyBBbHNvIHNraXAgdGhlIHRlc3Qgb24gcGxhdGZvcm1zIHdoZXJlIGxpYnBxIGluZnJhc3Ry dWN0dXJlIG1heSBiZSBwcm92aWRlZAogIyBieSBzdGF0aWNhbGx5LWxpbmtlZCBsaWJyYXJpZXMs IGFzIHdlIGNhbid0IGV4cGVjdCB0aGVtIHRvIGhvbm9yIHRoaXMKICMgY29kaW5nIHJ1bGUuCiBs aWJwcS1yZWZzLXN0YW1wOiAkKHNobGliKQogaWZuZXEgKCQoZW5hYmxlX2NvdmVyYWdlKSwgeWVz KQogaWZlcSAoLCQoZmlsdGVyIHNvbGFyaXMsJChQT1JUTkFNRSkpKQotCUBpZiBubSAtQSAtdSAk PCAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgLWUgX19jeGFfYXRleGl0IC1lIF9fdHNhbl9mdW5jX2V4 aXQgfCBncmVwIGV4aXQ7IHRoZW4gXAorCUBpZiBubSAtQSAtdSAkPCAyPi9kZXYvbnVsbCB8IGdy ZXAgLXYgLWUgX19jeGFfYXRleGl0IC1lIF9fdHNhbl9mdW5jX2V4aXQgLWUgcHRocmVhZF9leGl0 IHwgZ3JlcCBleGl0OyB0aGVuIFwKIAkJZWNobyAnbGlicHEgbXVzdCBub3QgYmUgY2FsbGluZyBh bnkgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyBleGl0JzsgZXhpdCAxOyBcCiAJZmkKIGVuZGlmCmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL21lc29uLmJ1aWxkCmluZGV4IGE3NGU4ODViMTY5Li4zMDMyNDczMWU5YyAxMDA2 NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvbWVzb24uYnVpbGQKQEAgLTg1LDYgKzg1LDM2IEBAIGxpYnBxID0gZGVjbGFy ZV9kZXBlbmRlbmN5KAogICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbaW5jbHVkZV9kaXJlY3Rvcmll cygnLicpXQogKQogCisjIFNhbml0eSBjaGVjayB0byBlbnN1cmUgbGlicHEgZG9lcyBub3QgY29u dGFpbiBhbnkgdW5pbnRlbmRlZCByZWZlcmVuY2VzCisjIHRvIGV4aXQoKSBpbiBpdHMgb2JqZWN0 IGZpbGVzLiAgQ2xpZW50IGxpYnJhcmllcyBtdXN0IG5vdCB0ZXJtaW5hdGUgdGhlCisjIGNhbGxp bmcgcHJvY2Vzcywgc28gd2Ugc2NhbiBhbGwgbGlicHEgLm8gZmlsZXMgd2l0aCAnbm0nIGFuZCBm YWlsIHRoZQorIyBidWlsZCBpZiBhIGRpcmVjdCBleGl0KCkgcmVmZXJlbmNlIGlzIGZvdW5kLiAg Q2VydGFpbiBoYXJtbGVzcyBzeW1ib2xzCisjIChfX2N4YV9hdGV4aXQsIF9fdHNhbl9mdW5jX2V4 aXQsIHB0aHJlYWRfZXhpdCkgYXJlIHdoaXRlbGlzdGVkLgorIyBTa2lwIG9uIGNyb3NzLWJ1aWxk cywgc2FuaXRpemVyIGNvdmVyYWdlLCBhbmQgV2luZG93cworCitpZiBub3QgbWVzb24uaXNfY3Jv c3NfYnVpbGQoKSBhbmQgbm90IGdldF9vcHRpb24oJ2JfY292ZXJhZ2UnKSBhbmQgaG9zdF9zeXN0 ZW0gIT0gJ3dpbmRvd3MnCisgIGNoZWNrX2V4aXRfdGFyZ2V0ID0gY3VzdG9tX3RhcmdldCgKKyAg ICAnY2hlY2stbGlicHEtbm8tZXhpdCcsCisgICAgb3V0cHV0OiAnbGlicHEtbm0tc3RhbXAnLAor ICAgIGRlcGVuZHM6IFtsaWJwcV9zdCwgbGlicHFfc29dLAorICAgIGJ1aWxkX2J5X2RlZmF1bHQ6 IHRydWUsCisgICAgY29tbWFuZDogWworICAgICAgJ2Jhc2gnLCctZXUnLCAnLWMnLAorICAgICAg JycnCisgICAgICBlY2hvICJDaGVja2luZyB0aGF0IGxpYnBxIG9iamVjdCBmaWxlcyBkbyBub3Qg cmVmZXJlbmNlIGV4aXQoKS4uLiIKKyAgICAgIG9ial9maWxlcz0kKGZpbmQgc3JjL2ludGVyZmFj ZXMvbGlicHEgLXR5cGUgZiAtbmFtZSAiKi5vIikKKyAgICAgIGZvciBmIGluICRvYmpfZmlsZXM7 IGRvCisgICAgICAgIGlmIG5tIC11ICIkZiIgMj4vZGV2L251bGx8IGdyZXAgLXYgLUUgJ19fY3hh X2F0ZXhpdHxfX3RzYW5fZnVuY19leGl0fHB0aHJlYWRfZXhpdCd8IGdyZXAgZXhpdDsgdGhlbgor ICAgICAgICAgIGVjaG8gIkVSUk9SOiBleGl0KCktcmVsYXRlZCByZWZlcmVuY2UgZm91bmQgaW46 ICRmIgorICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgdG91 Y2ggIEBPVVRQVVRACisgICAgICAnJycuZm9ybWF0KG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCkp CisgICAgXSwKKyAgKQorCitlbmRpZgogcHJpdmF0ZV9kZXBzID0gWwogICBmcm9udGVuZF9zdGxp Yl9jb2RlLAogICBsaWJwcV9kZXBzLAotLSAKMi40My4wCgo= --000000000000147bf40643f1b952--