[ruby-core:118919] [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-22 08:03:17 UTC
List:
ruby-core #118919
SXNzdWUgIzIwNTg2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgaXZvYW5qbyAoSXZvIEFuam8pLg0KDQoN CmplcmVteWV2YW5zMCAoSmVyZW15IEV2YW5zKSB3cm90ZSBpbiAjbm90ZS0xMToNCj4gDQo+IEkn dmUgc3VibWl0dGVkIGEgcHVsbCByZXF1ZXN0IHRvIGFkZCBlcnJvciBjaGVja2luZyB0byBgZ2V0 bG9naW5gIHRvIGByYl9ob21lX2Rpcl9vZmAgYW5kIGBQVFkuc3Bhd25gOiBodHRwczovL2dpdGh1 Yi5jb20vcnVieS9ydWJ5L3B1bGwvMTE0MjcNCj4gDQo+IEkgcmV2aWV3ZWQgYGdldGxvZ2luYCB1 c2FnZSBpbiBgZXRjYCBhbmQgaXQgYWxyZWFkeSBoYW5kbGVzIGVycm9ycywgZmFsbGluZyBiYWNr IHRvIGBVU0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZToNCj4gDQo+IGBgYGMNCj4gICAgIGxvZ2lu ID0gZ2V0bG9naW4oKTsNCj4gICAgIGlmICghbG9naW4pIGxvZ2luID0gZ2V0ZW52KCJVU0VSIik7 DQo+IGBgYA0KDQrwn5GN8J+RjfCfkY0NCg0KVGhlICJ3aGF0J3MgdGhlIHdvcnN0IHRoaW5nIHRo YXQgY2FuIGhhcHBlbiIgc3BpZHkgc2Vuc2UgbWFrZXMgbWUgdGhpbmsgdGhhdCBhdXRvbWF0aWNh bGx5IGZhbGxpbmcgYmFjayBvbiBlcnJvcnMgdGhhdCBjb3VsZCBiZSB0cmFuc2llbnQgY291bGQg bWVhbiB0aGF0IHN1Y2ggY2FsbHMgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGJlaGF2ZSBkaWZmZXJl bnRseSBvbmNlLWluLWEtYmx1ZS1tb29uIChlLmcuIHdoZW4gdGhlIGZhbGxiYWNrIGtpY2tzIGlu KS4NCg0KT24gdGhlIG90aGVyIGhhbmQgcmFpc2luZyBvbiBlcnJvciBjYW4gbWVhbiBmYWlsdXJl IG9uIG5vbi10cmFuc2llbnQgZXJyb3JzIChhbmQgd2hpY2ggb25lcyBhcmUgdHJhbnNpZW50IG9y IG5vdD8/KSBhcyB3ZWxsIGFzIHJhcmUgZXhjZXB0aW9ucyBiZWluZyByYWlzZWQgb25jZS1pbi1h LWJsdWUtbW9vbiwgd2hpY2ggZG9lcyBub3Qgc2VlbSB2ZXJ5IG5pY2UgZWl0aGVyLCBzbyBJIHRo aW5rIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgcmVhc29uYWJsZS4NCg0KLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQnVnICMyMDU4NjogU29tZSBmaWxlc3lzdGVtIGNh bGxzIGluIGRpci5jIGFyZSBtaXNzaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBjYW4gcmV0dXJuIGlu Y29ycmVjdCByZXN1bHRzIGlmIGludGVycnVwdGVkDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMjA1ODYjY2hhbmdlLTEwOTQ4OQ0KDQoqIEF1dGhvcjogaXZvYW5qbyAoSXZvIEFu am8pDQoqIFN0YXR1czogT3Blbg0KKiBCYWNrcG9ydDogMy4xOiBVTktOT1dOLCAzLjI6IFVOS05P V04sIDMuMzogVU5LTk9XTg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KIyMjIyBCYWNrZ3JvdW5kDQoNCkhleSEgSSB3b3JrIGZvciBEYXRhZG9nIG9uIHRoZSBSdWJ5 IHByb2ZpbGVyIHBhcnQgb2YgdGhlIFtgZGF0YWRvZ2AgKHByZXZpb3VzbHkgYGRkdHJhY2VgKV0o aHR0cHM6Ly9naXRodWIuY29tL2RhdGFkb2cvZGQtdHJhY2UtcmIpIGdlbS4NCg0KQSBjdXN0b21l ciByZWFjaGVkIFtvdXQgd2l0aCBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cv ZGQtdHJhY2UtcmIvaXNzdWVzLzM0NTApIHdoZXJlIGVuYWJsaW5nIHRoZSBwcm9maWxlciBtYWRl IGBEaXIuZ2xvYmAgcmV0dXJuIG5vIGZpbGVzIGZvciBhIGdpdmVuIGZvbGRlcjoNCg0KV2l0aG91 dCBwcm9maWxlcjoNCg0KYGBgDQppcmIobWFpbik6MDAyOjA+IERpci5nbG9iKCcvZ2NzZnVzZS90 KicpDQo9PiBbIi9nY3NmdXNlL3Rlc3QuaHRtbCIsICIvZ2NzZnVzZS90ZXN0LnR4dCJdDQpgYGAN Cg0KV2l0aCBwcm9maWxlcjoNCg0KYGBgDQppcmIobWFpbik6MDAyOjA+IERpci5nbG9iKCcvZ2Nz ZnVzZS90KicpDQo9PiBbXQ0KYGBgDQoNCkl0IHR1cm5zIG91dCB0aGUgaXNzdWUgaXMgcmVsYXRl ZCB0byBtaXNzaW5nIGVycm9yIGhhbmRsaW5nIGluIGBkaXIuY2AuDQoNClRoZSBEYXRhZG9nIFJ1 YnkgcHJvZmlsZXIsIGxpa2Ugc3RhY2twcm9mLCBwZjIgYW5kIHZlcm5pZXIsIHVzZXMgdW5peCBz aWduYWxzIHRvIGludGVycnVwdCB0aGUgY3VycmVudGx5LWFjdGl2ZSB0aHJlYWQgYW5kIHRha2Ug YSBzYW1wbGUgKHVzdWFsbHkgYFNJR1BST0ZgKS4gV2hlbiBzb21lIHN5c3RlbSBjYWxscyBnZXQg aW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIHRoZXkgcmV0dXJuIGFuIFtFSU5UUiBlcnJvciBjb2Rl XShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L3NpZ25hbC43Lmh0bWwjOn46 dGV4dD1JbnRlcnJ1cHRpb24lMjBvZiUyMHN5c3RlbSUyMGNhbGxzJTIwYW5kJTIwbGlicmFyeSUy MGZ1bmN0aW9ucyUyMGJ5JTIwc2lnbmFsJTIwaGFuZGxlcnMpIGJhY2sgdG8gdGhlIGNhbGxlci4N Cg0KQ29uc2lkZXIgZm9yIGluc3RhbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGlyX2VhY2hf ZW50cnlgIGluIGBkaXIuY2A6DQoNCmBgYGMNCnN0YXRpYyBWQUxVRQ0KZGlyX2VhY2hfZW50cnko VkFMVUUgZGlyLCBWQUxVRSAoKmVhY2gpKFZBTFVFLCBWQUxVRSksIFZBTFVFIGFyZywgaW50IGNo aWxkcmVuX29ubHkpDQp7DQogICAgc3RydWN0IGRpcl9kYXRhICpkaXJwOw0KICAgIHN0cnVjdCBk aXJlbnQgKmRwOw0KICAgIElGX05PUk1BTElaRV9VVEY4UEFUSChpbnQgbm9ybV9wKTsNCg0KICAg IEdldERJUihkaXIsIGRpcnApOw0KICAgIHJld2luZGRpcihkaXJwLT5kaXIpOw0KICAgIElGX05P Uk1BTElaRV9VVEY4UEFUSChub3JtX3AgPSBuZWVkX25vcm1hbGl6YXRpb24oZGlycC0+ZGlyLCBS U1RSSU5HX1BUUihkaXJwLT5wYXRoKSkpOw0KICAgIHdoaWxlICgoZHAgPSBSRUFERElSKGRpcnAt PmRpciwgZGlycC0+ZW5jKSkgIT0gTlVMTCkgew0KICAgICAgLy8gLi4uIGRvIHRoaW5ncw0KICAg IH0NCiAgICByZXR1cm4gZGlyOw0KfQ0KYGBgDQoNCklmIGBSRUFERElSYCByZXR1cm5zIGBOVUxM YCwgdGhlbiBgZGlyX2VhY2hfZW50cnlgIGFzc3VtZXMgaXQgaGFzIGl0ZXJhdGVkIHRoZSBlbnRp cmUgZGlyZWN0b3J5LiBCdXQgbG9va2luZyBbYXQgdGhlIG1hbiBwYWdlIGZvciBgcmVhZGRpcmBd KGh0dHBzOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjMvcmVhZGRpci4zLmh0bWwpIHdl IHNlZSB0aGUgZm9sbG93aW5nIHNoYXJwIGVkZ2UgKGVtcGhhc2lzIG1pbmUpOg0KDQo+IEl0IHJl dHVybnMgTlVMTCBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBkaXJlY3Rvcnkgc3RyZWFtICoq b3IgaWYgYW4gZXJyb3Igb2NjdXJyZWQqKi4NCg0KU28gd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlz IHNpdHVhdGlvbiBpczogYHJlYWRkaXJgIGdldHMgaW50ZXJydXB0ZWQsIHJldHVybnMgYE5VTExg ICsgc2V0cyBlcnJubyB0byBgRUlOVFJgLiBCdXQgYGRpcl9lYWNoX2VudHJ5YCBkb2Vzbid0IGNo ZWNrIGBlcnJub2AsIHNvIHJhdGhlciB0aGFuIHJhaXNpbmcgYW4gZXhjZXB0aW9uIHRvIGZsYWcg dGhlIGlzc3VlLCBpdCB0cmVhdHMgaXQgYXMgaWYgdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5IGhh cyBiZWVuIHJlYWNoZWQuDQoNCiMjIyMgSG93IHRvIHJlcHJvZHVjZQ0KDQpSZXByb2R1Y2luZyB0 aGlzIGlzIHNvbWV3aGF0IGFubm95aW5nLCBiZWNhdXNlIGl0J3MgZGVwZW5kZW50IG9uIHRpbWlu ZzogdGhlIHNpZ25hbCBtdXN0IGFycml2ZSBhdCB0aGUgZXhhY3QgdGltZSB0aGUgZGlyIEFQSSBp cyBnZXR0aW5nIGV4ZWN1dGVkLg0KDQpJIHdhcyBhYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGV2ZXJ5 IHRpbWUgYnkgdXNpbmcgdGhlIFtnb29nbGUgY2xvdWQgYGdjc2Z1c2VgXShodHRwczovL2Nsb3Vk Lmdvb2dsZS5jb20vc3RvcmFnZS9kb2NzL2djcy1mdXNlKSB0b29sLiBUaGlzIHNvbWV3aGF0IG1h a2VzIHNlbnNlIC0tIGEgcmVtb3RlIGZpbGVzeXN0ZW0gaXMgbXVjaCBzbG93ZXIgdGhhbiBhIGxv Y2FsIG9uZSwgc28gdGhlcmUncyBhIG11Y2ggYmlnZ2VyIHdpbmRvdyBvZiBvcHBvcnR1bml0eSBm b3IgYSBzaWduYWwgdG8gYXJyaXZlIHdoaWxlIHRoZSBzeXN0ZW0gY2FsbCBpcyBibG9ja2VkLg0K DQpIZXJlJ3MgYW4gZXhhbXBsZSBJIGluY2x1ZGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRh RG9nL2RkLXRyYWNlLXJiL3B1bGwvMzcyMDoNCg0KYGBgDQojIE5vdCBzaG93bjogU2V0IHVwIGEg dHJpYWwgZ29vZ2xlIGNsb3VkIGFjY291bnQsIGluc3RhbGwgZ2NzZnVzZSwgY3JlYXRlIGEgY2xv dWQgc3RvcmFnZSBidWNrZXQgYW5kIHB1dCBpbiBzb21lIHRlc3QgZmlsZXMNCg0KJCBnY3NmdXNl IHRlc3RfZnNfZGRfdHJhY2VfcmIgZnVzZS10ZXN0aW5nLw0KJCBscyBmdXNlLXRlc3RpbmcvDQpo ZWxsby50eHQgIHRlc3QuaHRtbCAgdGVzdC50eHQNCg0KIyBOb3Qgc2hvd246IEFkZCBgZGF0YWRv Z2AgZ2VtIHRvIGBHZW1maWxlYA0KDQokIEREX1BST0ZJTElOR19FTkFCTEVEPXRydWUgRERfUFJP RklMSU5HX0RJUl9JTlRFUlJVUFRJT05fV09SS0FST1VORF9FTkFCTEVEPWZhbHNlIGJ1bmRsZSBl eGVjIGRkcHJvZnJiIGV4ZWMgcnVieSAtZSAiRGF0YWRvZzo6UHJvZmlsaW5nLndhaXRfdW50aWxf cnVubmluZzsgcHAgRGlyLmNoaWxkcmVuKCdmdXNlLXRlc3RpbmcvJykiDQpbXQ0KYGBgDQoNCkxl dCBtZSBrbm93IGlmIHlvdSdkIGxpa2UgbWUgdG8gdHJ5IHRvIGNyZWF0ZSBhIHJlcHJvZHVjZXIg dGhhdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIGBkYXRhZG9nYCBnZW0uDQoNCiMjIyMgQWRkaXRp b25hbCBub3Rlcw0KDQpJJ3ZlIHNwZW50IHF1aXRlIHNvbWUgdGltZSBsb29raW5nIGF0IHRoZSBg ZGlyLmNgIHNvdXJjZXMsIGFuZCBoZXJlJ3MgdGhlIGZ1bGwgbGlzdCBvZiBBUElzIHRoYXQgc3Vm ZmVyIGZyb20gaXNzdWVzOg0KDQoqIGBkaXJfZWFjaF9lbnRyeWAgZG9lcyBub3QgY2hlY2sgYGVy cm5vYDsgYWxsIG9mIGl0cyB1c2VycyBoYXZlIGludGVycnVwdGlvbiBidWdzDQoqIGBkaXJfdGVs bGAgd2lsbCByZXR1cm4gLTEgaW5zdGVhZCBvZiB0aGUgY29ycmVjdCBwb3NpdGlvbiAod2hpY2gg bWVhbnMgdGhhdCBwYXNzaW5nIC0xIHRvIGBkaXJfc2Vla2AvYGRpcl9zZXRfcG9zYCB3aWxsIGNh dXNlIGl0IHRvIG5vdCBsaXN0IHRoZSBkaXJlY3RvcnkgcHJvcGVybHkpDQoqIGBkb19vcGVuZGly YCBhbiBlcnJvciBpbiBzeXN0ZW0gY2FsbHMgd2lsbCBvbmx5IHNvbWV0aW1lcyBiZSB0dXJuZWQg aW50byBhIHJhaXNlZCBleGNlcHRpb24NCiAgKiBJbmRpcmVjdCBjYWxsZXJzIHRoYXQgcGFzcyBp biByYl9nbG9iX2Vycm9yIGFzIGVycmZ1bmM6IHJiX2dsb2IsIERpci5bXSwgRGlyLmdsb2INCiAg KiBJbmRpcmVjdCBjYWxsZXJzIHRoYXQgcGFzcyBpbiAwIGFzIGVycmZ1bmM6IHJ1YnlfZ2xvYiwg cnVieV9icmFjZV9nbG9iDQoqIGBnbG9iX29wZW5kaXJgIGRvZXMgbm90IGNoZWNrIGVycm5vOyBh bGwgb2YgaXRzIHVzZXJzIGhhdmUgaW50ZXJydXB0aW9uIGJ1Z3MNCiogYGdsb2JfZ2V0ZW50YCBk b2VzIG5vdCBjaGVjayBlcnJubzsgYWxsIG9mIGl0cyB1c2VycyBoYXZlIGludGVycnVwdGlvbiBi dWdzDQoqIGBub2d2bF9kaXJfZW1wdHlfcGAgZG9lcyBub3QgY2hlY2sgZXJybm8gKG9mIHJlYWRk aXIhIGl0IGFjdHVhbGx5IGNoZWNrcyBmb3Igb3BlbmRpcik7IGFsbCBvZiBpdHMgdXNlcnMgaGF2 ZSBpbnRlcnJ1cHRpb24gYnVncw0KDQpMZXNzIHN1cmUgYWJvdXQgdGhlc2U6DQoNCiogYGRvX3N0 YXRgL2Bkb19sc3RhdGAgd2lsbCB0dXJuIGVycm9ycyBpbnRvIHdhcm5pbmdzICh1bmNsZWFyIGlm IGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdCkNCiogYG5lZWRfbm9ybWFsaXphdGlvbmAg Y2FsbHMgYGZnZXRhdHRybGlzdGAgLyBgZ2V0YXR0cmxpc3RgIGFuZCBhbGwgZXJyb3JzIGAocmV0 ICE9IDApYCBhcmUgdHJlYXRlZCBpbiB0aGUgc2FtZSB3YXkNCiogYHJiX2dsb2JfZXJyb3JgIGlz IGFuZCBgcmJfZ2xvYl9jYWxsZXJgIGxlYXZlIGV4Y2VwdGlvbnMgYXMgcGVuZGluZyBhbmQgcmVs eSBvbiBjYWxsZXJzIHRvIHJhaXNlIHRoZW0gcHJvcGVybHkNCiogRXJyb3IgaGFuZGxpbmcgb2Yg YHJiX2hvbWVfZGlyX29mYCBhbmQgYHJiX2RlZmF1bHRfaG9tZV9kaXJgIGFyZSBhIGJpdCBzdXNw aWNpb3VzDQoNCkFzIGEgd29ya2Fyb3VuZCBpbiB0aGUgRGF0YWRvZyBSdWJ5IHByb2ZpbGVyLCBp biBodHRwczovL2dpdGh1Yi5jb20vRGF0YURvZy9kZC10cmFjZS1yYi9wdWxsLzM3MjAgSSd2ZSBh ZGRlZCBtb25rZXkgcGF0Y2hlcyB0byBhbGwgb2YgdGhlIFJ1YnktbGV2ZWwgQVBJcyB0aGF0IHVz ZSB0aGUgYWJvdmUgZnVuY3Rpb25zIGFuZCBtYXNrIG91dCBgU0lHUFJPRmAgc28gdGhlc2UgY2Fs bHMgYXJlIG5ldmVyIGludGVycnVwdGVkLg0KDQpUaGlzIHNvbHV0aW9uIGlzIGRvZXMgc3VjY2Vz c2Z1bGx5IHdvcmsgYXJvdW5kIHRoZSBpc3N1ZSwgYWx0aG91Z2ggaXQgcHJldmVudHMgdGhlIHBy b2ZpbGVyIGZyb20gc2FtcGxpbmcgZHVyaW5nIHRoZXNlIHN5c3RlbSBjYWxscywgd2hpY2ggd2ls bCBtZWFuIGxlc3MgdmlzaWJpbGl0eSBpZiBlLmcuIHRoZXNlIGNhbGxzIGFyZSB0YWtpbmcgYSBs b25nIHRpbWUuIEFuZCB3ZWxsLCBtYWludGFpbmluZyBtb25rZXkgcGF0Y2hlcyBpcyBhbHdheXMg cHJvYmxlbWF0aWMgZm9yIGZ1dHVyZSBSdWJ5IGNvbXBhdGliaWxpdHkuDQoNCg0KLS0tRmlsZXMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KcmVhZGRpci1idWctcmVwcm8uYyAoMi4x MSBLQikNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxp c3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4g ZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZv IC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwu cnVieS1sYW5nLm9yZy8=