[ruby-core:118820] [Ruby master Bug#20663] Reading characters from IO does not recover gracefully from bad data pushed via IO#ungetc
From:
"javanthropus (Jeremy Bopp) via ruby-core" <ruby-core@...>
Date:
2024-08-09 13:47:08 UTC
List:
ruby-core #118820
SXNzdWUgIzIwNjYzIGhhcyBiZWVuIHVwZGF0ZWQgYnkgamF2YW50aHJvcHVzIChKZXJlbXkgQm9w cCkuDQoNCg0KQWZ0ZXIgcmV2aWV3aW5nIHRoZSBzb3VyY2VzLCBJIHNlZSB0aGF0IHRoaXMgYmVo YXZpb3IgaXMgYSBjb25zZXF1ZW5jZSBvZiBob3cgY2hhcmFjdGVyIGNvbnZlcnNpb24gaXMgaGFu ZGxlZC4gIEZldGNoaW5nIHRoZSBuZXh0IGNoYXJhY3RlciBhbHdheXMgbG9va3MgYXQgYW4gaW50 ZXJuYWwgYnVmZmVyIGZvciBieXRlcyB0byBjb21wb3NlIHRoZSBjaGFyYWN0ZXIuICBXaGVuIHRo YXQgYnVmZmVyIGlzIGVtcHR5LCBieXRlcyBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBzdHJlYW0sIGNv bnZlcnRlZCBmcm9tIHRoZSBleHRlcm5hbCBlbmNvZGluZyB0byB0aGUgaW50ZXJuYWwgZW5jb2Rp bmcsIGFuZCB0aGVuIHN0b3JlZCBpbiB0aGUgYnVmZmVyLiAgQXMgZmFyIGFzIElPI2VhY2hfY2hh ciBpcyBjb25jZXJuZWQsIHRoZSBieXRlcyBwdXNoZWQgaW50byB0aGUgYnVmZmVyIHZpYSBJTyN1 bmdldGMgbWF5IGFzIHdlbGwgaGF2ZSBiZWVuIGxlZnQgZnJvbSB0aGUgcHJldmlvdXMgYnVmZmVy IGZpbGwgb3BlcmF0aW9uLCBzbyB0aGVyZSdzIG5vIHdheSB0byB0ZWxsIHRoYXQgdGhlIG5leHQg Ynl0ZXMgaW4gdGhlIGJ1ZmZlciBzaG91bGQgYmUgaGFuZGxlZCBpbiBhbnkgc3BlY2lhbCB3YXkg dG8gYXNzaXN0IHdpdGggY2hhcmFjdGVyIHJlYWRpbmcgcmVjb3ZlcnkgZnJvbSB0aGUgdW5kZXJs eWluZyBzdHJlYW0uDQoNCkluIHNob3J0LCBwbGVhc2UgY2xvc2UgdGhpcyBpc3N1ZSBhcyBhIG5v bi1idWcuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkJ1ZyAj MjA2NjM6IFJlYWRpbmcgY2hhcmFjdGVycyBmcm9tIElPIGRvZXMgbm90IHJlY292ZXIgZ3JhY2Vm dWxseSBmcm9tIGJhZCBkYXRhIHB1c2hlZCB2aWEgSU8jdW5nZXRjDQpodHRwczovL2J1Z3MucnVi eS1sYW5nLm9yZy9pc3N1ZXMvMjA2NjMjY2hhbmdlLTEwOTM4NA0KDQoqIEF1dGhvcjogamF2YW50 aHJvcHVzIChKZXJlbXkgQm9wcCkNCiogU3RhdHVzOiBPcGVuDQoqIHJ1YnkgLXY6IHJ1YnkgMy4z LjQgKDIwMjQtMDctMDkgcmV2aXNpb24gYmUxMDg5YzhlYykgW3g4Nl82NC1saW51eF0NCiogQmFj a3BvcnQ6IDMuMTogVU5LTk9XTiwgMy4yOiBVTktOT1dOLCAzLjM6IFVOS05PV04NCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCklmIGJ5dGVzIHRoYXQgcmVzdWx0IGlu IGF0IGxlYXN0IDIgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB0aGUgaW50ZXJuYWwgZW5jb2Rpbmcg b2YgYW4gSU8gb2JqZWN0IGFyZSBwdXNoZWQgaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyIHdpdGgg SU8jZ2V0YywgcmVhZGluZyBmcm9tIHRoZSBzdHJlYW0gcmV0dXJucyBpbnZhbGlkIGNoYXJhY3Rl cnMgY29tcG9zZWQgb2YgYm90aCBieXRlcyBmcm9tIHRoZSBpbnRlcm5hbCBidWZmZXIgYW5kIHRo ZSBjb252ZXJ0ZWQgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtIGV2ZW4gaWYgdGhlIG5leHQgY2hhcmFj dGVyIGluIHRoZSBzdHJlYW0gaXRzZWxmIGlzIGNvbXBsZXRlbHkgdmFsaWQuDQoNCmBgYCBydWJ5 DQpjaGFyX2J5dGVzID0gVGVtcGZpbGUub3BlbihlbmNvZGluZzogJ3V0Zi04OnV0Zi0xNmxlJykg ZG8gfGZ8DQogIGYud3JpdGUoIvCfjaMiKQ0KICBmLnJld2luZA0KICBmLnVuZ2V0Yygi8J+NoyIu ZW5jb2RlKCd1dGYtMTZsZScpLmJbMC4uLTJdKQ0KICBmLmVhY2hfY2hhci5tYXAoJjpieXRlcykN CmVuZA0KcHV0cyBjaGFyX2J5dGVzLmluc3BlY3QNCmBgYA0KDQpUaGUgYWJvdmUgb3V0cHV0czoN Cg0KYGBgDQpbWzYwLCAyMTZdLCBbOTksIDYwXSwgWzIxNiwgOTldLCBbMjIzXV0NCmBgYA0KDQpJ IGV4cGVjdCBpdCB0byBvdXRwdXQ6DQoNCmBgYA0KW1s2MCwgMjE2XSwgWzk5XSwgWzYwLCAyMTYs IDk5LCAyMjNdXQ0KYGBgDQoNCkluIG90aGVyIHdvcmRzLCBJIGV4cGVjdCBpdCB0byBmaXJzdCBj b21wbGV0ZWx5IGRyYWluIHRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIgYnVmZmVyIHJldHVybmluZyBh cyBtYW55IGNoYXJhY3RlcnMgYXMgbmVjZXNzYXJ5IChpbnZhbGlkIG9yIG90aGVyd2lzZSkgYmVm b3JlIHJlYWRpbmcgZnJvbSB0aGUgc3RyZWFtIGFuZCBjb252ZXJ0aW5nIGFuZCByZXR1cm5pbmcg dGhlIG5leHQgY2hhcmFjdGVyLiAgQWZ0ZXIgYSBiaXQgb2YgdGVzdGluZywgdGhlIHdheSBpdCBz ZWVtcyB0byBiZWhhdmUgaXMgdGhpczoNCg0KMS4gUmV0dXJuIHRoZSBuZXh0IGNoYXJhY3RlciBm cm9tIHRoZSBpbnRlcm5hbCBidWZmZXIgZWl0aGVyIGlmIGl0J3MgYSB2YWxpZCBlbmNvZGluZyBv ciBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciwgdmFsaWQg b3Igbm90DQoyLiBPdGhlcndpc2UsIHJlYWQgYW5vdGhlciBjaGFyYWN0ZXIgZnJvbSB0aGUgc3Ry ZWFtLCBjb252ZXJ0IGl0LCBhbmQgYXBwZW5kIHRoZSBjb252ZXJ0ZWQgYnl0ZXMgdG8gdGhlIGJ1 ZmZlcg0KMy4gR28gYmFjayB0byBzdGVwIDENCg0KTWF5YmUgdGhpcyBpcyBkZXNpcmVkIGJlaGF2 aW9yLCBidXQgSSBjYW4ndCB1bmRlcnN0YW5kIHdoeS4gIEl0IGNhbid0IHJlY292ZXIgZnJvbSB0 aGUga2luZCBvZiBlcnJvbmVvdXMgZGF0YSBkZW1vbnN0cmF0ZWQgaW4gdGhlIGV4YW1wbGUgYWJv dmUuDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxp c3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4g ZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZv IC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwu cnVieS1sYW5nLm9yZy8=