gh-154726: Fix `shutil.copyfile()` for symlinks to special files with `follow_symlinks=False` (GH-154728)

encukou <[email protected]> Fri, 31 Jul 2026 07:36:23 -0400 (EDT)
Newsgroups gmane.comp.python.cvs
Message-ID <[email protected]>
aHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL2NvbW1pdC9mNWFmYTg5NWFlMzIyZWE4
OWM1OTQyYjBiMjEwOTRjMTI0MjkzZGQ4DQpjb21taXQ6IGY1YWZhODk1YWUzMjJlYTg5YzU5NDJi
MGIyMTA5NGMxMjQyOTNkZDgNCmJyYW5jaDogbWFpbg0KYXV0aG9yOiDFgXVrYXN6IDxsdWthc3ps
YXBpbnNraTdAZ21haWwuY29tPg0KY29tbWl0dGVyOiBlbmN1a291IDxlbmN1a291QGdtYWlsLmNv
bT4NCmRhdGU6IDIwMjYtMDctMzFUMTM6MzY6MDUrMDI6MDANCnN1bW1hcnk6DQoNCmdoLTE1NDcy
NjogRml4IGBzaHV0aWwuY29weWZpbGUoKWAgZm9yIHN5bWxpbmtzIHRvIHNwZWNpYWwgZmlsZXMg
d2l0aCBgZm9sbG93X3N5bWxpbmtzPUZhbHNlYCAoR0gtMTU0NzI4KQ0KDQpmaWxlczoNCkEgTWlz
Yy9ORVdTLmQvbmV4dC9MaWJyYXJ5LzIwMjYtMDctMjYtMTEtNDUtMzQuZ2gtaXNzdWUtMTU0NzI2
LmhMSms1LS5yc3QNCk0gTGliL3NodXRpbC5weQ0KTSBMaWIvdGVzdC90ZXN0X3NodXRpbC5weQ0K
DQpkaWZmIC0tZ2l0IGEvTGliL3NodXRpbC5weSBiL0xpYi9zaHV0aWwucHkNCmluZGV4IDZhMmUy
YjJmZmRhZTJjLi45NDYxN2VjMjk2ZjUwOCAxMDA2NDQNCi0tLSBhL0xpYi9zaHV0aWwucHkNCisr
KyBiL0xpYi9zaHV0aWwucHkNCkBAIC0yOTIsOCArMjkyLDExIEBAIGRlZiBjb3B5ZmlsZShzcmMs
IGRzdCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpOg0KICAgICBpZiBfc2FtZWZpbGUoc3JjLCBk
c3QpOg0KICAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhl
IHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkNCiANCisgICAgY29weV9zeW1saW5rID0gbm90
IGZvbGxvd19zeW1saW5rcyBhbmQgX2lzbGluayhzcmMpDQogICAgIGZpbGVfc2l6ZSA9IDANCiAg
ICAgZm9yIGksIGZuIGluIGVudW1lcmF0ZShbc3JjLCBkc3RdKToNCisgICAgICAgIGlmIGNvcHlf
c3ltbGluayBhbmQgaSA9PSAwOg0KKyAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICB0cnk6
DQogICAgICAgICAgICAgc3QgPSBfc3RhdChmbikNCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOg0K
QEAgLTMxNSw3ICszMTgsNyBAQCBkZWYgY29weWZpbGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1s
aW5rcz1UcnVlKToNCiAgICAgICAgICAgICBpZiBfV0lORE9XUyBhbmQgaSA9PSAwOg0KICAgICAg
ICAgICAgICAgICBmaWxlX3NpemUgPSBzdC5zdF9zaXplDQogDQotICAgIGlmIG5vdCBmb2xsb3df
c3ltbGlua3MgYW5kIF9pc2xpbmsoc3JjKToNCisgICAgaWYgY29weV9zeW1saW5rOg0KICAgICAg
ICAgb3Muc3ltbGluayhvcy5yZWFkbGluayhzcmMpLCBkc3QpDQogICAgIGVsc2U6DQogICAgICAg
ICB3aXRoIG9wZW4oc3JjLCAncmInKSBhcyBmc3JjOg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rl
c3Rfc2h1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkNCmluZGV4IDY4MzJiZWEwOTRm
YzFkLi5lZDVkMTVlY2M3ZGRhZCAxMDA2NDQNCi0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5
DQorKysgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQ0KQEAgLTE1NzQsNiArMTU3NCw0NyBAQCBk
ZWYgdGVzdF9jb3B5ZmlsZV9zb2NrZXQoc2VsZik6DQogICAgICAgICBzZWxmLmFzc2VydFJhaXNl
c1JlZ2V4KHNodXRpbC5TcGVjaWFsRmlsZUVycm9yLCAnaXMgYSBzb2NrZXQnLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUsIF9fZmlsZV9fLCBzb2NrX3Bh
dGgpDQogDQorICAgIGRlZiBfY2hlY2tfY29weWZpbGVfc3ltbGlua190b19zcGVjaWFsX2ZpbGUo
c2VsZiwgdGFyZ2V0KToNCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQ0KKyAgICAg
ICAgc3JjID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdzcmMnKQ0KKyAgICAgICAgZHN0ID0gb3Mu
cGF0aC5qb2luKHRtcF9kaXIsICdkc3QnKQ0KKyAgICAgICAgb3Muc3ltbGluayh0YXJnZXQsIHNy
YykNCisNCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCwgZm9sbG93X3N5bWxpbmtz
PUZhbHNlKQ0KKw0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKGRzdCkp
DQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWRsaW5rKGRzdCksIHRhcmdldCkNCisN
CisgICAgQG9zX2hlbHBlci5za2lwX3VubGVzc19zeW1saW5rDQorICAgIEB1bml0dGVzdC5za2lw
VW5sZXNzKG9zLnBhdGguZXhpc3RzKCcvZGV2L251bGwnKSwgJ3JlcXVpcmVzIC9kZXYvbnVsbCcp
DQorICAgIGRlZiB0ZXN0X2NvcHlmaWxlX3N5bWxpbmtfdG9fY2hhcmFjdGVyX2RldmljZShzZWxm
KToNCisgICAgICAgIHNlbGYuX2NoZWNrX2NvcHlmaWxlX3N5bWxpbmtfdG9fc3BlY2lhbF9maWxl
KCcvZGV2L251bGwnKQ0KKw0KKyAgICBAb3NfaGVscGVyLnNraXBfdW5sZXNzX3N5bWxpbmsNCisg
ICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgIm1rZmlmbyIpLCAncmVxdWlyZXMg
b3MubWtmaWZvKCknKQ0KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAidnh3
b3JrcyIsDQorICAgICAgICAgICAgICAgICAgICAiZmlmbyByZXF1aXJlcyBzcGVjaWFsIHBhdGgg
b24gVnhXb3JrcyIpDQorICAgIGRlZiB0ZXN0X2NvcHlmaWxlX3N5bWxpbmtfdG9fbmFtZWRfcGlw
ZShzZWxmKToNCisgICAgICAgIGZpZm9fcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAo
KSwgJ2ZpZm8nKQ0KKyAgICAgICAgdHJ5Og0KKyAgICAgICAgICAgIG9zLm1rZmlmbyhmaWZvX3Bh
dGgpDQorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yIGFzIGU6DQorICAgICAgICAgICAg
c2VsZi5za2lwVGVzdCgnb3MubWtmaWZvKCk6ICVzJyAlIGUpDQorICAgICAgICBzZWxmLl9jaGVj
a19jb3B5ZmlsZV9zeW1saW5rX3RvX3NwZWNpYWxfZmlsZShmaWZvX3BhdGgpDQorDQorICAgIEBv
c19oZWxwZXIuc2tpcF91bmxlc3Nfc3ltbGluaw0KKyAgICBAc29ja2V0X2hlbHBlci5za2lwX3Vu
bGVzc19iaW5kX3VuaXhfc29ja2V0DQorICAgIGRlZiB0ZXN0X2NvcHlmaWxlX3N5bWxpbmtfdG9f
c29ja2V0KHNlbGYpOg0KKyAgICAgICAgc29ja19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYubWtk
dGVtcCgpLCAnc29jaycpDQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZf
VU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQ0KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2su
Y2xvc2UpDQorICAgICAgICB0cnk6DQorICAgICAgICAgICAgc29ja2V0X2hlbHBlci5iaW5kX3Vu
aXhfc29ja2V0KHNvY2ssIHNvY2tfcGF0aCkNCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6
DQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdChmJ2Nhbm5vdCBiaW5kIEFGX1VOSVggc29ja2V0
OiB7ZX0nKQ0KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zX2hlbHBlci51bmxpbmssIHNvY2tf
cGF0aCkNCisgICAgICAgIHNlbGYuX2NoZWNrX2NvcHlmaWxlX3N5bWxpbmtfdG9fc3BlY2lhbF9m
aWxlKHNvY2tfcGF0aCkNCisNCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MucGF0aC5leGlz
dHMoJy9kZXYvbnVsbCcpLCAncmVxdWlyZXMgL2Rldi9udWxsJykNCiAgICAgZGVmIHRlc3RfY29w
eWZpbGVfY2hhcmFjdGVyX2RldmljZShzZWxmKToNCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
UmVnZXgoc2h1dGlsLlNwZWNpYWxGaWxlRXJyb3IsICdpcyBhIGNoYXJhY3RlciBkZXZpY2UnLA0K
ZGlmZiAtLWdpdCBhL01pc2MvTkVXUy5kL25leHQvTGlicmFyeS8yMDI2LTA3LTI2LTExLTQ1LTM0
LmdoLWlzc3VlLTE1NDcyNi5oTEprNS0ucnN0IGIvTWlzYy9ORVdTLmQvbmV4dC9MaWJyYXJ5LzIw
MjYtMDctMjYtMTEtNDUtMzQuZ2gtaXNzdWUtMTU0NzI2LmhMSms1LS5yc3QNCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzNjZjQwYTcyMDc3NDMNCi0tLSAvZGV2
L251bGwNCisrKyBiL01pc2MvTkVXUy5kL25leHQvTGlicmFyeS8yMDI2LTA3LTI2LTExLTQ1LTM0
LmdoLWlzc3VlLTE1NDcyNi5oTEprNS0ucnN0DQpAQCAtMCwwICsxLDMgQEANCitGaXggOmZ1bmM6
YHNodXRpbC5jb3B5ZmlsZWAgdG8gY29weSBhIHN5bWJvbGljIGxpbmsgdG8gYSBzcGVjaWFsIGZp
bGUgd2hlbg0KK2BgZm9sbG93X3N5bWxpbmtzPUZhbHNlYGAgaW5zdGVhZCBvZiByYWlzaW5nDQor
OmV4YzpgfnNodXRpbC5TcGVjaWFsRmlsZUVycm9yYC4NCg0KX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KUHl0aG9uLWNoZWNraW5zIG1haWxpbmcgbGlzdCAt
LSBweXRob24tY2hlY2tpbnNAcHl0aG9uLm9yZwpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWls
IHRvIHB5dGhvbi1jaGVja2lucy1sZWF2ZUBweXRob24ub3JnCmh0dHBzOi8vbWFpbC5weXRob24u
b3JnL21haWxtYW4zLy9saXN0cy9weXRob24tY2hlY2tpbnMucHl0aG9uLm9yZwpNZW1iZXIgYWRk
cmVzczogcHl0aG9uLXB5dGhvbi1jaGVja2luc0BtLmdtYW5lLW14Lm9yZwo=