[ruby-core:118911] [Ruby master Bug#20586] Some filesystem calls in dir.c are missing error handling and can return incorrect results if interrupted
From:
"jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>
Date:
2024-08-21 22:52:08 UTC
List:
ruby-core #118911
SXNzdWUgIzIwNTg2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgamVyZW15ZXZhbnMwIChKZXJlbXkgRXZh bnMpLg0KDQoNCmplcmVteWV2YW5zMCAoSmVyZW15IEV2YW5zKSB3cm90ZSBpbiAjbm90ZS0xMDoN Cj4gaXZvYW5qbyAoSXZvIEFuam8pIHdyb3RlIGluICNub3RlLTk6DQo+ID4gVGhlIG9ubHkgKHBv dGVudGlhbD8pIGlzc3VlIEkgc3RpbGwgc2VlIGlzIHdpdGggY2FsbHMgdG8gYGdldGxvZ2luYCAt LSB0aGF0IG9uZSBzZWVtcyB0byBib3R0b20gb3V0IG9uIGEgbnVtYmVyIG9mIElPIHJlYWRzIGFu ZCB3aGF0bm90IHNvIGl0IGRvZXMgbG9vayBsaWtlIGl0IG1heSBlbmQgdXAgd2l0aCBhbiBFSU5U Ui4gRXZlbiB3aXRoIDExMjAyLCBgcmJfaG9tZV9kaXJfb2ZgIGlzIHN0aWxsIGNhbGxpbmcgYGdl dGxvZ2luYCBkaXJlY3RseSBhbmQgd2l0aG91dCBlcnJvciBjaGVja2luZy4NCj4gPiANCj4gPiBJ IGFsc28gbm90aWNlZCB0aGF0IGBleHQvZXRjL2V0Yy5jYCBhbmQgYGV4dC9wdHkvcHR5LmNgIHNl ZW0gdG8gYWxzbyB1c2UgYGdldGxvZ2luYCBkaXJlY3RseSwgc28gcGVyaGFwcyB0aGV5J2xsIGFs c28gc3VmZmVyIGZyb20gdGhlIHNhbWUgaXNzdWU/IPCfpJQNCj4gDQo+IFRoYXQncyBhIGdvb2Qg cG9pbnQuICBJIGRlY2lkZWQgbm90IHRvIHJlbGVhc2UgR1ZMIGZvciBgZ2V0bG9naW5gLCBhcyBJ IGRvbid0IHRoaW5rIGl0IHNob3VsZCBibG9jayBhcyBpdCBzaG91bGQgbm90IG5lZWQgdG8gYWNj ZXNzIHRoZSBmaWxlIHN5c3RlbSwganVzdCBtZW1vcnkuICBIb3dldmVyLCBJIGFncmVlIHRoYXQg d2Ugc2hvdWxkIHN0aWxsIGFkZCBlcnJvciBjaGVja2luZy4gIE1heWJlIEkgY2FuIGRvIHRoYXQg aW4gYSBzZXBhcmF0ZSBwdWxsIHJlcXVlc3QuDQoNCkkndmUgc3VibWl0dGVkIGEgcHVsbCByZXF1 ZXN0IHRvIGFkZCBlcnJvciBjaGVja2luZyB0byBgZ2V0bG9naW5gIHRvIGByYl9ob21lX2Rpcl9v ZmAgYW5kIGBQVFkuc3Bhd25gOiBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvMTE0 MjcNCg0KSSByZXZpZXdlZCBgZ2V0bG9naW5gIHVzYWdlIGluIGBldGNgIGFuZCBpdCBhbHJlYWR5 IGhhbmRsZXMgZXJyb3JzLCBmYWxsaW5nIGJhY2sgdG8gYFVTRVJgIGVudmlyb25tZW50IHZhcmlh YmxlOg0KDQpgYGBjDQogICAgbG9naW4gPSBnZXRsb2dpbigpOw0KICAgIGlmICghbG9naW4pIGxv Z2luID0gZ2V0ZW52KCJVU0VSIik7DQpgYGANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KQnVnICMyMDU4NjogU29tZSBmaWxlc3lzdGVtIGNhbGxzIGluIGRpci5j IGFyZSBtaXNzaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjYW4gcmV0dXJuIGluY29ycmVjdCByZXN1 bHRzIGlmIGludGVycnVwdGVkDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1 ODYjY2hhbmdlLTEwOTQ4MQ0KDQoqIEF1dGhvcjogaXZvYW5qbyAoSXZvIEFuam8pDQoqIFN0YXR1 czogT3Blbg0KKiBCYWNrcG9ydDogMy4xOiBVTktOT1dOLCAzLjI6IFVOS05PV04sIDMuMzogVU5L Tk9XTg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyMjIyBCYWNr Z3JvdW5kDQoNCkhleSEgSSB3b3JrIGZvciBEYXRhZG9nIG9uIHRoZSBSdWJ5IHByb2ZpbGVyIHBh cnQgb2YgdGhlIFtgZGF0YWRvZ2AgKHByZXZpb3VzbHkgYGRkdHJhY2VgKV0oaHR0cHM6Ly9naXRo dWIuY29tL2RhdGFkb2cvZGQtdHJhY2UtcmIpIGdlbS4NCg0KQSBjdXN0b21lciByZWFjaGVkIFtv dXQgd2l0aCBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cvZGQtdHJhY2UtcmIv aXNzdWVzLzM0NTApIHdoZXJlIGVuYWJsaW5nIHRoZSBwcm9maWxlciBtYWRlIGBEaXIuZ2xvYmAg cmV0dXJuIG5vIGZpbGVzIGZvciBhIGdpdmVuIGZvbGRlcjoNCg0KV2l0aG91dCBwcm9maWxlcjoN Cg0KYGBgDQppcmIobWFpbik6MDAyOjA+IERpci5nbG9iKCcvZ2NzZnVzZS90KicpDQo9PiBbIi9n Y3NmdXNlL3Rlc3QuaHRtbCIsICIvZ2NzZnVzZS90ZXN0LnR4dCJdDQpgYGANCg0KV2l0aCBwcm9m aWxlcjoNCg0KYGBgDQppcmIobWFpbik6MDAyOjA+IERpci5nbG9iKCcvZ2NzZnVzZS90KicpDQo9 PiBbXQ0KYGBgDQoNCkl0IHR1cm5zIG91dCB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBtaXNzaW5n IGVycm9yIGhhbmRsaW5nIGluIGBkaXIuY2AuDQoNClRoZSBEYXRhZG9nIFJ1YnkgcHJvZmlsZXIs IGxpa2Ugc3RhY2twcm9mLCBwZjIgYW5kIHZlcm5pZXIsIHVzZXMgdW5peCBzaWduYWxzIHRvIGlu dGVycnVwdCB0aGUgY3VycmVudGx5LWFjdGl2ZSB0aHJlYWQgYW5kIHRha2UgYSBzYW1wbGUgKHVz dWFsbHkgYFNJR1BST0ZgKS4gV2hlbiBzb21lIHN5c3RlbSBjYWxscyBnZXQgaW50ZXJydXB0ZWQg YnkgYSBzaWduYWwsIHRoZXkgcmV0dXJuIGFuIFtFSU5UUiBlcnJvciBjb2RlXShodHRwczovL21h bjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L3NpZ25hbC43Lmh0bWwjOn46dGV4dD1JbnRlcnJ1 cHRpb24lMjBvZiUyMHN5c3RlbSUyMGNhbGxzJTIwYW5kJTIwbGlicmFyeSUyMGZ1bmN0aW9ucyUy MGJ5JTIwc2lnbmFsJTIwaGFuZGxlcnMpIGJhY2sgdG8gdGhlIGNhbGxlci4NCg0KQ29uc2lkZXIg Zm9yIGluc3RhbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGlyX2VhY2hfZW50cnlgIGluIGBk aXIuY2A6DQoNCmBgYGMNCnN0YXRpYyBWQUxVRQ0KZGlyX2VhY2hfZW50cnkoVkFMVUUgZGlyLCBW QUxVRSAoKmVhY2gpKFZBTFVFLCBWQUxVRSksIFZBTFVFIGFyZywgaW50IGNoaWxkcmVuX29ubHkp DQp7DQogICAgc3RydWN0IGRpcl9kYXRhICpkaXJwOw0KICAgIHN0cnVjdCBkaXJlbnQgKmRwOw0K ICAgIElGX05PUk1BTElaRV9VVEY4UEFUSChpbnQgbm9ybV9wKTsNCg0KICAgIEdldERJUihkaXIs IGRpcnApOw0KICAgIHJld2luZGRpcihkaXJwLT5kaXIpOw0KICAgIElGX05PUk1BTElaRV9VVEY4 UEFUSChub3JtX3AgPSBuZWVkX25vcm1hbGl6YXRpb24oZGlycC0+ZGlyLCBSU1RSSU5HX1BUUihk aXJwLT5wYXRoKSkpOw0KICAgIHdoaWxlICgoZHAgPSBSRUFERElSKGRpcnAtPmRpciwgZGlycC0+ ZW5jKSkgIT0gTlVMTCkgew0KICAgICAgLy8gLi4uIGRvIHRoaW5ncw0KICAgIH0NCiAgICByZXR1 cm4gZGlyOw0KfQ0KYGBgDQoNCklmIGBSRUFERElSYCByZXR1cm5zIGBOVUxMYCwgdGhlbiBgZGly X2VhY2hfZW50cnlgIGFzc3VtZXMgaXQgaGFzIGl0ZXJhdGVkIHRoZSBlbnRpcmUgZGlyZWN0b3J5 LiBCdXQgbG9va2luZyBbYXQgdGhlIG1hbiBwYWdlIGZvciBgcmVhZGRpcmBdKGh0dHBzOi8vbWFu Ny5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjMvcmVhZGRpci4zLmh0bWwpIHdlIHNlZSB0aGUgZm9s bG93aW5nIHNoYXJwIGVkZ2UgKGVtcGhhc2lzIG1pbmUpOg0KDQo+IEl0IHJldHVybnMgTlVMTCBv biByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBkaXJlY3Rvcnkgc3RyZWFtICoqb3IgaWYgYW4gZXJy b3Igb2NjdXJyZWQqKi4NCg0KU28gd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlzIHNpdHVhdGlvbiBp czogYHJlYWRkaXJgIGdldHMgaW50ZXJydXB0ZWQsIHJldHVybnMgYE5VTExgICsgc2V0cyBlcnJu byB0byBgRUlOVFJgLiBCdXQgYGRpcl9lYWNoX2VudHJ5YCBkb2Vzbid0IGNoZWNrIGBlcnJub2As IHNvIHJhdGhlciB0aGFuIHJhaXNpbmcgYW4gZXhjZXB0aW9uIHRvIGZsYWcgdGhlIGlzc3VlLCBp dCB0cmVhdHMgaXQgYXMgaWYgdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5IGhhcyBiZWVuIHJlYWNo ZWQuDQoNCiMjIyMgSG93IHRvIHJlcHJvZHVjZQ0KDQpSZXByb2R1Y2luZyB0aGlzIGlzIHNvbWV3 aGF0IGFubm95aW5nLCBiZWNhdXNlIGl0J3MgZGVwZW5kZW50IG9uIHRpbWluZzogdGhlIHNpZ25h bCBtdXN0IGFycml2ZSBhdCB0aGUgZXhhY3QgdGltZSB0aGUgZGlyIEFQSSBpcyBnZXR0aW5nIGV4 ZWN1dGVkLg0KDQpJIHdhcyBhYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGV2ZXJ5IHRpbWUgYnkgdXNp bmcgdGhlIFtnb29nbGUgY2xvdWQgYGdjc2Z1c2VgXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20v c3RvcmFnZS9kb2NzL2djcy1mdXNlKSB0b29sLiBUaGlzIHNvbWV3aGF0IG1ha2VzIHNlbnNlIC0t IGEgcmVtb3RlIGZpbGVzeXN0ZW0gaXMgbXVjaCBzbG93ZXIgdGhhbiBhIGxvY2FsIG9uZSwgc28g dGhlcmUncyBhIG11Y2ggYmlnZ2VyIHdpbmRvdyBvZiBvcHBvcnR1bml0eSBmb3IgYSBzaWduYWwg dG8gYXJyaXZlIHdoaWxlIHRoZSBzeXN0ZW0gY2FsbCBpcyBibG9ja2VkLg0KDQpIZXJlJ3MgYW4g ZXhhbXBsZSBJIGluY2x1ZGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RkLXRyYWNl LXJiL3B1bGwvMzcyMDoNCg0KYGBgDQojIE5vdCBzaG93bjogU2V0IHVwIGEgdHJpYWwgZ29vZ2xl IGNsb3VkIGFjY291bnQsIGluc3RhbGwgZ2NzZnVzZSwgY3JlYXRlIGEgY2xvdWQgc3RvcmFnZSBi dWNrZXQgYW5kIHB1dCBpbiBzb21lIHRlc3QgZmlsZXMNCg0KJCBnY3NmdXNlIHRlc3RfZnNfZGRf dHJhY2VfcmIgZnVzZS10ZXN0aW5nLw0KJCBscyBmdXNlLXRlc3RpbmcvDQpoZWxsby50eHQgIHRl c3QuaHRtbCAgdGVzdC50eHQNCg0KIyBOb3Qgc2hvd246IEFkZCBgZGF0YWRvZ2AgZ2VtIHRvIGBH ZW1maWxlYA0KDQokIEREX1BST0ZJTElOR19FTkFCTEVEPXRydWUgRERfUFJPRklMSU5HX0RJUl9J TlRFUlJVUFRJT05fV09SS0FST1VORF9FTkFCTEVEPWZhbHNlIGJ1bmRsZSBleGVjIGRkcHJvZnJi IGV4ZWMgcnVieSAtZSAiRGF0YWRvZzo6UHJvZmlsaW5nLndhaXRfdW50aWxfcnVubmluZzsgcHAg RGlyLmNoaWxkcmVuKCdmdXNlLXRlc3RpbmcvJykiDQpbXQ0KYGBgDQoNCkxldCBtZSBrbm93IGlm IHlvdSdkIGxpa2UgbWUgdG8gdHJ5IHRvIGNyZWF0ZSBhIHJlcHJvZHVjZXIgdGhhdCBkb2VzIG5v dCBkZXBlbmQgb24gdGhlIGBkYXRhZG9nYCBnZW0uDQoNCiMjIyMgQWRkaXRpb25hbCBub3Rlcw0K DQpJJ3ZlIHNwZW50IHF1aXRlIHNvbWUgdGltZSBsb29raW5nIGF0IHRoZSBgZGlyLmNgIHNvdXJj ZXMsIGFuZCBoZXJlJ3MgdGhlIGZ1bGwgbGlzdCBvZiBBUElzIHRoYXQgc3VmZmVyIGZyb20gaXNz dWVzOg0KDQoqIGBkaXJfZWFjaF9lbnRyeWAgZG9lcyBub3QgY2hlY2sgYGVycm5vYDsgYWxsIG9m IGl0cyB1c2VycyBoYXZlIGludGVycnVwdGlvbiBidWdzDQoqIGBkaXJfdGVsbGAgd2lsbCByZXR1 cm4gLTEgaW5zdGVhZCBvZiB0aGUgY29ycmVjdCBwb3NpdGlvbiAod2hpY2ggbWVhbnMgdGhhdCBw YXNzaW5nIC0xIHRvIGBkaXJfc2Vla2AvYGRpcl9zZXRfcG9zYCB3aWxsIGNhdXNlIGl0IHRvIG5v dCBsaXN0IHRoZSBkaXJlY3RvcnkgcHJvcGVybHkpDQoqIGBkb19vcGVuZGlyYCBhbiBlcnJvciBp biBzeXN0ZW0gY2FsbHMgd2lsbCBvbmx5IHNvbWV0aW1lcyBiZSB0dXJuZWQgaW50byBhIHJhaXNl ZCBleGNlcHRpb24NCiAgKiBJbmRpcmVjdCBjYWxsZXJzIHRoYXQgcGFzcyBpbiByYl9nbG9iX2Vy cm9yIGFzIGVycmZ1bmM6IHJiX2dsb2IsIERpci5bXSwgRGlyLmdsb2INCiAgKiBJbmRpcmVjdCBj YWxsZXJzIHRoYXQgcGFzcyBpbiAwIGFzIGVycmZ1bmM6IHJ1YnlfZ2xvYiwgcnVieV9icmFjZV9n bG9iDQoqIGBnbG9iX29wZW5kaXJgIGRvZXMgbm90IGNoZWNrIGVycm5vOyBhbGwgb2YgaXRzIHVz ZXJzIGhhdmUgaW50ZXJydXB0aW9uIGJ1Z3MNCiogYGdsb2JfZ2V0ZW50YCBkb2VzIG5vdCBjaGVj ayBlcnJubzsgYWxsIG9mIGl0cyB1c2VycyBoYXZlIGludGVycnVwdGlvbiBidWdzDQoqIGBub2d2 bF9kaXJfZW1wdHlfcGAgZG9lcyBub3QgY2hlY2sgZXJybm8gKG9mIHJlYWRkaXIhIGl0IGFjdHVh bGx5IGNoZWNrcyBmb3Igb3BlbmRpcik7IGFsbCBvZiBpdHMgdXNlcnMgaGF2ZSBpbnRlcnJ1cHRp b24gYnVncw0KDQpMZXNzIHN1cmUgYWJvdXQgdGhlc2U6DQoNCiogYGRvX3N0YXRgL2Bkb19sc3Rh dGAgd2lsbCB0dXJuIGVycm9ycyBpbnRvIHdhcm5pbmdzICh1bmNsZWFyIGlmIGVuYWJsZWQgb3Ig ZGlzYWJsZWQgYnkgZGVmYXVsdCkNCiogYG5lZWRfbm9ybWFsaXphdGlvbmAgY2FsbHMgYGZnZXRh dHRybGlzdGAgLyBgZ2V0YXR0cmxpc3RgIGFuZCBhbGwgZXJyb3JzIGAocmV0ICE9IDApYCBhcmUg dHJlYXRlZCBpbiB0aGUgc2FtZSB3YXkNCiogYHJiX2dsb2JfZXJyb3JgIGlzIGFuZCBgcmJfZ2xv Yl9jYWxsZXJgIGxlYXZlIGV4Y2VwdGlvbnMgYXMgcGVuZGluZyBhbmQgcmVseSBvbiBjYWxsZXJz IHRvIHJhaXNlIHRoZW0gcHJvcGVybHkNCiogRXJyb3IgaGFuZGxpbmcgb2YgYHJiX2hvbWVfZGly X29mYCBhbmQgYHJiX2RlZmF1bHRfaG9tZV9kaXJgIGFyZSBhIGJpdCBzdXNwaWNpb3VzDQoNCkFz IGEgd29ya2Fyb3VuZCBpbiB0aGUgRGF0YWRvZyBSdWJ5IHByb2ZpbGVyLCBpbiBodHRwczovL2dp dGh1Yi5jb20vRGF0YURvZy9kZC10cmFjZS1yYi9wdWxsLzM3MjAgSSd2ZSBhZGRlZCBtb25rZXkg cGF0Y2hlcyB0byBhbGwgb2YgdGhlIFJ1YnktbGV2ZWwgQVBJcyB0aGF0IHVzZSB0aGUgYWJvdmUg ZnVuY3Rpb25zIGFuZCBtYXNrIG91dCBgU0lHUFJPRmAgc28gdGhlc2UgY2FsbHMgYXJlIG5ldmVy IGludGVycnVwdGVkLg0KDQpUaGlzIHNvbHV0aW9uIGlzIGRvZXMgc3VjY2Vzc2Z1bGx5IHdvcmsg YXJvdW5kIHRoZSBpc3N1ZSwgYWx0aG91Z2ggaXQgcHJldmVudHMgdGhlIHByb2ZpbGVyIGZyb20g c2FtcGxpbmcgZHVyaW5nIHRoZXNlIHN5c3RlbSBjYWxscywgd2hpY2ggd2lsbCBtZWFuIGxlc3Mg dmlzaWJpbGl0eSBpZiBlLmcuIHRoZXNlIGNhbGxzIGFyZSB0YWtpbmcgYSBsb25nIHRpbWUuIEFu ZCB3ZWxsLCBtYWludGFpbmluZyBtb25rZXkgcGF0Y2hlcyBpcyBhbHdheXMgcHJvYmxlbWF0aWMg Zm9yIGZ1dHVyZSBSdWJ5IGNvbXBhdGliaWxpdHkuDQoNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KcmVhZGRpci1idWctcmVwcm8uYyAoMi4xMSBLQikNCg0KDQot LSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1j b3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVi eS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8v bWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9y Zy8=