[3.12] gh-152674: Avoid quadratic behavior in xml.etree.ElementPath index predicates (GH-152676) (#154815)

Yhg1s <[email protected]> Tue, 04 Aug 2026 05:31:52 -0400 (EDT)
Newsgroups gmane.comp.python.cvs
Message-ID <[email protected]>
aHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL2NvbW1pdC85NjUxMGEzNzU4ZjRhMDc1
ZjQzMjIzYWZkZWUzYjZlZTFhN2E3ZjAyDQpjb21taXQ6IDk2NTEwYTM3NThmNGEwNzVmNDMyMjNh
ZmRlZTNiNmVlMWE3YTdmMDINCmJyYW5jaDogMy4xMg0KYXV0aG9yOiBNaXNzIElzbGluZ3RvbiAo
Ym90KSA8MzE0ODg5MDkrbWlzcy1pc2xpbmd0b25AdXNlcnMubm9yZXBseS5naXRodWIuY29tPg0K
Y29tbWl0dGVyOiBZaGcxcyA8dGhvbWFzQHB5dGhvbi5vcmc+DQpkYXRlOiAyMDI2LTA4LTA0VDEx
OjMwOjQ0KzAyOjAwDQpzdW1tYXJ5Og0KDQpbMy4xMl0gZ2gtMTUyNjc0OiBBdm9pZCBxdWFkcmF0
aWMgYmVoYXZpb3IgaW4geG1sLmV0cmVlLkVsZW1lbnRQYXRoIGluZGV4IHByZWRpY2F0ZXMgKEdI
LTE1MjY3NikgKCMxNTQ4MTUpDQoNCmdoLTE1MjY3NDogQXZvaWQgcXVhZHJhdGljIGJlaGF2aW9y
IGluIHhtbC5ldHJlZS5FbGVtZW50UGF0aCBpbmRleCBwcmVkaWNhdGVzIChHSC0xNTI2NzYpDQoN
CihjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDJmZmFiMDgzNzgyOTY4YTRkNzMyNzM4ZjRmMWRm
ZjZiYmQ2OWQyYjApDQoNCkNvLWF1dGhvcmVkLWJ5OiBQZXRyIFZpa3RvcmluIDxlbmN1a291QGdt
YWlsLmNvbT4NCkNvLWF1dGhvcmVkLWJ5OiBBbGV4aXMgPGFsZXhpcy5jaGFsbGFuZGVAdHJhaWxv
ZmJpdHMuY29tPg0KQ28tYXV0aG9yZWQtYnk6IELDqW7DqWRpa3QgVHJhbiA8MTA3OTY2MDArcGlj
bml4ekB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+DQoNCmZpbGVzOg0KQSBNaXNjL05FV1MuZC9u
ZXh0L1NlY3VyaXR5LzIwMjYtMDYtMzAtMTMtMjQtMTMuZ2gtaXNzdWUtMTUyNjc0Li0yUVZvTC5y
c3QNCk0gTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkNCk0gTGliL3htbC9ldHJlZS9FbGVtZW50
UGF0aC5weQ0KDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkgYi9MaWIv
dGVzdC90ZXN0X3htbF9ldHJlZS5weQ0KaW5kZXggZjFiNDIwZWQ3OTQ0YTkzLi4wZjcwNmMyZWVj
Zjc3NGEgMTAwNjQ0DQotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQ0KKysrIGIvTGli
L3Rlc3QvdGVzdF94bWxfZXRyZWUucHkNCkBAIC0zMDg4LDYgKzMwODgsMzcgQEAgZGVmIHRlc3Rf
ZmluZF94cGF0aChzZWxmKToNCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4
RXJyb3IsICdYUGF0aCcsIGUuZmluZCwgJy4vdGFnW2xhc3QoKS0wXScpDQogICAgICAgICBzZWxm
LmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1ts
YXN0KCkrMV0nKQ0KIA0KKyAgICBkZWYgdGVzdF9maW5kX3hwYXRoX2luZGV4X25vX3F1YWRyYXRp
Y19jb21wbGV4aXR5KHNlbGYpOg0KKyAgICAgICAgY2xhc3MgQ291bnRpbmdFbGVtZW50KEVULkVs
ZW1lbnQpOg0KKyAgICAgICAgICAgIGZpbmRhbGxfY2FsbHMgPSAwDQorICAgICAgICAgICAgZGVm
IGZpbmRhbGwoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToNCisgICAgICAgICAgICAgICAgdHlwZShz
ZWxmKS5maW5kYWxsX2NhbGxzICs9IDENCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCku
ZmluZGFsbCgqYXJncywgKiprd2FyZ3MpDQorDQorICAgICAgICBkZWYgd29yayhuLCBwYXR0ZXJu
KToNCisgICAgICAgICAgICByb290ID0gQ291bnRpbmdFbGVtZW50KCJyb290IikNCisgICAgICAg
ICAgICBmb3IgXyBpbiByYW5nZShuKToNCisgICAgICAgICAgICAgICAgRVQuU3ViRWxlbWVudChy
b290LCAiYSIpDQorICAgICAgICAgICAgQ291bnRpbmdFbGVtZW50LmZpbmRhbGxfY2FsbHMgPSAw
DQorICAgICAgICAgICAgcm9vdC5maW5kYWxsKHBhdHRlcm4pDQorICAgICAgICAgICAgcmV0dXJu
IENvdW50aW5nRWxlbWVudC5maW5kYWxsX2NhbGxzDQorDQorICAgICAgICBmb3IgcGF0dGVybiBp
biBbIi4vL2FbMV0iLCAiLi8vYVtsYXN0KCldIl06DQorICAgICAgICAgICAgdzEgPSB3b3JrKDEw
MjQsIHBhdHRlcm4pDQorICAgICAgICAgICAgdzIgPSB3b3JrKDIwNDgsIHBhdHRlcm4pDQorICAg
ICAgICAgICAgdzMgPSB3b3JrKDQwOTYsIHBhdHRlcm4pDQorDQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRHcmVhdGVyKHcxLCAwKQ0KKyAgICAgICAgICAgIHIxID0gdzIgLyB3MQ0KKyAgICAgICAg
ICAgIHIyID0gdzMgLyB3Mg0KKyAgICAgICAgICAgICMgRG91YmxpbmcgTiBtdXN0IG5vdCB+ZG91
YmxlIHRoZSBwYXJlbnQuZmluZGFsbCBjYWxscy4NCisgICAgICAgICAgICAjIExpbmVhci1pbi1O
IGNhbGwgY291bnRzIGluZGljYXRlIHRoZSBjYWNoZSBpcyBtaXNzaW5nLg0KKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0TGVzcygNCisgICAgICAgICAgICAgICAgbWF4KHIxLCByMiksIDEuNSwNCisg
ICAgICAgICAgICAgICAgbXNnPWYiUG9zc2libGUgcXVhZHJhdGljIGJlaGF2aW9yIG9uIHtwYXR0
ZXJuIXJ9OiAiDQorICAgICAgICAgICAgICAgICAgICBmImNhbGxzPXt3MSwgdzIsIHczfSByYXRp
b3M9e3IxLCByMn0iLA0KKyAgICAgICAgICAgICkNCisNCiAgICAgZGVmIHRlc3RfZmluZGFsbChz
ZWxmKToNCiAgICAgICAgIGUgPSBFVC5YTUwoU0FNUExFX1hNTCkNCiAgICAgICAgIGVbMl0gPSBF
VC5YTUwoU0FNUExFX1NFQ1RJT04pDQpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50
UGF0aC5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkNCmluZGV4IGRjNmJkMjhjMDMx
MzdkZS4uZGUxZmQyMDNmZjZhMGY2IDEwMDY0NA0KLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50
UGF0aC5weQ0KKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQ0KQEAgLTMyNCwxNSAr
MzI0LDIyIEBAIGRlZiBzZWxlY3RfbmVnYXRlZChjb250ZXh0LCByZXN1bHQpOg0KICAgICAgICAg
ICAgICAgICBpbmRleCA9IC0xDQogICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6
DQogICAgICAgICAgICAgcGFyZW50X21hcCA9IGdldF9wYXJlbnRfbWFwKGNvbnRleHQpDQorICAg
ICAgICAgICAgY2FjaGUgPSB7fQ0KICAgICAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoNCiAg
ICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50
X21hcFtlbGVtXQ0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6DQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQ0KKyAgICAgICAgICAgICAgICBrZXkgPSAocGFyZW50LCBlbGVt
LnRhZykNCisgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBjYWNoZToNCiAgICAgICAgICAg
ICAgICAgICAgICMgRklYTUU6IHdoYXQgaWYgdGhlIHNlbGVjdG9yIGlzICIqIiA/DQotICAgICAg
ICAgICAgICAgICAgICBlbGVtcyA9IGxpc3QocGFyZW50LmZpbmRhbGwoZWxlbS50YWcpKQ0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgZWxlbXNbaW5kZXhdIGlzIGVsZW06DQotICAgICAgICAgICAg
ICAgICAgICAgICAgeWllbGQgZWxlbQ0KLSAgICAgICAgICAgICAgICBleGNlcHQgKEluZGV4RXJy
b3IsIEtleUVycm9yKToNCi0gICAgICAgICAgICAgICAgICAgIHBhc3MNCisgICAgICAgICAgICAg
ICAgICAgIGVsZW1zID0gcGFyZW50LmZpbmRhbGwoZWxlbS50YWcpDQorICAgICAgICAgICAgICAg
ICAgICB0cnk6DQorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IGVsZW1zW2lu
ZGV4XQ0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6DQorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IE5vbmUNCisgICAgICAgICAgICAgICAgaWYgY2Fj
aGVba2V5XSBpcyBlbGVtOg0KKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQ0KICAgICAg
ICAgcmV0dXJuIHNlbGVjdA0KICAgICByYWlzZSBTeW50YXhFcnJvcigiaW52YWxpZCBwcmVkaWNh
dGUiKQ0KIA0KZGlmZiAtLWdpdCBhL01pc2MvTkVXUy5kL25leHQvU2VjdXJpdHkvMjAyNi0wNi0z
MC0xMy0yNC0xMy5naC1pc3N1ZS0xNTI2NzQuLTJRVm9MLnJzdCBiL01pc2MvTkVXUy5kL25leHQv
U2VjdXJpdHkvMjAyNi0wNi0zMC0xMy0yNC0xMy5naC1pc3N1ZS0xNTI2NzQuLTJRVm9MLnJzdA0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAwMC4uNjllNzMwMDhhZjc5
ZjE0DQotLS0gL2Rldi9udWxsDQorKysgYi9NaXNjL05FV1MuZC9uZXh0L1NlY3VyaXR5LzIwMjYt
MDYtMzAtMTMtMjQtMTMuZ2gtaXNzdWUtMTUyNjc0Li0yUVZvTC5yc3QNCkBAIC0wLDAgKzEsNiBA
QA0KK1RoZSA6Y2xhc3M6YHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50YCBtZXRob2RzDQor
Om1ldGg6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5maW5kYWxsYCwNCis6bWV0aDpg
fnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJmaW5kYCBhbmQNCis6bWV0aDpgfnht
bC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmZpbmRgIGF2b2lkIHF1YWRyYXRpYyBiZWhhdmlv
ciB3aGVuDQordXNpbmcgWFBhdGggaW5kZXggcHJlZGljYXRlcyAoYGBbMV1gYCwgYGBbbGFzdCgp
XWBgLCBgYFtsYXN0KCktTl1gYCkgb24gWE1MDQorZG9jdW1lbnRzIHdpdGggbWFueSBzYW1lLXRh
ZyBzaWJsaW5ncy4NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KUHl0aG9uLWNoZWNraW5zIG1haWxpbmcgbGlzdCAtLSBweXRob24tY2hlY2tpbnNAcHl0
aG9uLm9yZwpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHB5dGhvbi1jaGVja2lucy1s
ZWF2ZUBweXRob24ub3JnCmh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4zLy9saXN0cy9w
eXRob24tY2hlY2tpbnMucHl0aG9uLm9yZwpNZW1iZXIgYWRkcmVzczogcHl0aG9uLXB5dGhvbi1j
aGVja2luc0BtLmdtYW5lLW14Lm9yZwo=