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 1uxMIS-00DUWT-9Z for pgsql-general@arkaria.postgresql.org; Sat, 13 Sep 2025 09:11:52 +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 1uxMIQ-005UeC-85 for pgsql-general@arkaria.postgresql.org; Sat, 13 Sep 2025 09:11:51 +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 1uxMIP-005Udv-JX for pgsql-general@lists.postgresql.org; Sat, 13 Sep 2025 09:11:50 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450: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 1uxMIN-000AzU-13 for pgsql-general@postgresql.org; Sat, 13 Sep 2025 09:11:49 +0000 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3e76766a172so1232422f8f.0 for ; Sat, 13 Sep 2025 02:11:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec.at; s=google; t=1757754706; x=1758359506; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=5ij8O6aI6e41xjfvC+QZwMg+oiczxaKIV/+0j/gQS8s=; b=fOos2LvDTdCJzGpV/Fbo8ezvEj/oJmVe5KZSAL3cb2eZcGzLqJE/hFqpyb9VahYdSY mR85FcJnSjlo39+rXPb1n1g5ZRPcJybKmfF5v1Z5WFEOD+NiXJT+grKDJt9Fh/9hRqUd eyXFUSI7n3xm33JpeI5S0ClFiuX8br+IEUPQDMypr24unoV0Xf+qWd5rGzxqU2HVg2tu 8LdmwFyH4BlETO7By5+F6TMTcFwqQJfeUPUXdgKGgXqX30RhQwd9m3qvnyADUy0lFDSB vcbahfyB1xnngmR3cKu/lXwpecn1hX+lq+MdiwBoG6fzOl7EZ6Dei4mTiml3W3fbb9vc 7Oog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757754706; x=1758359506; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5ij8O6aI6e41xjfvC+QZwMg+oiczxaKIV/+0j/gQS8s=; b=bGHVgrTRPCC5RCcprYMW2T2JukzBOm+OyNafwjBCw+4ylvn23upVAotvKUNEgS7CBe 8yV4xgZjRQO3AbxJGouz4ptMjRJctSo7PLXkmM63CcwLzZwt4XkyadX/Vrozs8tA2SNE 641TIMOGYvGMWLJQveKWGnbkkQj7Km5q99SvXDxds1g5lY3Txo9HYlg28gRr+UnAiwqD 1jNRhcQNo1QtWNG3fUmGoQYH8uGmjkSOMqJJTPyeezQvV+W7L8vUH+xIDpq2fIABHovk vuYflxfXNtJgmbEY/4YJZtJXLtRB93O/l5w9+1H2AH1+rFP/MmTvPYGQDohnUYUfAfYj R7WA== X-Forwarded-Encrypted: i=1; AJvYcCU42+rHy/bbk1I7S1GynxE7kSjy3GeMVOqp/zcw5OuhAxWVPmj+ribtAfmp8oCrp3/kbi0k96m8ToTyxq89@postgresql.org X-Gm-Message-State: AOJu0YzhMu0/MPcqQ7DS2jAnd7rIQsHBHYX7FssA8IPqzoXoUdEUKkKA emkx9ZFX+w/uxQIvU+ABQ2w+2PhM3yPnKJ611/5gPGlMVPjlNlw2jBvL3amSnb9T9C4= X-Gm-Gg: ASbGncs8M2c0KjDQ+tfAr2cd8lfDFNMHM01gGMoBiqngkEqmhJzV2LAT560Z3sbIHk3 m7B2YHAriZRkvAH+zRrISCNYVM2sxJbIzhbAZTDqrvUoyWa1qGRV/wUlJnOBuSvRZXfdHv5tl02 B04Ax1Y70cQzSdAHod1qxYW9KukQpVLx+D2NdH9i3rGEJl3ZhKAqL6R4/YogUPlig2/DjoCw0bc 7so5clDmIoUbEqomdAF3Qotf82ajmasj3Ao6FtF6J2vkBA+8vtbx6ppStA/dVTxxee7ACyKuqvq 8s61Bk6KsT2j/NjTU6m6yTP2XSqrIKnc6v7ZZgYRLUEpAC6A2h0R+TWtwxYrx1iHgKoNfIy8Z2A /yoUqljqZNDkjZF5IZFfymYnDT1tASF35uoLaxY/sppNoIhYyUiPnrp9bGxoNkB7GvqfWQWpv8A == X-Google-Smtp-Source: AGHT+IH5gscom5kjKhpxKYv3RRDQ+4P38UJM86TsD2SPjV8wI/TEL27eV36LYy3LKwvxz/cSOFVMww== X-Received: by 2002:a05:6000:40cc:b0:3db:58bb:7e12 with SMTP id ffacd0b85a97d-3e765797940mr5911450f8f.23.1757754706054; Sat, 13 Sep 2025 02:11:46 -0700 (PDT) Received: from laurenz.albe-K4N0CV00F97414D ([2001:871:255:30a:2403:9037:2d08:c2c]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3e7607e1232sm9646590f8f.56.2025.09.13.02.11.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Sep 2025 02:11:44 -0700 (PDT) Message-ID: Subject: Re: Latest patches break one of our unit-test, related to RLS From: Laurenz Albe To: Tom Lane Cc: Dominique Devienne , pgsql-general@postgresql.org Date: Sat, 13 Sep 2025 11:11:42 +0200 In-Reply-To: <2683918.1757728397@sss.pgh.pa.us> References: <77a63548783dd4007ee479a4c5ed300629aaa776.camel@cybertec.at> <2109533.1757686026@sss.pgh.pa.us> <2c58dcdba889f5b28df5ad9d21b5ea2d0ac63a9a.camel@cybertec.at> <2673230.1757722323@sss.pgh.pa.us> <501ee89ad54184804d14b416781dafd340c789d3.camel@cybertec.at> <2683918.1757728397@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="=-RxXc2Mc2vDHgyYopA1s2" User-Agent: Evolution 3.56.2 (3.56.2-2.fc42) MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-RxXc2Mc2vDHgyYopA1s2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2025-09-12 at 21:53 -0400, Tom Lane wrote: >=20 > Ah, got it. But this logic definitely deserves more comments. > What do you think of something like >=20 > if (pchar =3D=3D ']' && charclass_start > 2) > { > /* found the real end of a bracket pair */ > charclass_depth--; > /* past start of outer brackets, so keep charclass_start = > 2 */ > } > else if (pchar =3D=3D '[') > { > /* start of a nested bracket pair */ > charclass_depth++; > /* leading ^ or ] in this context is not special */ > charclass_start =3D 3; > } > else if (pchar =3D=3D '^') > { > /* okay to increment charclass_start even if already > 1 = */ > charclass_start++; > } > else > { > /* otherwise (including case of leading ']') */ > charclass_start =3D 3; /* definitely past the start */ > } >=20 > > Perhaps s/charclass_depth/bracket_depth/ would be a good idea. >=20 > Wouldn't object to that. Maybe we can think of a better name for > "charclass_start" too --- that sounds like a boolean condition. > The best I'm coming up with right now is "charclass_count", but > that's not that helpful. I came up with the attached patch set. 0001 is the actual bug fix: in addition to my previous patch, I fixed two more cases in which a closing bracket might not be recognized as ending the character class (one is from your patch above). I think that these could not lead to bad query results, but I am not certain. 0002 is the cosmetic improvement: I renamed "charclass_depth" to "bracket_d= epth" and "bracket_depth" to "bracket_pos", rewrote the "else if" cascade as you suggested above and put some love into additional comments. I used two separate patches for clarity and ease of review, but both should get backpatched. Yours, Laurenz Albe --=-RxXc2Mc2vDHgyYopA1s2 Content-Disposition: attachment; filename*0=v2-0001-Amend-recent-fix-for-SIMILAR-TO-regex-conversion.patc; filename*1=h Content-Type: text/x-patch; name="v2-0001-Amend-recent-fix-for-SIMILAR-TO-regex-conversion.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkZDM3YWNiMzBiNjM3YzMwNmYyYWU3ZjA0MWMxNjRlODkyZTkyYTIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYXVyZW56IEFsYmUgPGxhdXJlbnouYWxiZUBjeWJlcnRlYy5h dD4KRGF0ZTogU2F0LCAxMyBTZXAgMjAyNSAwOTo1OTo0NyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIgMS8yXSBBbWVuZCByZWNlbnQgZml4IGZvciBTSU1JTEFSIFRPIHJlZ2V4IGNvbnZlcnNpb24K CkNvbW1pdCBlM2ZmYzNlOTFkIGZpeGVkIHRoZSB0cmFuc2xhdGlvbiBvZiBjaGFyYWN0ZXIgY2xh c3NlcyBpbgpTSU1JTEFSIFRPIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBVbmZvcnR1bmF0ZWx5IHRo ZSBmaXggYnJva2UgYSBjb3JuZXIKY2FzZTogaWYgdGhlcmUgaXMgYW4gZXNjYXBlIGNoYXJhY3Rl ciByaWdodCBhZnRlciB0aGUgb3BlbmluZyBicmFja2V0LAooZm9yIGV4YW1wbGUgaW4gIltccV0i KSBhIGNsb3NpbmcgYnJhY2tldCByaWdodCBhZnRlciB0aGUgZXNjYXBlCnNlcXVlbmNlIHdvdWxk IG5vdCBiZSBzZWVuIGFzIGNsb3NpbmcgdGhlIGNoYXJhY3RlciBjbGFzcy4KClRoZXJlIHdlcmUg dHdvIG1vcmUgb3ZlcnNpZ2h0czogYSBiYWNrc2xhc2ggb3IgYSBuZXN0ZWQgb3BlbmluZyBicmFj a2V0CnJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjaGFyYWN0ZXIgY2xhc3Mgc2hvdWxkIHJl bW92ZSB0aGUgc3BlY2lhbAptZWFuaW5nIGZyb20gYW55IGZvbGxvd2luZyBjYXJldCBvciBjbG9z aW5nIGJyYWNrZXQuCgpBdXRob3I6IExhdXJlbnogQWxiZSA8bGF1cmVuei5hbGJlQGN5YmVydGVj LmF0PgpSZXBvcnRlZC1CeTogRG9taW5pcXVlIERldmllbm5lIDxkZGV2aWVubmVAZ21haWwuY29t PgpSZXBvcnRlZC1CeTogU3RlcGhhbiBTcHJpbmdsIDxzcHJpbmdsLXBzcWxAYmZ3LW9ubGluZS5k ZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS80MWEzNzEzNy1mOGJiLThmYzUtMjk0 OC0zMWI1MjhmMTY2ZGMlNDBiZnctb25saW5lLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vQ0FGQ1JoLThOd0pkMGpxNlAlM0RSM3FoSHlxVTdodzBCVG9yM1cwU3ZVY2lpMjRldCUy QnpBdyU0MG1haWwuZ21haWwuY29tCkJhY2twYXRjaC10aHJvdWdoOiAxMwotLS0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yZWdleHAuYyAgICAgICAgfCAxNCArKysrKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zdHJpbmdzLm91dCB8ICA5ICsrKysrKysrKwogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3RyaW5ncy5zcWwgICAgICB8ICAzICsrKwogMyBmaWxlcyBjaGFuZ2VkLCAy NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4 cC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4cC5jCmluZGV4IDZlMjg2NGNiYmRhLi5i NjJkNjdhNWE5OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4cC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdleHAuYwpAQCAtOTQ4LDYgKzk0OCwxMiBAQCBz aW1pbGFyX2VzY2FwZV9pbnRlcm5hbCh0ZXh0ICpwYXRfdGV4dCwgdGV4dCAqZXNjX3RleHQpCiAJ CQkJICovCiAJCQkJKnIrKyA9ICdcXCc7CiAJCQkJKnIrKyA9IHBjaGFyOworCQkJCS8qCisJCQkJ ICogSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgY2hhcmFjdGVyIGluIGEgY2hhcmFjdGVyIGNs YXNzLAorCQkJCSAqIHdlIGFyZSBubyBsb25nZXIgYXQgdGhlIGJlZ2lubmluZy4KKwkJCQkgKi8K KwkJCQlpZiAoY2hhcmNsYXNzX2RlcHRoID4gMCkKKwkJCQkJY2hhcmNsYXNzX3N0YXJ0ID0gMzsK IAkJCX0KIAkJCWFmdGVyZXNjYXBlID0gZmFsc2U7CiAJCX0KQEAgLTk1OSw3ICs5NjUsMTEgQEAg c2ltaWxhcl9lc2NhcGVfaW50ZXJuYWwodGV4dCAqcGF0X3RleHQsIHRleHQgKmVzY190ZXh0KQog CQllbHNlIGlmIChjaGFyY2xhc3NfZGVwdGggPiAwKQogCQl7CiAJCQlpZiAocGNoYXIgPT0gJ1xc JykKKwkJCXsKIAkJCQkqcisrID0gJ1xcJzsKKwkJCQkvKiB3ZSBhcmUgbm8gbG9uZ2VyIGF0IHRo ZSBiZWdpbm5pbmcgb2YgYSBjaGFyYWN0ZXIgY2xhc3MgKi8KKwkJCQljaGFyY2xhc3Nfc3RhcnQg PSAzOworCQkJfQogCQkJKnIrKyA9IHBjaGFyOwogCiAJCQkvKgpAQCAtOTcxLDcgKzk4MSwxMSBA QCBzaW1pbGFyX2VzY2FwZV9pbnRlcm5hbCh0ZXh0ICpwYXRfdGV4dCwgdGV4dCAqZXNjX3RleHQp CiAJCQlpZiAocGNoYXIgPT0gJ10nICYmIGNoYXJjbGFzc19zdGFydCA+IDIpCiAJCQkJY2hhcmNs YXNzX2RlcHRoLS07CiAJCQllbHNlIGlmIChwY2hhciA9PSAnWycpCisJCQl7CiAJCQkJY2hhcmNs YXNzX2RlcHRoKys7CisJCQkJLyogd2UgYXJlIG5vIGxvbmdlciBhdCB0aGUgYmVnaW5uaW5nIG9m IGEgY2hhcmFjdGVyIGNsYXNzICovCisJCQkJY2hhcmNsYXNzX3N0YXJ0ID0gMzsKKwkJCX0KIAog CQkJLyoKIAkJCSAqIElmIHRoZXJlIGlzIGEgY2FyZXQgcmlnaHQgYWZ0ZXIgdGhlIG9wZW5pbmcg YnJhY2tldCwgaXQgbmVnYXRlcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdHJpbmdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RyaW5ncy5vdXQKaW5k ZXggYmEzMDJkYTUxZTcuLjJkNmNiMDJhZDYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N0cmluZ3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Ry aW5ncy5vdXQKQEAgLTY5Myw2ICs2OTMsMTUgQEAgRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg KiBGUk9NIFRFWFRfVEJMIFdIRVJFIGYxIFNJTUlMQVIgVE8gJ1teXl1eJzsKICAgIEZpbHRlcjog KGYxIH4gJ14oPzpbXl5dXF4pJCc6OnRleHQpCiAoMiByb3dzKQogCistLSBDbG9zaW5nIHNxdWFy ZSBicmFja2V0IGFmdGVyIGFuIGVzY2FwZSBzZXF1ZW5jZSBhdCB0aGUgYmVnaW5uaW5nIG9mCist LSBhIGNoYXJhY3RlciBjbG9zZXMgdGhlIGNoYXJhY3RlciBjbGFzcworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIFRFWFRfVEJMIFdIRVJFIGYxIFNJTUlMQVIgVE8gJ1t8YV0lJyBF U0NBUEUgJ3wnOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZXh0X3Ri bAorICAgRmlsdGVyOiAoZjEgfiAnXig/OltcYV0uKikkJzo6dGV4dCkKKygyIHJvd3MpCisKIC0t IFRlc3QgYmFja3NsYXNoIGVzY2FwZXMgaW4gcmVnZXhwX3JlcGxhY2UncyByZXBsYWNlbWVudCBz dHJpbmcKIFNFTEVDVCByZWdleHBfcmVwbGFjZSgnMTExMjIyMzMzMycsIEUnKFxcZHszfSkoXFxk ezN9KShcXGR7NH0pJywgRScoXFwxKSBcXDItXFwzJyk7CiAgcmVnZXhwX3JlcGxhY2UgCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdHJpbmdzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3N0cmluZ3Muc3FsCmluZGV4IGI5NDAwNGNjMDhjLi41ZWQ0MjFkNjIwNSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RyaW5ncy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc3RyaW5ncy5zcWwKQEAgLTIxOCw2ICsyMTgsOSBAQCBFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAqIEZST00gVEVYVF9UQkwgV0hFUkUgZjEgU0lNSUxBUiBUTyAnW10lXVteXSVd W14lXSUnOwogLS0gQ2xvc2luZyBzcXVhcmUgYnJhY2tldCBlZmZlY3RpdmUgYWZ0ZXIgdHdvIGNh cmV0cyBhdCB0aGUgYmVnaW5uaW5nCiAtLSBvZiBjaGFyYWN0ZXIgY2xhc3MuCiBFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAqIEZST00gVEVYVF9UQkwgV0hFUkUgZjEgU0lNSUxBUiBUTyAnW15e XV4nOworLS0gQ2xvc2luZyBzcXVhcmUgYnJhY2tldCBhZnRlciBhbiBlc2NhcGUgc2VxdWVuY2Ug YXQgdGhlIGJlZ2lubmluZyBvZgorLS0gYSBjaGFyYWN0ZXIgY2xvc2VzIHRoZSBjaGFyYWN0ZXIg Y2xhc3MKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBURVhUX1RCTCBXSEVSRSBm MSBTSU1JTEFSIFRPICdbfGFdJScgRVNDQVBFICd8JzsKIAogLS0gVGVzdCBiYWNrc2xhc2ggZXNj YXBlcyBpbiByZWdleHBfcmVwbGFjZSdzIHJlcGxhY2VtZW50IHN0cmluZwogU0VMRUNUIHJlZ2V4 cF9yZXBsYWNlKCcxMTEyMjIzMzMzJywgRScoXFxkezN9KShcXGR7M30pKFxcZHs0fSknLCBFJyhc XDEpIFxcMi1cXDMnKTsKLS0gCjIuNTEuMAoK --=-RxXc2Mc2vDHgyYopA1s2 Content-Disposition: attachment; filename*0=v2-0002-Cosmetic-improvements-for-SIMILAR-TO-regex-conver.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="v2-0002-Cosmetic-improvements-for-SIMILAR-TO-regex-conver.patch"; charset="UTF-8" RnJvbSAzYzE4NDE4Y2NjM2E4ZmUyZTAyNzZkMjI5ZmY1MWQzZjI5ZTc2NmE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYXVyZW56IEFsYmUgPGxhdXJlbnouYWxiZUBjeWJlcnRlYy5h dD4KRGF0ZTogU2F0LCAxMyBTZXAgMjAyNSAxMDo1MTozNSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIgMi8yXSBDb3NtZXRpYyBpbXByb3ZlbWVudHMgZm9yIFNJTUlMQVIgVE8gcmVnZXggY29udmVy c2lvbgoKVGhlIGJ1ZyBpbnRyb2R1Y2VkIGluIGUzZmZjM2U5MWQgaW5kaWNhdGVzIHRoYXQgdGhl IGNvZGUgaW4gdGhhdCBhcmVhCnNob3VsZCBiZSBtb3JlIHJlYWRhYmxlLiAgVGhpcyBwYXRjaCBy ZW5hbWVzIHRoZSB2YXJpYWJsZXMKImNoYXJjbGFzc19kZXB0aCIgYW5kICJjaGFyY2xhc3Nfc3Rh cnQiIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwsCmFkZHMgYW5kIGltcHJvdmVzIGNvbW1l bnRzIGFuZCByZXdyaXRlcyBhbiAiaWYiIGNhc2NhZGUgdG8gYmUgbW9yZQpjb25zaXN0ZW50LgoK VGhpcyBwYXRjaCBpcyBwdXJlbHkgY29zbWV0aWMgYW5kIHNob3VsZCBub3QgY2hhbmdlIHRoZSBs b2dpYy4KCkF1dGhvcjogTGF1cmVueiBBbGJlIDxsYXVyZW56LmFsYmVAY3liZXJ0ZWMuYXQ+CkRp c2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZmxhdC8yNjczMjMwLjE3NTc3MjIzMjMlNDBz c3MucGdoLnBhLnVzIzgzMWZkNTQ1YzBmYWVlYmJmYjA4NzE0ZWI0Y2MzMDdkCkJhY2twYXRjaC10 aHJvdWdoOiAxMwotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdleHAuYyB8IDc2ICsrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRp b25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvcmVnZXhwLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVnZXhwLmMKaW5kZXggYjYyZDY3 YTVhOTguLmRjZGIyZTUzZjY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVn ZXhwLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4cC5jCkBAIC03NzQsMTAgKzc3 NCw4IEBAIHNpbWlsYXJfZXNjYXBlX2ludGVybmFsKHRleHQgKnBhdF90ZXh0LCB0ZXh0ICplc2Nf dGV4dCkKIAkJCQllbGVuOwogCWJvb2wJCWFmdGVyZXNjYXBlID0gZmFsc2U7CiAJaW50CQkJbnF1 b3RlcyA9IDA7Ci0JaW50CQkJY2hhcmNsYXNzX2RlcHRoID0gMDsJLyogTmVzdGluZyBsZXZlbCBv ZiBjaGFyYWN0ZXIgY2xhc3NlcywKLQkJCQkJCQkJCQkgKiBlbmNvbXBhc3NlZCBieSBzcXVhcmUg YnJhY2tldHMgKi8KLQlpbnQJCQljaGFyY2xhc3Nfc3RhcnQgPSAwOwkvKiBTdGF0ZSBvZiB0aGUg Y2hhcmFjdGVyIGNsYXNzIHN0YXJ0LAotCQkJCQkJCQkJCSAqIGZvciBjYXJldHMgKi8KKwlpbnQJ CQlicmFja2V0X2RlcHRoID0gMDsJLyogc3F1YXJlIGJyYWNrZXQgbmVzdGluZyBsZXZlbCAqLwor CWludAkJCWNoYXJjbGFzc19wb3MgPSAwOwkvKiBwb3NpdGlvbiBpbnNpZGUgYSBjaGFyYWN0ZXIg Y2xhc3MgKi8KIAogCXAgPSBWQVJEQVRBX0FOWShwYXRfdGV4dCk7CiAJcGxlbiA9IFZBUlNJWkVf QU5ZX0VYSERSKHBhdF90ZXh0KTsKQEAgLTkwNyw3ICs5MDUsNyBAQCBzaW1pbGFyX2VzY2FwZV9p bnRlcm5hbCh0ZXh0ICpwYXRfdGV4dCwgdGV4dCAqZXNjX3RleHQpCiAJCS8qIGZhc3QgcGF0aCAq LwogCQlpZiAoYWZ0ZXJlc2NhcGUpCiAJCXsKLQkJCWlmIChwY2hhciA9PSAnIicgJiYgY2hhcmNs YXNzX2RlcHRoIDwgMSkJLyogZXNjYXBlLWRvdWJsZS1xdW90ZT8gKi8KKwkJCWlmIChwY2hhciA9 PSAnIicgJiYgYnJhY2tldF9kZXB0aCA8IDEpCS8qIGVzY2FwZS1kb3VibGUtcXVvdGU/ICovCiAJ CQl7CiAJCQkJLyogZW1pdCBhcHByb3ByaWF0ZSBwYXJ0IHNlcGFyYXRvciwgcGVyIG5vdGVzIGFi b3ZlICovCiAJCQkJaWYgKG5xdW90ZXMgPT0gMCkKQEAgLTk0OCwxMiArOTQ2LDEzIEBAIHNpbWls YXJfZXNjYXBlX2ludGVybmFsKHRleHQgKnBhdF90ZXh0LCB0ZXh0ICplc2NfdGV4dCkKIAkJCQkg Ki8KIAkJCQkqcisrID0gJ1xcJzsKIAkJCQkqcisrID0gcGNoYXI7CisKIAkJCQkvKgogCQkJCSAq IElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkIGNoYXJhY3RlciBpbiBhIGNoYXJhY3RlciBjbGFz cywKIAkJCQkgKiB3ZSBhcmUgbm8gbG9uZ2VyIGF0IHRoZSBiZWdpbm5pbmcuCiAJCQkJICovCi0J CQkJaWYgKGNoYXJjbGFzc19kZXB0aCA+IDApCi0JCQkJCWNoYXJjbGFzc19zdGFydCA9IDM7CisJ CQkJaWYgKGJyYWNrZXRfZGVwdGggPiAwKQorCQkJCQljaGFyY2xhc3NfcG9zID0gMzsKIAkJCX0K IAkJCWFmdGVyZXNjYXBlID0gZmFsc2U7CiAJCX0KQEAgLTk2Miw0OSArOTYxLDY0IEBAIHNpbWls YXJfZXNjYXBlX2ludGVybmFsKHRleHQgKnBhdF90ZXh0LCB0ZXh0ICplc2NfdGV4dCkKIAkJCS8q IFNRTCBlc2NhcGUgY2hhcmFjdGVyOyBkbyBub3Qgc2VuZCB0byBvdXRwdXQgKi8KIAkJCWFmdGVy ZXNjYXBlID0gdHJ1ZTsKIAkJfQotCQllbHNlIGlmIChjaGFyY2xhc3NfZGVwdGggPiAwKQorCQll bHNlIGlmIChicmFja2V0X2RlcHRoID4gMCkKIAkJewogCQkJaWYgKHBjaGFyID09ICdcXCcpCiAJ CQl7CisJCQkJLyogaWYgYmFja3NsYXNoIGlzIG5vIFNJTUlMQVIgVE8gZXNjYXBlIGNoYXJhY3Rl ciwgZG91YmxlIGl0ICovCiAJCQkJKnIrKyA9ICdcXCc7CiAJCQkJLyogd2UgYXJlIG5vIGxvbmdl ciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY2hhcmFjdGVyIGNsYXNzICovCi0JCQkJY2hhcmNsYXNz X3N0YXJ0ID0gMzsKKwkJCQljaGFyY2xhc3NfcG9zID0gMzsKIAkJCX0KIAkJCSpyKysgPSBwY2hh cjsKIAotCQkJLyoKLQkJCSAqIElnbm9yZSBhIGNsb3NpbmcgYnJhY2tldCBhdCB0aGUgc3RhcnQg b2YgYSBjaGFyYWN0ZXIgY2xhc3MuCi0JCQkgKiBTdWNoIGEgYnJhY2tldCBpcyB0YWtlbiBsaXRl cmFsbHkgcmF0aGVyIHRoYW4gY2xvc2luZyB0aGUKLQkJCSAqIGNsYXNzLiAgImNoYXJjbGFzc19z dGFydCIgaXMgMSByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKLQkJCSAqIGNsYXNzIGFuZCAy IGFmdGVyIGFuIGluaXRpYWwgY2FyZXQuCisJCQkvKi0tLS0tLS0tLS0KKwkJCSAqICJjaGFyY2xh c3NfcG9zIiBkZXNjcmliZXMgd2hlcmUgaW4gYSBjaGFyYWN0ZXIgY2xhc3Mgd2UgYXJlOgorCQkJ ICogICAwOiBub3QgaW4gYSBjaGFyYWN0ZXIgY2xhc3MKKwkJCSAqICAgMTogcmlnaHQgYWZ0ZXIg dGhlIG9wZW5pbmcgJ1snIChhIGZvbGxvd2luZyAnXicgd2lsbCBuZWdhdGUKKwkJCSAqICAgICAg dGhlIGNsYXNzLCBhbmQgJ10nIGlzIGEgbm9ybWFsIGNoYXJhY3RlcikKKwkJCSAqICAgMjogcmln aHQgYWZ0ZXIgYSAnXicgYWZ0ZXIgdGhlIG9wZW5pbmcgJ1snICgnXScgaXMgYSBub3JtYWwKKwkJ CSAqICAgICAgY2hhcmFjdGVyKQorCQkJICogICAzIG9yIG1vcmU6IGZ1cnRoZXIgaW5zaWRlIHRo ZSBjaGFyYWN0ZXIgY2xhc3MKIAkJCSAqLwotCQkJaWYgKHBjaGFyID09ICddJyAmJiBjaGFyY2xh c3Nfc3RhcnQgPiAyKQotCQkJCWNoYXJjbGFzc19kZXB0aC0tOworCQkJaWYgKHBjaGFyID09ICdd JyAmJiBjaGFyY2xhc3NfcG9zID4gMikKKwkJCXsKKwkJCQkvKiBmb3VuZCB0aGUgcmVhbCBlbmQg b2YgYSBicmFja2V0IHBhaXIgKi8KKwkJCQlicmFja2V0X2RlcHRoLS07CisJCQkJLyogZG9uJ3Qg cmVzZXQgY2hhcmNsYXNzX3BvcywgdGhpcyBtYXkgYmUgYW4gaW5uZXIgYnJhY2tldCAqLworCQkJ fQogCQkJZWxzZSBpZiAocGNoYXIgPT0gJ1snKQogCQkJewotCQkJCWNoYXJjbGFzc19kZXB0aCsr OworCQkJCS8qIHN0YXJ0IG9mIGEgbmVzdGVkIGJyYWNrZXQgcGFpciAqLworCQkJCWJyYWNrZXRf ZGVwdGgrKzsKIAkJCQkvKiB3ZSBhcmUgbm8gbG9uZ2VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBj aGFyYWN0ZXIgY2xhc3MgKi8KLQkJCQljaGFyY2xhc3Nfc3RhcnQgPSAzOworCQkJCWNoYXJjbGFz c19wb3MgPSAzOworCQkJfQorCQkJZWxzZSBpZiAocGNoYXIgPT0gJ14nKQorCQkJeworCQkJCS8q CisJCQkJICogQSBjYXJldCByaWdodCBhZnRlciB0aGUgb3BlbmluZyBicmFja2V0IG5lZ2F0ZXMg dGhlCisJCQkJICogY2hhcmFjdGVyIGNsYXNzLiAgSW4gdGhhdCBjYXNlLCB0aGUgZm9sbG93aW5n IHdpbGwKKwkJCQkgKiBpbmNyZW1lbnQgY2hhcmNsYXNzX3BvcyBmcm9tIDEgdG8gMiwgc28gdGhh dCBhIGZvbGxvd2luZworCQkJCSAqICddJyBpcyBzdGlsbCBhIG5vcm1hbCBjaGFyYWN0ZXIgYW5k IGRvZXMgbm90IGNsb3NlIHRoZQorCQkJCSAqIGNoYXJhY3RlciBjbGFzcy4gSWYgd2UgYXJlIGZ1 cnRoZXIgaW5zaWRlIGEgY2hhcmFjdGVyCisJCQkJICogY2xhc3MsIGNoYXJjbGFzc19wb3MgbWln aHQgZ2V0IGluY3JlbWVudGVkIHBhc3QgMywgd2hpY2ggaXMKKwkJCQkgKiBmaW5lLgorCQkJCSAq LworCQkJCWNoYXJjbGFzc19wb3MrKzsKIAkJCX0KLQotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGlz IGEgY2FyZXQgcmlnaHQgYWZ0ZXIgdGhlIG9wZW5pbmcgYnJhY2tldCwgaXQgbmVnYXRlcwotCQkJ ICogdGhlIGNoYXJhY3RlciBjbGFzcywgYnV0IGEgZm9sbG93aW5nIGNsb3NpbmcgYnJhY2tldCBz aG91bGQKLQkJCSAqIHN0aWxsIGJlIHRyZWF0ZWQgYXMgYSBub3JtYWwgY2hhcmFjdGVyLiAgVGhh dCBob2xkcyBvbmx5IGZvcgotCQkJICogdGhlIGZpcnN0IGNhcmV0LCBzbyBvbmx5IHRoZSB2YWx1 ZXMgMSBhbmQgMiBtZWFuIHRoYXQgY2xvc2luZwotCQkJICogYnJhY2tldHMgc2hvdWxkIGJlIHRh a2VuIGxpdGVyYWxseS4KLQkJCSAqLwotCQkJaWYgKHBjaGFyID09ICdeJykKLQkJCQljaGFyY2xh c3Nfc3RhcnQrKzsKIAkJCWVsc2UKLQkJCQljaGFyY2xhc3Nfc3RhcnQgPSAzOwkvKiBkZWZpbml0 ZWx5IHBhc3QgdGhlIHN0YXJ0ICovCisJCQl7CisJCQkJLyogYSBsZWFkaW5nICddJyBvciBhbnl0 aGluZyBlbHNlIHRha2UgdXMgcGFzdCB0aGUgYmVnaW5uaW5nICovCisJCQkJY2hhcmNsYXNzX3Bv cyA9IDM7CisJCQl9CiAJCX0KIAkJZWxzZSBpZiAocGNoYXIgPT0gJ1snKQogCQl7CiAJCQkvKiBz dGFydCBvZiBhIGNoYXJhY3RlciBjbGFzcyAqLwogCQkJKnIrKyA9IHBjaGFyOwotCQkJY2hhcmNs YXNzX2RlcHRoKys7Ci0JCQljaGFyY2xhc3Nfc3RhcnQgPSAxOworCQkJYnJhY2tldF9kZXB0aCA9 IDE7CisJCQljaGFyY2xhc3NfcG9zID0gMTsKIAkJfQogCQllbHNlIGlmIChwY2hhciA9PSAnJScp CiAJCXsKLS0gCjIuNTEuMAoK --=-RxXc2Mc2vDHgyYopA1s2--