[ruby-core:122361] [Ruby Bug#21391] Inconsistent trailing slash behavior of File.join and Pathname#join with empty strings
From:
lovro-bikic via ruby-core <ruby-core@...>
Date:
2025-06-01 14:03:19 UTC
List:
ruby-core #122361
SXNzdWUgIzIxMzkxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbG92cm8tYmlraWMgKExvdnJvIEJpa2nE hykuDQoNCg0KRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUpIHdyb3RlIGluICNub3RlLTI6DQo+IEl0 J3Mgbm90IHRoZSBvbmx5IGluY29uc2lzdGVudCBiZWhhdmlvcjogKGFic29sdXRlIGFuZCByZWxh dGl2ZSBwYXRocyBleGFtcGxlKQ0KDQpUbyBjbGFyaWZ5LCBJIGRvbid0IGV4cGVjdCB0aGUgcmVz dWx0IG9mIHRoZSB0d28gdG8gYmUgZXF1aXZhbGVudCBpbiBhbGwgY2FzZXMsIGl0J3MgY2xlYXJs eSBkb2N1bWVudGVkIHdoYXQgZWFjaCBtZXRob2QgZG9lcy4NCg0KV2hhdCBJIGFtIHJlcG9ydGlu ZyBpcyB0aGF0IHRoZXJlJ3MgdW5kb2N1bWVudGVkIGFuZCBwb3NzaWJseSBpbmNvbnNpc3RlbnQg YmVoYXZpb3Igd2hlbiBpdCBjb21lcyB0byBlbXB0eSBzdHJpbmdzLiBGdXJ0aGVybW9yZSwgdGhl IGV4YW1wbGUgd2l0aCBhIHdoaXRlc3BhY2Ugc3RyaW5nIHNob3dzIHRoYXQgYFBhdGhuYW1lI2pv aW5gIGlzIGNhcGFibGUgb2YgYWRkaW5nIHRyYWlsaW5nIHNsYXNoZXMgdW5kZXIgY2VydGFpbiBj b25kaXRpb25zLg0KDQpbYEZpbGUuam9pbmAgYmVoYXZpb3IgaGFzIGJlZW4gdGVzdGVkIGZvciBl bXB0eSBzdHJpbmdzXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9zcGVjL2Jsb2IvZjNhMDcxYTBm ZWEyMTNjNmU5MDllMjUzZTQzMTQ0YThjNDk0ODNjNi9jb3JlL2ZpbGUvam9pbl9zcGVjLnJiI0w2 Ny1MMTAxKSwgYnV0IFtgUGF0aG5hbWUjam9pbmAgaGFzbid0XShodHRwczovL2dpdGh1Yi5jb20v cnVieS9zcGVjL2Jsb2IvZjNhMDcxYTBmZWEyMTNjNmU5MDllMjUzZTQzMTQ0YThjNDk0ODNjNi9s aWJyYXJ5L3BhdGhuYW1lL2pvaW5fc3BlYy5yYiksIHNvIGl0J3MgdW5jbGVhciBpZiB0aGlzIGlz IGEgYnVnIG9yIGFuIGV4cGVjdGVkIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IuDQoNCkRhbjAwNDIg KERhbmllbCBEZUxvcm1lKSB3cm90ZSBpbiAjbm90ZS0yOg0KPiBUaGF0IGJlaW5nIHNhaWQsIEkg ZmVlbCB0aGF0IFBhdGhuYW1lLm5ldygnL3VzcicpLmpvaW4oJycpIGlzIGEgbm9uc2Vuc2ljYWwg b3BlcmF0aW9uLiBJdCBzZWVtcyB0byByZXN1bHQgaW4gYSBuby1vcCwgYnV0IGl0IG1pZ2h0IGJl IGJldHRlciB0byB3YXJuIG9yIHJhaXNlIGFuIGVycm9yLg0KDQpQZXJoYXBzLCBbYnV0IGl0J3Mg YWxyZWFkeSBhIGNvbW1vbiBwYXR0ZXJuIHdpdGggYEZpbGUuam9pbmBdKGh0dHBzOi8vZ2l0aHVi LmNvbS9zZWFyY2g/cT0lMkZGaWxlJTVDLmpvaW4lNUMoJTVCJTVDdy5fKCklNUQlMkIlMkMlMjAo JTIyJTIyJTdDJTI3JTI3KSU1QyklMkYlMjBsYW5nJTNBcnVieSZ0eXBlPWNvZGUpLiBXaGV0aGVy IGl0J3MgYSBub25zZW5zaWNhbCBvcGVyYXRpb24gaXMgdXAgZm9yIGRlYmF0ZSwgYnV0IEkgdGhp bmsgdGhlcmUgc2hvdWxkIGJlIGEgY2xlYXIgd2F5IGZvciBgUGF0aG5hbWUjam9pbmAgdG8gYWxs b3cgYXBwZW5kaW5nIHRyYWlsaW5nIHNsYXNoZXMgdG8gcGF0aG5hbWVzLg0KDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpCdWcgIzIxMzkxOiBJbmNvbnNpc3RlbnQg dHJhaWxpbmcgc2xhc2ggYmVoYXZpb3Igb2YgRmlsZS5qb2luIGFuZCBQYXRobmFtZSNqb2luIHdp dGggZW1wdHkgc3RyaW5ncw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIxMzkx I2NoYW5nZS0xMTM1MDQNCg0KKiBBdXRob3I6IGxvdnJvLWJpa2ljIChMb3ZybyBCaWtpxIcpDQoq 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