[ruby-core:118898] [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-19 22:32:25 UTC
List:
ruby-core #118898
SXNzdWUgIzIwNTg2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgamVyZW15ZXZhbnMwIChKZXJlbXkgRXZh bnMpLg0KDQoNCkFub255bW91cyB3cm90ZSBpbiAjbm90ZS04Og0KPiAgYHJiX2dldHB3ZGlybmFt X2Zvcl9sb2dpbmAgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYW55IGV4cGxpY2l0DQo+ICBoYW5k bGluZyBmb3IgYEVJTlRSYC4gSG93ZXZlciwgaXQgL2lzLyBiZWluZyB0cmVhdGVkIGFzIGFuDQo+ ICBlcnJvclswXVsxXSwgc28gc2hvdWxkIG5ldmVyIHJlc3VsdCBpbiBhIGZhbHNlIG5lZ2F0aXZl ICgibm8gcmVjb3JkDQo+ICBmb3VuZCBmb3IgdGhlIHN1cHBsaWVkIGxvZ2luX25hbWUiKS4NCj4g IA0KPiAgSSB0aGluayBpdCBjb3VsZCBiZSBtYWRlIHRvIHJldHJ5IG9uIGBFSU5UUmAsIHNvIHNp Z25hbHMgc3VjaCBhcw0KPiAgYFNJR1BST0ZgIHRyaWdnZXJpbmcgYEVJTlRSYCB3b3VsZCBub3Qg cmVzdWx0IGluIHVubmVjZXNzYXJ5DQo+ICBlcnJvcnMuIEFuIHVudGVzdGVkIHBhdGNoIGZvciB0 aGlzIGlzIGluY2x1ZGVkIGJlbG93Lg0KDQpJIHRoaW5rIHRoaXMgaXMgZXhwZWN0ZWQuICBUaGUg Y29uc2Vuc3VzIHNlZW1zIHRvIGJlIHRoYXQgd2Ugc2hvdWxkIHJhaXNlIGFuIGVycm9yLiAgTWF5 YmUgd2UgY291bGQgY2hhbmdlIHRoZSBoYW5kbGluZyB0byByZXRyeSBjZXJ0YWluIGNhbGxzIGlu IHRoZSBmdXR1cmUsIHRob3VnaC4gTWF5YmUgYGdldHB3bmFtYCBpcyBzYWZlLCBidXQgSSdtIG5v dCBwb3NpdGl2ZSBpdCBpcyBpbiBhbGwgY2FzZXMuICBJdCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSB0 aGUgc2FtZSBpc3N1ZXMgYXMgYHJlYWRkaXJgLCBidXQgaWYgdGhlIGNhbGwgZG9lcyB0YWtlIGEg c3Vic3RhbnRpYWwgYW1vdW50IG9mIHRpbWUsIEkgY291bGQgc2VlIGl0IGNvbnRpbnVhbGx5IGZh aWxpbmcgaWYgU0lHUFJPRiBpbnRlcnZhbCBpcyBzaG9ydGVyIHRoYW4gc3lzdGVtIGNhbGwgdGlt ZS4NCg0KaXZvYW5qbyAoSXZvIEFuam8pIHdyb3RlIGluICNub3RlLTk6DQo+IFRoZSBvbmx5IChw b3RlbnRpYWw/KSBpc3N1ZSBJIHN0aWxsIHNlZSBpcyB3aXRoIGNhbGxzIHRvIGBnZXRsb2dpbmAg LS0gdGhhdCBvbmUgc2VlbXMgdG8gYm90dG9tIG91dCBvbiBhIG51bWJlciBvZiBJTyByZWFkcyBh bmQgd2hhdG5vdCBzbyBpdCBkb2VzIGxvb2sgbGlrZSBpdCBtYXkgZW5kIHVwIHdpdGggYW4gRUlO VFIuIEV2ZW4gd2l0aCAxMTIwMiwgYHJiX2hvbWVfZGlyX29mYCBpcyBzdGlsbCBjYWxsaW5nIGBn ZXRsb2dpbmAgZGlyZWN0bHkgYW5kIHdpdGhvdXQgZXJyb3IgY2hlY2tpbmcuDQo+IA0KPiBJIGFs c28gbm90aWNlZCB0aGF0IGBleHQvZXRjL2V0Yy5jYCBhbmQgYGV4dC9wdHkvcHR5LmNgIHNlZW0g dG8gYWxzbyB1c2UgYGdldGxvZ2luYCBkaXJlY3RseSwgc28gcGVyaGFwcyB0aGV5J2xsIGFsc28g c3VmZmVyIGZyb20gdGhlIHNhbWUgaXNzdWU/IPCfpJQNCg0KVGhhdCdzIGEgZ29vZCBwb2ludC4g IEkgZGVjaWRlZCBub3QgdG8gcmVsZWFzZSBHVkwgZm9yIGBnZXRsb2dpbmAsIGFzIEkgZG9uJ3Qg dGhpbmsgaXQgc2hvdWxkIGJsb2NrIGFzIGl0IHNob3VsZCBub3QgbmVlZCB0byBhY2Nlc3MgdGhl IGZpbGUgc3lzdGVtLCBqdXN0IG1lbW9yeS4gIEhvd2V2ZXIsIEkgYWdyZWUgdGhhdCB3ZSBzaG91 bGQgc3RpbGwgYWRkIGVycm9yIGNoZWNraW5nLiAgTWF5YmUgSSBjYW4gZG8gdGhhdCBpbiBhIHNl cGFyYXRlIHB1bGwgcmVxdWVzdC4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KQnVnICMyMDU4NjogU29tZSBmaWxlc3lzdGVtIGNhbGxzIGluIGRpci5jIGFyZSBt aXNzaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjYW4gcmV0dXJuIGluY29ycmVjdCByZXN1bHRzIGlm IGludGVycnVwdGVkDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1ODYjY2hh bmdlLTEwOTQ2Nw0KDQoqIEF1dGhvcjogaXZvYW5qbyAoSXZvIEFuam8pDQoqIFN0YXR1czogT3Bl bg0KKiBCYWNrcG9ydDogMy4xOiBVTktOT1dOLCAzLjI6IFVOS05PV04sIDMuMzogVU5LTk9XTg0K LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyMjIyBCYWNrZ3JvdW5k DQoNCkhleSEgSSB3b3JrIGZvciBEYXRhZG9nIG9uIHRoZSBSdWJ5IHByb2ZpbGVyIHBhcnQgb2Yg dGhlIFtgZGF0YWRvZ2AgKHByZXZpb3VzbHkgYGRkdHJhY2VgKV0oaHR0cHM6Ly9naXRodWIuY29t L2RhdGFkb2cvZGQtdHJhY2UtcmIpIGdlbS4NCg0KQSBjdXN0b21lciByZWFjaGVkIFtvdXQgd2l0 aCBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cvZGQtdHJhY2UtcmIvaXNzdWVz LzM0NTApIHdoZXJlIGVuYWJsaW5nIHRoZSBwcm9maWxlciBtYWRlIGBEaXIuZ2xvYmAgcmV0dXJu IG5vIGZpbGVzIGZvciBhIGdpdmVuIGZvbGRlcjoNCg0KV2l0aG91dCBwcm9maWxlcjoNCg0KYGBg DQppcmIobWFpbik6MDAyOjA+IERpci5nbG9iKCcvZ2NzZnVzZS90KicpDQo9PiBbIi9nY3NmdXNl L3Rlc3QuaHRtbCIsICIvZ2NzZnVzZS90ZXN0LnR4dCJdDQpgYGANCg0KV2l0aCBwcm9maWxlcjoN Cg0KYGBgDQppcmIobWFpbik6MDAyOjA+IERpci5nbG9iKCcvZ2NzZnVzZS90KicpDQo9PiBbXQ0K YGBgDQoNCkl0IHR1cm5zIG91dCB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBtaXNzaW5nIGVycm9y IGhhbmRsaW5nIGluIGBkaXIuY2AuDQoNClRoZSBEYXRhZG9nIFJ1YnkgcHJvZmlsZXIsIGxpa2Ug c3RhY2twcm9mLCBwZjIgYW5kIHZlcm5pZXIsIHVzZXMgdW5peCBzaWduYWxzIHRvIGludGVycnVw dCB0aGUgY3VycmVudGx5LWFjdGl2ZSB0aHJlYWQgYW5kIHRha2UgYSBzYW1wbGUgKHVzdWFsbHkg YFNJR1BST0ZgKS4gV2hlbiBzb21lIHN5c3RlbSBjYWxscyBnZXQgaW50ZXJydXB0ZWQgYnkgYSBz aWduYWwsIHRoZXkgcmV0dXJuIGFuIFtFSU5UUiBlcnJvciBjb2RlXShodHRwczovL21hbjcub3Jn L2xpbnV4L21hbi1wYWdlcy9tYW43L3NpZ25hbC43Lmh0bWwjOn46dGV4dD1JbnRlcnJ1cHRpb24l MjBvZiUyMHN5c3RlbSUyMGNhbGxzJTIwYW5kJTIwbGlicmFyeSUyMGZ1bmN0aW9ucyUyMGJ5JTIw c2lnbmFsJTIwaGFuZGxlcnMpIGJhY2sgdG8gdGhlIGNhbGxlci4NCg0KQ29uc2lkZXIgZm9yIGlu c3RhbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGlyX2VhY2hfZW50cnlgIGluIGBkaXIuY2A6 DQoNCmBgYGMNCnN0YXRpYyBWQUxVRQ0KZGlyX2VhY2hfZW50cnkoVkFMVUUgZGlyLCBWQUxVRSAo KmVhY2gpKFZBTFVFLCBWQUxVRSksIFZBTFVFIGFyZywgaW50IGNoaWxkcmVuX29ubHkpDQp7DQog ICAgc3RydWN0IGRpcl9kYXRhICpkaXJwOw0KICAgIHN0cnVjdCBkaXJlbnQgKmRwOw0KICAgIElG X05PUk1BTElaRV9VVEY4UEFUSChpbnQgbm9ybV9wKTsNCg0KICAgIEdldERJUihkaXIsIGRpcnAp Ow0KICAgIHJld2luZGRpcihkaXJwLT5kaXIpOw0KICAgIElGX05PUk1BTElaRV9VVEY4UEFUSChu b3JtX3AgPSBuZWVkX25vcm1hbGl6YXRpb24oZGlycC0+ZGlyLCBSU1RSSU5HX1BUUihkaXJwLT5w YXRoKSkpOw0KICAgIHdoaWxlICgoZHAgPSBSRUFERElSKGRpcnAtPmRpciwgZGlycC0+ZW5jKSkg IT0gTlVMTCkgew0KICAgICAgLy8gLi4uIGRvIHRoaW5ncw0KICAgIH0NCiAgICByZXR1cm4gZGly Ow0KfQ0KYGBgDQoNCklmIGBSRUFERElSYCByZXR1cm5zIGBOVUxMYCwgdGhlbiBgZGlyX2VhY2hf ZW50cnlgIGFzc3VtZXMgaXQgaGFzIGl0ZXJhdGVkIHRoZSBlbnRpcmUgZGlyZWN0b3J5LiBCdXQg bG9va2luZyBbYXQgdGhlIG1hbiBwYWdlIGZvciBgcmVhZGRpcmBdKGh0dHBzOi8vbWFuNy5vcmcv bGludXgvbWFuLXBhZ2VzL21hbjMvcmVhZGRpci4zLmh0bWwpIHdlIHNlZSB0aGUgZm9sbG93aW5n IHNoYXJwIGVkZ2UgKGVtcGhhc2lzIG1pbmUpOg0KDQo+IEl0IHJldHVybnMgTlVMTCBvbiByZWFj aGluZyB0aGUgZW5kIG9mIHRoZSBkaXJlY3Rvcnkgc3RyZWFtICoqb3IgaWYgYW4gZXJyb3Igb2Nj dXJyZWQqKi4NCg0KU28gd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlzIHNpdHVhdGlvbiBpczogYHJl YWRkaXJgIGdldHMgaW50ZXJydXB0ZWQsIHJldHVybnMgYE5VTExgICsgc2V0cyBlcnJubyB0byBg RUlOVFJgLiBCdXQgYGRpcl9lYWNoX2VudHJ5YCBkb2Vzbid0IGNoZWNrIGBlcnJub2AsIHNvIHJh dGhlciB0aGFuIHJhaXNpbmcgYW4gZXhjZXB0aW9uIHRvIGZsYWcgdGhlIGlzc3VlLCBpdCB0cmVh dHMgaXQgYXMgaWYgdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5IGhhcyBiZWVuIHJlYWNoZWQuDQoN CiMjIyMgSG93IHRvIHJlcHJvZHVjZQ0KDQpSZXByb2R1Y2luZyB0aGlzIGlzIHNvbWV3aGF0IGFu bm95aW5nLCBiZWNhdXNlIGl0J3MgZGVwZW5kZW50IG9uIHRpbWluZzogdGhlIHNpZ25hbCBtdXN0 IGFycml2ZSBhdCB0aGUgZXhhY3QgdGltZSB0aGUgZGlyIEFQSSBpcyBnZXR0aW5nIGV4ZWN1dGVk Lg0KDQpJIHdhcyBhYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGV2ZXJ5IHRpbWUgYnkgdXNpbmcgdGhl IFtnb29nbGUgY2xvdWQgYGdjc2Z1c2VgXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vc3RvcmFn ZS9kb2NzL2djcy1mdXNlKSB0b29sLiBUaGlzIHNvbWV3aGF0IG1ha2VzIHNlbnNlIC0tIGEgcmVt b3RlIGZpbGVzeXN0ZW0gaXMgbXVjaCBzbG93ZXIgdGhhbiBhIGxvY2FsIG9uZSwgc28gdGhlcmUn cyBhIG11Y2ggYmlnZ2VyIHdpbmRvdyBvZiBvcHBvcnR1bml0eSBmb3IgYSBzaWduYWwgdG8gYXJy aXZlIHdoaWxlIHRoZSBzeXN0ZW0gY2FsbCBpcyBibG9ja2VkLg0KDQpIZXJlJ3MgYW4gZXhhbXBs ZSBJIGluY2x1ZGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RkLXRyYWNlLXJiL3B1 bGwvMzcyMDoNCg0KYGBgDQojIE5vdCBzaG93bjogU2V0IHVwIGEgdHJpYWwgZ29vZ2xlIGNsb3Vk IGFjY291bnQsIGluc3RhbGwgZ2NzZnVzZSwgY3JlYXRlIGEgY2xvdWQgc3RvcmFnZSBidWNrZXQg YW5kIHB1dCBpbiBzb21lIHRlc3QgZmlsZXMNCg0KJCBnY3NmdXNlIHRlc3RfZnNfZGRfdHJhY2Vf cmIgZnVzZS10ZXN0aW5nLw0KJCBscyBmdXNlLXRlc3RpbmcvDQpoZWxsby50eHQgIHRlc3QuaHRt bCAgdGVzdC50eHQNCg0KIyBOb3Qgc2hvd246IEFkZCBgZGF0YWRvZ2AgZ2VtIHRvIGBHZW1maWxl YA0KDQokIEREX1BST0ZJTElOR19FTkFCTEVEPXRydWUgRERfUFJPRklMSU5HX0RJUl9JTlRFUlJV UFRJT05fV09SS0FST1VORF9FTkFCTEVEPWZhbHNlIGJ1bmRsZSBleGVjIGRkcHJvZnJiIGV4ZWMg cnVieSAtZSAiRGF0YWRvZzo6UHJvZmlsaW5nLndhaXRfdW50aWxfcnVubmluZzsgcHAgRGlyLmNo aWxkcmVuKCdmdXNlLXRlc3RpbmcvJykiDQpbXQ0KYGBgDQoNCkxldCBtZSBrbm93IGlmIHlvdSdk IGxpa2UgbWUgdG8gdHJ5IHRvIGNyZWF0ZSBhIHJlcHJvZHVjZXIgdGhhdCBkb2VzIG5vdCBkZXBl bmQgb24gdGhlIGBkYXRhZG9nYCBnZW0uDQoNCiMjIyMgQWRkaXRpb25hbCBub3Rlcw0KDQpJJ3Zl IHNwZW50IHF1aXRlIHNvbWUgdGltZSBsb29raW5nIGF0IHRoZSBgZGlyLmNgIHNvdXJjZXMsIGFu ZCBoZXJlJ3MgdGhlIGZ1bGwgbGlzdCBvZiBBUElzIHRoYXQgc3VmZmVyIGZyb20gaXNzdWVzOg0K DQoqIGBkaXJfZWFjaF9lbnRyeWAgZG9lcyBub3QgY2hlY2sgYGVycm5vYDsgYWxsIG9mIGl0cyB1 c2VycyBoYXZlIGludGVycnVwdGlvbiBidWdzDQoqIGBkaXJfdGVsbGAgd2lsbCByZXR1cm4gLTEg aW5zdGVhZCBvZiB0aGUgY29ycmVjdCBwb3NpdGlvbiAod2hpY2ggbWVhbnMgdGhhdCBwYXNzaW5n IC0xIHRvIGBkaXJfc2Vla2AvYGRpcl9zZXRfcG9zYCB3aWxsIGNhdXNlIGl0IHRvIG5vdCBsaXN0 IHRoZSBkaXJlY3RvcnkgcHJvcGVybHkpDQoqIGBkb19vcGVuZGlyYCBhbiBlcnJvciBpbiBzeXN0 ZW0gY2FsbHMgd2lsbCBvbmx5IHNvbWV0aW1lcyBiZSB0dXJuZWQgaW50byBhIHJhaXNlZCBleGNl cHRpb24NCiAgKiBJbmRpcmVjdCBjYWxsZXJzIHRoYXQgcGFzcyBpbiByYl9nbG9iX2Vycm9yIGFz IGVycmZ1bmM6IHJiX2dsb2IsIERpci5bXSwgRGlyLmdsb2INCiAgKiBJbmRpcmVjdCBjYWxsZXJz IHRoYXQgcGFzcyBpbiAwIGFzIGVycmZ1bmM6IHJ1YnlfZ2xvYiwgcnVieV9icmFjZV9nbG9iDQoq IGBnbG9iX29wZW5kaXJgIGRvZXMgbm90IGNoZWNrIGVycm5vOyBhbGwgb2YgaXRzIHVzZXJzIGhh dmUgaW50ZXJydXB0aW9uIGJ1Z3MNCiogYGdsb2JfZ2V0ZW50YCBkb2VzIG5vdCBjaGVjayBlcnJu bzsgYWxsIG9mIGl0cyB1c2VycyBoYXZlIGludGVycnVwdGlvbiBidWdzDQoqIGBub2d2bF9kaXJf ZW1wdHlfcGAgZG9lcyBub3QgY2hlY2sgZXJybm8gKG9mIHJlYWRkaXIhIGl0IGFjdHVhbGx5IGNo ZWNrcyBmb3Igb3BlbmRpcik7IGFsbCBvZiBpdHMgdXNlcnMgaGF2ZSBpbnRlcnJ1cHRpb24gYnVn cw0KDQpMZXNzIHN1cmUgYWJvdXQgdGhlc2U6DQoNCiogYGRvX3N0YXRgL2Bkb19sc3RhdGAgd2ls bCB0dXJuIGVycm9ycyBpbnRvIHdhcm5pbmdzICh1bmNsZWFyIGlmIGVuYWJsZWQgb3IgZGlzYWJs ZWQgYnkgZGVmYXVsdCkNCiogYG5lZWRfbm9ybWFsaXphdGlvbmAgY2FsbHMgYGZnZXRhdHRybGlz dGAgLyBgZ2V0YXR0cmxpc3RgIGFuZCBhbGwgZXJyb3JzIGAocmV0ICE9IDApYCBhcmUgdHJlYXRl ZCBpbiB0aGUgc2FtZSB3YXkNCiogYHJiX2dsb2JfZXJyb3JgIGlzIGFuZCBgcmJfZ2xvYl9jYWxs ZXJgIGxlYXZlIGV4Y2VwdGlvbnMgYXMgcGVuZGluZyBhbmQgcmVseSBvbiBjYWxsZXJzIHRvIHJh aXNlIHRoZW0gcHJvcGVybHkNCiogRXJyb3IgaGFuZGxpbmcgb2YgYHJiX2hvbWVfZGlyX29mYCBh bmQgYHJiX2RlZmF1bHRfaG9tZV9kaXJgIGFyZSBhIGJpdCBzdXNwaWNpb3VzDQoNCkFzIGEgd29y a2Fyb3VuZCBpbiB0aGUgRGF0YWRvZyBSdWJ5IHByb2ZpbGVyLCBpbiBodHRwczovL2dpdGh1Yi5j b20vRGF0YURvZy9kZC10cmFjZS1yYi9wdWxsLzM3MjAgSSd2ZSBhZGRlZCBtb25rZXkgcGF0Y2hl cyB0byBhbGwgb2YgdGhlIFJ1YnktbGV2ZWwgQVBJcyB0aGF0IHVzZSB0aGUgYWJvdmUgZnVuY3Rp b25zIGFuZCBtYXNrIG91dCBgU0lHUFJPRmAgc28gdGhlc2UgY2FsbHMgYXJlIG5ldmVyIGludGVy cnVwdGVkLg0KDQpUaGlzIHNvbHV0aW9uIGlzIGRvZXMgc3VjY2Vzc2Z1bGx5IHdvcmsgYXJvdW5k IHRoZSBpc3N1ZSwgYWx0aG91Z2ggaXQgcHJldmVudHMgdGhlIHByb2ZpbGVyIGZyb20gc2FtcGxp bmcgZHVyaW5nIHRoZXNlIHN5c3RlbSBjYWxscywgd2hpY2ggd2lsbCBtZWFuIGxlc3MgdmlzaWJp bGl0eSBpZiBlLmcuIHRoZXNlIGNhbGxzIGFyZSB0YWtpbmcgYSBsb25nIHRpbWUuIEFuZCB3ZWxs LCBtYWludGFpbmluZyBtb25rZXkgcGF0Y2hlcyBpcyBhbHdheXMgcHJvYmxlbWF0aWMgZm9yIGZ1 dHVyZSBSdWJ5IGNvbXBhdGliaWxpdHkuDQoNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KcmVhZGRpci1idWctcmVwcm8uYyAoMi4xMSBLQikNCg0KDQotLSANCmh0 dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1s LnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3Jl LWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVi eS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=