[ruby-core:122381] [Ruby Bug#21391] Inconsistent trailing slash behavior of File.join and Pathname#join with empty strings
From:
"Dan0042 (Daniel DeLorme) via ruby-core" <ruby-core@...>
Date:
2025-06-02 15:26:58 UTC
List:
ruby-core #122381
SXNzdWUgIzIxMzkxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQoNCkRhbjAwNDIgKERhbmllbCBEZUxvcm1lKSB3cm90ZSBpbiAjbm90ZS0yOg0KPiBUaGF0 IGJlaW5nIHNhaWQsIEkgZmVlbCB0aGF0IGBQYXRobmFtZS5uZXcoJy91c3InKS5qb2luKCcnKWAg aXMgYSBub25zZW5zaWNhbCBvcGVyYXRpb24uIEl0IHNlZW1zIHRvIHJlc3VsdCBpbiBhIG5vLW9w LCBidXQgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIHdhcm4gb3IgcmFpc2UgYW4gZXJyb3IuDQoNCkFo LCBsb29rcyBsaWtlIEkgbWlnaHQgaGF2ZSB0byByZXRyYWN0IHRoYXQgc3RhdGVtZW50LiBJbiBi YXNoLCBgY2QgIiJgIGlzIGEgbm8tb3ANCmBgYA0KY2QgL3Vzcg0KY2QgIiINCnB3ZCAgIz0+IC91 c3INCmBgYA0KU28gYFBhdGhuYW1lI2pvaW5gLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIGBjZGAs IGhhcyB0aGUgc2FtZSBiZWhhdmlvci4gTm90IHN1cmUgaXQgbWFrZXMgc2Vuc2UsIGJ1dCBhdCBs ZWFzdCBpdCdzIGNvbnNpc3RlbnQuDQpBbHRob3VnaCBJIHNob3VsZCBub3RlIHRoYXQgYERpci5j aGRpcigiIilgIHJhaXNlcyBhbiBlcnJvci4NCg0KbG92cm8tYmlraWMgKExvdnJvIEJpa2nEhykg d3JvdGUgaW4gI25vdGUtMzoNCj4gRnVydGhlcm1vcmUsIHRoZSBleGFtcGxlIHdpdGggYSB3aGl0 ZXNwYWNlIHN0cmluZyBzaG93cyB0aGF0IGBQYXRobmFtZSNqb2luYCBpcyBjYXBhYmxlIG9mIGFk ZGluZyB0cmFpbGluZyBzbGFzaGVzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4NCg0KVGhhdCdz IG5vdCBhIHRyYWlsaW5nIHNsYXNoLCB0aGF0IHRoZSBmaWxlL2RpcmVjdG9yeSAiICIgaW5zaWRl ICJ1c3IiLiBCdXQgaXQncyB0cnVlIHRoYXQgaWYgeW91IGRvIGAuam9pbigiYS8iKWAgdGhlIHJl c3VsdGluZyBQYXRobmFtZSBoYXMgYSB0cmFpbGluZyBzbGFzaCwgc28gaW5kZWVkIGBQYXRobmFt ZSNqb2luYCBpcyBjYXBhYmxlIG9mIGFkZGluZyB0cmFpbGluZyBzbGFzaGVzIHVuZGVyIGNlcnRh aW4gY29uZGl0aW9ucy4NCg0KPiBJIHRoaW5rIHRoZXJlIHNob3VsZCBiZSBhIGNsZWFyIHdheSBm b3IgYFBhdGhuYW1lI2pvaW5gIHRvIGFsbG93IGFwcGVuZGluZyB0cmFpbGluZyBzbGFzaGVzIHRv IHBhdGhuYW1lcy4NCg0KUGVyaGFwcywgYnV0IHBlcnNvbmFsbHkgSSBkb24ndCB0aGluayB0aGF0 IGpvaW5pbmcgd2l0aCBhbiBlbXB0eSBzdHJpbmcgc2hvdWxkIGJlIGl0Lg0KDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpCdWcgIzIxMzkxOiBJbmNvbnNpc3RlbnQg dHJhaWxpbmcgc2xhc2ggYmVoYXZpb3Igb2YgRmlsZS5qb2luIGFuZCBQYXRobmFtZSNqb2luIHdp dGggZW1wdHkgc3RyaW5ncw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIxMzkx I2NoYW5nZS0xMTM1MjcNCg0KKiBBdXRob3I6IGxvdnJvLWJpa2ljIChMb3ZybyBCaWtpxIcpDQoq IFN0YXR1czogT3Blbg0KKiBydWJ5IC12OiBydWJ5IDMuNC40ICgyMDI1LTA1LTE0IHJldmlzaW9u IGEzODUzMWZkM2YpICtQUklTTSBbeDg2XzY0LWRhcndpbjIzXQ0KKiBCYWNrcG9ydDogMy4yOiBV TktOT1dOLCAzLjM6IFVOS05PV04sIDMuNDogVU5LTk9XTg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KYGBgcnVieQ0KRmlsZS5qb2luKCcvdXNyJywgJycpDQojID0+ ICIvdXNyLyINCg0KUGF0aG5hbWUubmV3KCcvdXNyJykuam9pbignJykudG9fcw0KIyA9PiAiL3Vz ciIgIyBubyB0cmFpbGluZyBzbGFzaA0KDQpGaWxlLmpvaW4oJy91c3InLCAnICcpDQojID0+ICIv dXNyLyAiDQoNClBhdGhuYW1lLm5ldygnL3VzcicpLmpvaW4oJyAnKS50b19zDQojID0+ICIvdXNy LyAiDQpgYGANCg0KYEZpbGUuam9pbmAgd2l0aCBhbiBlbXB0eSBzdHJpbmcgYWRkcyBhIHRyYWls aW5nIHNsYXNoLCBgUGF0aG5hbWUjam9pbmAgZG9lc24ndC4NCldoZW4gYFBhdGhuYW1lI2pvaW5g IGFyZ3VtZW50IGlzIGEgc3RyaW5nIHdpdGggZW1wdHkgd2hpdGVzcGFjZSwgYSB0cmFpbGluZyBz bGFzaCBpcyBhZGRlZCAocGx1cyB3aGl0ZXNwYWNlKS4NCg0KSSB0aGluayBpdCdzIGEgY29tbW9u IHVzZS1jYXNlIHRvIGFwcGVuZCBhIHRyYWlsaW5nIHNsYXNoIHRvIGBQYXRobmFtZWAsIGFuZCBj dXJyZW50bHkgeW91IGhhdmUgdG8gcmVzb3J0IHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcyBzdHJp bmcgaW50ZXJwb2xhdGlvbiAoZS5nLiBpbiBSYWlscywgYCIje1JhaWxzLnJvb3R9LyJgKSBvciBg RmlsZS5qb2luYCAoZS5nLiBgRmlsZS5qb2luKFJhaWxzLnJvb3QsICcnKWApLg0KDQpJbiBvdGhl ciBwb3B1bGFyIGxhbmd1YWdlcywgYm90aCBhcHByb2FjaGVzIGhhdmUgYmVlbiB0YWtlbjoNCi0g W2Bvcy5wYXRoLmpvaW5gIGluIFB5dGhvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xMi9s aWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmpvaW4pIGFkZHMgYSB0cmFpbGluZyBzbGFzaDoN CmBgYHB5dGhvbg0KaW1wb3J0IG9zDQpvcy5wYXRoLmpvaW4oJy91c3InLCAnJykNCiMgJy91c3Iv Jw0KYGBgDQotIFtQYXRoLmpvaW4gaW4gUnVzdF0oaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9z dGQvcGF0aC9zdHJ1Y3QuUGF0aC5odG1sI21ldGhvZC5qb2luKSBhZGRzIGEgdHJhaWxpbmcgc2xh c2g6DQpgYGBydXN0DQp1c2Ugc3RkOjpwYXRoOjp7UGF0aH07DQoNCmZuIG1haW4oKSB7DQogICAg cHJpbnRsbiEoInt9IiwgUGF0aDo6bmV3KCIvdXNyIikuam9pbigiIikuZGlzcGxheSgpKTsNCiAg ICAvLyBwcmludHMgIi91c3IvIg0KfQ0KYGBgDQotIFtwYXRoLmpvaW4gaW4gTm9kZV0oaHR0cHM6 Ly9ub2RlanMub3JnL2FwaS9wYXRoLmh0bWwjcGF0aGpvaW5wYXRocykgZG9lc24ndCBhZGQgYSB0 cmFpbGluZyBzbGFzaDoNCmBgYGpzDQpjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpOw0KDQpw YXRoLmpvaW4oJy91c3InLCAnJyk7DQovLyAnL3VzcicNCmBgYA0KLSBbZmlsZXBhdGguSm9pbiBp biBHb10oaHR0cHM6Ly9wa2cuZ28uZGV2L3BhdGgvZmlsZXBhdGgjSm9pbikgZG9lc24ndCBhZGQg YSB0cmFpbGluZyBzbGFzaDoNCmBgYGdvDQpwYWNrYWdlIG1haW4NCg0KaW1wb3J0ICgiZm10Ijsg InBhdGgvZmlsZXBhdGgiKQ0KDQpmdW5jIG1haW4oKSB7DQogIGZtdC5QcmludGxuKGZpbGVwYXRo LkpvaW4oIi91c3IiLCAiIikpDQogIC8vIHByaW50cyAiL3VzciINCn0NCmBgYA0KDQoNCg0KLS0g DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3Jl QG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1j b3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwu cnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8K