[ruby-core:118890] [Ruby master Bug#20586] Some filesystem calls in dir.c are missing error handling and can return incorrect results if interrupted
From:
"ivoanjo (Ivo Anjo) via ruby-core" <ruby-core@...>
Date:
2024-08-19 09:19:03 UTC
List:
ruby-core #118890
SXNzdWUgIzIwNTg2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgaXZvYW5qbyAoSXZvIEFuam8pLg0KDQoN CkhleSEgQXMgdXN1YWwgdGhhbmtzIGZvciBwaWNraW5nIHVwIHRoZXNlIHRob3JueSBidWdzIDop IA0KDQpUaGUgZml4IGxvb2tzIGdvb2QhIEluIHBhcnRpY3VsYXIgSSd2ZSByZS10ZXN0ZWQgaXQg d2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIERhdGFkb2cgcHJvZmlsZXIgd2hlcmUgSSBm b3JjZSBpdCB0byBpbnRlcnJ1cHQgdGhyZWFkcyB3aXRob3V0IEdWTCAodGhlIGJ1ZyBpcyB2ZXJ5 IGhhcmQgdG8gdHJpZ2dlciBzaW5jZSBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMv MjA1ODcgd2FzIGZpeGVkKSBhbmQgSSBjYW4gY29uZmlybSBJIHNlZSB0aGUgZXJyb3Igc2hvd2lu ZyB1cCBjb3JyZWN0bHkgbm93Og0KDQpgYGANCiQgRERfUFJPRklMSU5HX0VOQUJMRUQ9dHJ1ZSBE RF9QUk9GSUxJTkdfRElSX0lOVEVSUlVQVElPTl9XT1JLQVJPVU5EX0VOQUJMRUQ9ZmFsc2UgYnVu ZGxlIGV4ZWMgZGRwcm9mcmIgZXhlYyBydWJ5IC1lICJEYXRhZG9nOjpQcm9maWxpbmcud2FpdF91 bnRpbF9ydW5uaW5nOyBwcCBEaXIuY2hpbGRyZW4oJ2Z1c2UtdGVzdGluZy8nKSINCi1lOjE6aW4g J0Rpci5jaGlsZHJlbic6IEludGVycnVwdGVkIHN5c3RlbSBjYWxsIC0gcmVhZGRpciAoRXJybm86 OkVJTlRSKQ0KCWZyb20gLWU6MTppbiAnPG1haW4+Jw0KYGBgDQoNCj4gcmJfaG9tZV9kaXJfb2Yg SSBoYXZlIHN3aXRjaGluZyB0byB1c2UgcmJfZ2V0cHdkaXJuYW1fZm9yX2xvZ2luIGluIHB1bGwg cmVxdWVzdCAxMTIwMiwgYW5kIHRoYXQgZnVuY3Rpb24gaGFzIHByb3BlciBlcnJvciBjaGVja3Mu IHJiX2RlZmF1bHRfaG9tZV9kaXIgY2FsbHMgcmJfZ2V0cHdkaXJuYW1fZm9yX2xvZ2luLCByYl9n ZXRsb2dpbiwgYW5kIHJiX2dldHB3ZGlydWlkLiBDYW4geW91IGxldCBtZSBrbm93IHdoYXQgcGFy dCBvZiByYl9kZWZhdWx0X2hvbWVfZGlyIHN0aWxsIGxvb2tzIHN1c3BpY2lvdXM/DQoNCkkndmUg cmUtY2hlY2tlZCB0aGVzZSwgYW5kIGJldHdlZW4gMTEyMDIgKyBtZSBsb29raW5nIGNsb3NlciBh dCBzb21lIGRldGFpbHMgYW5kIHJlYWxpemluZyB0aGV5J3JlIGNvcnJlY3QgSSB0aGluayBpdCdz IG1vc3RseSBjb3JyZWN0Lg0KDQpUaGUgb25seSAocG90ZW50aWFsPykgaXNzdWUgSSBzdGlsbCBz ZWUgaXMgd2l0aCBjYWxscyB0byBgZ2V0bG9naW5gIC0tIHRoYXQgb25lIHNlZW1zIHRvIGJvdHRv bSBvdXQgb24gYSBudW1iZXIgb2YgSU8gcmVhZHMgYW5kIHdoYXRub3Qgc28gaXQgZG9lcyBsb29r IGxpa2UgaXQgbWF5IGVuZCB1cCB3aXRoIGFuIEVJTlRSLiBFdmVuIHdpdGggMTEyMDIsIGByYl9o b21lX2Rpcl9vZmAgaXMgc3RpbGwgY2FsbGluZyBgZ2V0bG9naW5gIGRpcmVjdGx5IGFuZCB3aXRo b3V0IGVycm9yIGNoZWNraW5nLg0KDQpJIGFsc28gbm90aWNlZCB0aGF0IGBleHQvZXRjL2V0Yy5j YCBhbmQgYGV4dC9wdHkvcHR5LmNgIHNlZW0gdG8gYWxzbyB1c2UgYGdldGxvZ2luYCBkaXJlY3Rs eSwgc28gcGVyaGFwcyB0aGV5J2xsIGFsc28gc3VmZmVyIGZyb20gdGhlIHNhbWUgaXNzdWU/IPCf pJQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQnVnICMyMDU4 NjogU29tZSBmaWxlc3lzdGVtIGNhbGxzIGluIGRpci5jIGFyZSBtaXNzaW5nIGVycm9yIGhhbmRs aW5nIGFuZCBjYW4gcmV0dXJuIGluY29ycmVjdCByZXN1bHRzIGlmIGludGVycnVwdGVkDQpodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1ODYjY2hhbmdlLTEwOTQ2MQ0KDQoqIEF1 dGhvcjogaXZvYW5qbyAoSXZvIEFuam8pDQoqIFN0YXR1czogT3Blbg0KKiBCYWNrcG9ydDogMy4x OiBVTktOT1dOLCAzLjI6IFVOS05PV04sIDMuMzogVU5LTk9XTg0KLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyMjIyBCYWNrZ3JvdW5kDQoNCkhleSEgSSB3b3JrIGZv ciBEYXRhZG9nIG9uIHRoZSBSdWJ5IHByb2ZpbGVyIHBhcnQgb2YgdGhlIFtgZGF0YWRvZ2AgKHBy ZXZpb3VzbHkgYGRkdHJhY2VgKV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGFkb2cvZGQtdHJhY2Ut cmIpIGdlbS4NCg0KQSBjdXN0b21lciByZWFjaGVkIFtvdXQgd2l0aCBhbiBpc3N1ZV0oaHR0cHM6 Ly9naXRodWIuY29tL0RhdGFEb2cvZGQtdHJhY2UtcmIvaXNzdWVzLzM0NTApIHdoZXJlIGVuYWJs aW5nIHRoZSBwcm9maWxlciBtYWRlIGBEaXIuZ2xvYmAgcmV0dXJuIG5vIGZpbGVzIGZvciBhIGdp dmVuIGZvbGRlcjoNCg0KV2l0aG91dCBwcm9maWxlcjoNCg0KYGBgDQppcmIobWFpbik6MDAyOjA+ IERpci5nbG9iKCcvZ2NzZnVzZS90KicpDQo9PiBbIi9nY3NmdXNlL3Rlc3QuaHRtbCIsICIvZ2Nz ZnVzZS90ZXN0LnR4dCJdDQpgYGANCg0KV2l0aCBwcm9maWxlcjoNCg0KYGBgDQppcmIobWFpbik6 MDAyOjA+IERpci5nbG9iKCcvZ2NzZnVzZS90KicpDQo9PiBbXQ0KYGBgDQoNCkl0IHR1cm5zIG91 dCB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBtaXNzaW5nIGVycm9yIGhhbmRsaW5nIGluIGBkaXIu Y2AuDQoNClRoZSBEYXRhZG9nIFJ1YnkgcHJvZmlsZXIsIGxpa2Ugc3RhY2twcm9mLCBwZjIgYW5k IHZlcm5pZXIsIHVzZXMgdW5peCBzaWduYWxzIHRvIGludGVycnVwdCB0aGUgY3VycmVudGx5LWFj dGl2ZSB0aHJlYWQgYW5kIHRha2UgYSBzYW1wbGUgKHVzdWFsbHkgYFNJR1BST0ZgKS4gV2hlbiBz b21lIHN5c3RlbSBjYWxscyBnZXQgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIHRoZXkgcmV0dXJu IGFuIFtFSU5UUiBlcnJvciBjb2RlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9t YW43L3NpZ25hbC43Lmh0bWwjOn46dGV4dD1JbnRlcnJ1cHRpb24lMjBvZiUyMHN5c3RlbSUyMGNh bGxzJTIwYW5kJTIwbGlicmFyeSUyMGZ1bmN0aW9ucyUyMGJ5JTIwc2lnbmFsJTIwaGFuZGxlcnMp IGJhY2sgdG8gdGhlIGNhbGxlci4NCg0KQ29uc2lkZXIgZm9yIGluc3RhbmNlIHRoZSBpbXBsZW1l bnRhdGlvbiBvZiBgZGlyX2VhY2hfZW50cnlgIGluIGBkaXIuY2A6DQoNCmBgYGMNCnN0YXRpYyBW QUxVRQ0KZGlyX2VhY2hfZW50cnkoVkFMVUUgZGlyLCBWQUxVRSAoKmVhY2gpKFZBTFVFLCBWQUxV RSksIFZBTFVFIGFyZywgaW50IGNoaWxkcmVuX29ubHkpDQp7DQogICAgc3RydWN0IGRpcl9kYXRh ICpkaXJwOw0KICAgIHN0cnVjdCBkaXJlbnQgKmRwOw0KICAgIElGX05PUk1BTElaRV9VVEY4UEFU SChpbnQgbm9ybV9wKTsNCg0KICAgIEdldERJUihkaXIsIGRpcnApOw0KICAgIHJld2luZGRpcihk aXJwLT5kaXIpOw0KICAgIElGX05PUk1BTElaRV9VVEY4UEFUSChub3JtX3AgPSBuZWVkX25vcm1h bGl6YXRpb24oZGlycC0+ZGlyLCBSU1RSSU5HX1BUUihkaXJwLT5wYXRoKSkpOw0KICAgIHdoaWxl ICgoZHAgPSBSRUFERElSKGRpcnAtPmRpciwgZGlycC0+ZW5jKSkgIT0gTlVMTCkgew0KICAgICAg Ly8gLi4uIGRvIHRoaW5ncw0KICAgIH0NCiAgICByZXR1cm4gZGlyOw0KfQ0KYGBgDQoNCklmIGBS RUFERElSYCByZXR1cm5zIGBOVUxMYCwgdGhlbiBgZGlyX2VhY2hfZW50cnlgIGFzc3VtZXMgaXQg aGFzIGl0ZXJhdGVkIHRoZSBlbnRpcmUgZGlyZWN0b3J5LiBCdXQgbG9va2luZyBbYXQgdGhlIG1h biBwYWdlIGZvciBgcmVhZGRpcmBdKGh0dHBzOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21h bjMvcmVhZGRpci4zLmh0bWwpIHdlIHNlZSB0aGUgZm9sbG93aW5nIHNoYXJwIGVkZ2UgKGVtcGhh c2lzIG1pbmUpOg0KDQo+IEl0IHJldHVybnMgTlVMTCBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRo ZSBkaXJlY3Rvcnkgc3RyZWFtICoqb3IgaWYgYW4gZXJyb3Igb2NjdXJyZWQqKi4NCg0KU28gd2hh dCdzIGhhcHBlbmluZyBpbiB0aGlzIHNpdHVhdGlvbiBpczogYHJlYWRkaXJgIGdldHMgaW50ZXJy dXB0ZWQsIHJldHVybnMgYE5VTExgICsgc2V0cyBlcnJubyB0byBgRUlOVFJgLiBCdXQgYGRpcl9l YWNoX2VudHJ5YCBkb2Vzbid0IGNoZWNrIGBlcnJub2AsIHNvIHJhdGhlciB0aGFuIHJhaXNpbmcg YW4gZXhjZXB0aW9uIHRvIGZsYWcgdGhlIGlzc3VlLCBpdCB0cmVhdHMgaXQgYXMgaWYgdGhlIGVu ZCBvZiB0aGUgZGlyZWN0b3J5IGhhcyBiZWVuIHJlYWNoZWQuDQoNCiMjIyMgSG93IHRvIHJlcHJv ZHVjZQ0KDQpSZXByb2R1Y2luZyB0aGlzIGlzIHNvbWV3aGF0IGFubm95aW5nLCBiZWNhdXNlIGl0 J3MgZGVwZW5kZW50IG9uIHRpbWluZzogdGhlIHNpZ25hbCBtdXN0IGFycml2ZSBhdCB0aGUgZXhh Y3QgdGltZSB0aGUgZGlyIEFQSSBpcyBnZXR0aW5nIGV4ZWN1dGVkLg0KDQpJIHdhcyBhYmxlIHRv IHJlcHJvZHVjZSB0aGlzIGV2ZXJ5IHRpbWUgYnkgdXNpbmcgdGhlIFtnb29nbGUgY2xvdWQgYGdj c2Z1c2VgXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2djcy1mdXNlKSB0 b29sLiBUaGlzIHNvbWV3aGF0IG1ha2VzIHNlbnNlIC0tIGEgcmVtb3RlIGZpbGVzeXN0ZW0gaXMg bXVjaCBzbG93ZXIgdGhhbiBhIGxvY2FsIG9uZSwgc28gdGhlcmUncyBhIG11Y2ggYmlnZ2VyIHdp bmRvdyBvZiBvcHBvcnR1bml0eSBmb3IgYSBzaWduYWwgdG8gYXJyaXZlIHdoaWxlIHRoZSBzeXN0 ZW0gY2FsbCBpcyBibG9ja2VkLg0KDQpIZXJlJ3MgYW4gZXhhbXBsZSBJIGluY2x1ZGVkIGluIGh0 dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RkLXRyYWNlLXJiL3B1bGwvMzcyMDoNCg0KYGBgDQoj IE5vdCBzaG93bjogU2V0IHVwIGEgdHJpYWwgZ29vZ2xlIGNsb3VkIGFjY291bnQsIGluc3RhbGwg Z2NzZnVzZSwgY3JlYXRlIGEgY2xvdWQgc3RvcmFnZSBidWNrZXQgYW5kIHB1dCBpbiBzb21lIHRl c3QgZmlsZXMNCg0KJCBnY3NmdXNlIHRlc3RfZnNfZGRfdHJhY2VfcmIgZnVzZS10ZXN0aW5nLw0K JCBscyBmdXNlLXRlc3RpbmcvDQpoZWxsby50eHQgIHRlc3QuaHRtbCAgdGVzdC50eHQNCg0KIyBO b3Qgc2hvd246IEFkZCBgZGF0YWRvZ2AgZ2VtIHRvIGBHZW1maWxlYA0KDQokIEREX1BST0ZJTElO R19FTkFCTEVEPXRydWUgRERfUFJPRklMSU5HX0RJUl9JTlRFUlJVUFRJT05fV09SS0FST1VORF9F TkFCTEVEPWZhbHNlIGJ1bmRsZSBleGVjIGRkcHJvZnJiIGV4ZWMgcnVieSAtZSAiRGF0YWRvZzo6 UHJvZmlsaW5nLndhaXRfdW50aWxfcnVubmluZzsgcHAgRGlyLmNoaWxkcmVuKCdmdXNlLXRlc3Rp bmcvJykiDQpbXQ0KYGBgDQoNCkxldCBtZSBrbm93IGlmIHlvdSdkIGxpa2UgbWUgdG8gdHJ5IHRv IGNyZWF0ZSBhIHJlcHJvZHVjZXIgdGhhdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGBkYXRhZG9n YCBnZW0uDQoNCiMjIyMgQWRkaXRpb25hbCBub3Rlcw0KDQpJJ3ZlIHNwZW50IHF1aXRlIHNvbWUg dGltZSBsb29raW5nIGF0IHRoZSBgZGlyLmNgIHNvdXJjZXMsIGFuZCBoZXJlJ3MgdGhlIGZ1bGwg bGlzdCBvZiBBUElzIHRoYXQgc3VmZmVyIGZyb20gaXNzdWVzOg0KDQoqIGBkaXJfZWFjaF9lbnRy eWAgZG9lcyBub3QgY2hlY2sgYGVycm5vYDsgYWxsIG9mIGl0cyB1c2VycyBoYXZlIGludGVycnVw dGlvbiBidWdzDQoqIGBkaXJfdGVsbGAgd2lsbCByZXR1cm4gLTEgaW5zdGVhZCBvZiB0aGUgY29y cmVjdCBwb3NpdGlvbiAod2hpY2ggbWVhbnMgdGhhdCBwYXNzaW5nIC0xIHRvIGBkaXJfc2Vla2Av YGRpcl9zZXRfcG9zYCB3aWxsIGNhdXNlIGl0IHRvIG5vdCBsaXN0IHRoZSBkaXJlY3RvcnkgcHJv cGVybHkpDQoqIGBkb19vcGVuZGlyYCBhbiBlcnJvciBpbiBzeXN0ZW0gY2FsbHMgd2lsbCBvbmx5 IHNvbWV0aW1lcyBiZSB0dXJuZWQgaW50byBhIHJhaXNlZCBleGNlcHRpb24NCiAgKiBJbmRpcmVj dCBjYWxsZXJzIHRoYXQgcGFzcyBpbiByYl9nbG9iX2Vycm9yIGFzIGVycmZ1bmM6IHJiX2dsb2Is IERpci5bXSwgRGlyLmdsb2INCiAgKiBJbmRpcmVjdCBjYWxsZXJzIHRoYXQgcGFzcyBpbiAwIGFz IGVycmZ1bmM6IHJ1YnlfZ2xvYiwgcnVieV9icmFjZV9nbG9iDQoqIGBnbG9iX29wZW5kaXJgIGRv ZXMgbm90IGNoZWNrIGVycm5vOyBhbGwgb2YgaXRzIHVzZXJzIGhhdmUgaW50ZXJydXB0aW9uIGJ1 Z3MNCiogYGdsb2JfZ2V0ZW50YCBkb2VzIG5vdCBjaGVjayBlcnJubzsgYWxsIG9mIGl0cyB1c2Vy cyBoYXZlIGludGVycnVwdGlvbiBidWdzDQoqIGBub2d2bF9kaXJfZW1wdHlfcGAgZG9lcyBub3Qg Y2hlY2sgZXJybm8gKG9mIHJlYWRkaXIhIGl0IGFjdHVhbGx5IGNoZWNrcyBmb3Igb3BlbmRpcik7 IGFsbCBvZiBpdHMgdXNlcnMgaGF2ZSBpbnRlcnJ1cHRpb24gYnVncw0KDQpMZXNzIHN1cmUgYWJv dXQgdGhlc2U6DQoNCiogYGRvX3N0YXRgL2Bkb19sc3RhdGAgd2lsbCB0dXJuIGVycm9ycyBpbnRv IHdhcm5pbmdzICh1bmNsZWFyIGlmIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdCkNCiog YG5lZWRfbm9ybWFsaXphdGlvbmAgY2FsbHMgYGZnZXRhdHRybGlzdGAgLyBgZ2V0YXR0cmxpc3Rg IGFuZCBhbGwgZXJyb3JzIGAocmV0ICE9IDApYCBhcmUgdHJlYXRlZCBpbiB0aGUgc2FtZSB3YXkN CiogYHJiX2dsb2JfZXJyb3JgIGlzIGFuZCBgcmJfZ2xvYl9jYWxsZXJgIGxlYXZlIGV4Y2VwdGlv bnMgYXMgcGVuZGluZyBhbmQgcmVseSBvbiBjYWxsZXJzIHRvIHJhaXNlIHRoZW0gcHJvcGVybHkN CiogRXJyb3IgaGFuZGxpbmcgb2YgYHJiX2hvbWVfZGlyX29mYCBhbmQgYHJiX2RlZmF1bHRfaG9t ZV9kaXJgIGFyZSBhIGJpdCBzdXNwaWNpb3VzDQoNCkFzIGEgd29ya2Fyb3VuZCBpbiB0aGUgRGF0 YWRvZyBSdWJ5IHByb2ZpbGVyLCBpbiBodHRwczovL2dpdGh1Yi5jb20vRGF0YURvZy9kZC10cmFj ZS1yYi9wdWxsLzM3MjAgSSd2ZSBhZGRlZCBtb25rZXkgcGF0Y2hlcyB0byBhbGwgb2YgdGhlIFJ1 YnktbGV2ZWwgQVBJcyB0aGF0IHVzZSB0aGUgYWJvdmUgZnVuY3Rpb25zIGFuZCBtYXNrIG91dCBg U0lHUFJPRmAgc28gdGhlc2UgY2FsbHMgYXJlIG5ldmVyIGludGVycnVwdGVkLg0KDQpUaGlzIHNv bHV0aW9uIGlzIGRvZXMgc3VjY2Vzc2Z1bGx5IHdvcmsgYXJvdW5kIHRoZSBpc3N1ZSwgYWx0aG91 Z2ggaXQgcHJldmVudHMgdGhlIHByb2ZpbGVyIGZyb20gc2FtcGxpbmcgZHVyaW5nIHRoZXNlIHN5 c3RlbSBjYWxscywgd2hpY2ggd2lsbCBtZWFuIGxlc3MgdmlzaWJpbGl0eSBpZiBlLmcuIHRoZXNl IGNhbGxzIGFyZSB0YWtpbmcgYSBsb25nIHRpbWUuIEFuZCB3ZWxsLCBtYWludGFpbmluZyBtb25r ZXkgcGF0Y2hlcyBpcyBhbHdheXMgcHJvYmxlbWF0aWMgZm9yIGZ1dHVyZSBSdWJ5IGNvbXBhdGli aWxpdHkuDQoNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KcmVh ZGRpci1idWctcmVwcm8uYyAoMi4xMSBLQikNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxh bmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K IHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRv IHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFu Zy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFu My9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=