From: Jeremy Evans Date: 2010-11-18T07:46:17+09:00 Subject: [ruby-core:33245] [Ruby 1.9-Bug#4067][Open] [PATCH] Fix SystemStackError when trying to format a large block of text in REXML --mimepart_4ce45b33105cc_566d59bd62453d0 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Bug #4067: [PATCH] Fix SystemStackError when trying to format a large blo= ck of text in REXML http://redmine.ruby-lang.org/issues/show/4067 Author: Jeremy Evans Status: Open, Priority: Normal Category: lib ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-openbsd4.8] REXML::Formatters::Pretty#wrap used a recursive method call to format tex= t. This patch switches it to use an iterative approach. It includes a t= est case exposing the error. This issue isn't theoretical, it happens when using rcov with Sequel's te= st suite. Tested on 1.9.2p0, but patch is against trunk. ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4ce45b33105cc_566d59bd62453d0 Content-Type: application/octet-stream; name=rexml_fix.diff Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=rexml_fix.diff RnJvbSBiNTIyZjgxNTAwMWVkMTI0YWY1M2Y1ZjNiYmFlZDc4MTU2YTJmZTRj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKZXJlbXkgRXZhbnMg PGNvZGVAamVyZW15ZXZhbnMubmV0PgpEYXRlOiBXZWQsIDE3IE5vdiAyMDEw IDE0OjE3OjU0IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gRml4IFN5c3RlbVN0 YWNrRXJyb3Igd2hlbiB0cnlpbmcgdG8gZm9ybWF0IGEgbGFyZ2UgYmxvY2sg b2YgdGV4dCBpbiBSRVhNTAoKUkVYTUw6OkZvcm1hdHRlcnM6OlByZXR0eSN3 cmFwIHVzZWQgYSByZWN1cnNpdmUgbWV0aG9kIGNhbGwgdG8gZm9ybWF0CnRl eHQuICBUaGlzIHN3aXRjaGVzIGl0IHRvIHVzZSBhbiBpdGVyYXRpdmUgYXBw cm9hY2guCi0tLQogbGliL3JleG1sL2Zvcm1hdHRlcnMvcHJldHR5LnJiIHwg ICAxMyArKysrKysrKy0tLS0tCiB0ZXN0L3JleG1sL3Rlc3RfY29yZS5yYiAg ICAgICAgfCAgICA3ICsrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5z ZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIv cmV4bWwvZm9ybWF0dGVycy9wcmV0dHkucmIgYi9saWIvcmV4bWwvZm9ybWF0 dGVycy9wcmV0dHkucmIKaW5kZXggMTdkMjE3ZC4uMDdlZmQ4YSAxMDA2NDQK LS0tIGEvbGliL3JleG1sL2Zvcm1hdHRlcnMvcHJldHR5LnJiCisrKyBiL2xp Yi9yZXhtbC9mb3JtYXR0ZXJzL3ByZXR0eS5yYgpAQCAtMTI2LDExICsxMjYs MTQgQEAgbW9kdWxlIFJFWE1MCiAgICAgICBlbmQKIAogICAgICAgZGVmIHdy YXAoc3RyaW5nLCB3aWR0aCkKLSAgICAgICAgIyBSZWN1cnNpdmVseSB3cmFw IHN0cmluZyBhdCB3aWR0aC4KLSAgICAgICAgcmV0dXJuIHN0cmluZyBpZiBz dHJpbmcubGVuZ3RoIDw9IHdpZHRoCi0gICAgICAgIHBsYWNlID0gc3RyaW5n LnJpbmRleCgnICcsIHdpZHRoKSAjIFBvc2l0aW9uIGluIHN0cmluZyB3aXRo IGxhc3QgJyAnIGJlZm9yZSBjdXRvZmYKLSAgICAgICAgcmV0dXJuIHN0cmlu ZyBpZiBwbGFjZS5uaWw/Ci0gICAgICAgIHJldHVybiBzdHJpbmdbMCxwbGFj ZV0gKyAiXG4iICsgd3JhcChzdHJpbmdbcGxhY2UrMS4uLTFdLCB3aWR0aCkK KyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBsYXN0X3BsYWNlID0gMAor ICAgICAgICB3aGlsZSBzdHJpbmcubGVuZ3RoID4gd2lkdGggYW5kIHBsYWNl ID0gc3RyaW5nLnJpbmRleCgnICcsIHdpZHRoKQorICAgICAgICAgIHBhcnRz IDw8IHN0cmluZ1swLi4ucGxhY2VdCisgICAgICAgICAgc3RyaW5nID0gc3Ry aW5nW3BsYWNlKzEuLi0xXQorICAgICAgICBlbmQKKyAgICAgICAgcGFydHMg PDwgc3RyaW5nCisgICAgICAgIHBhcnRzLmpvaW4oIlxuIikKICAgICAgIGVu ZAogCiAgICAgZW5kCmRpZmYgLS1naXQgYS90ZXN0L3JleG1sL3Rlc3RfY29y ZS5yYiBiL3Rlc3QvcmV4bWwvdGVzdF9jb3JlLnJiCmluZGV4IDVmYWU0ZjUu LjVkMGFkNTMgMTAwNjQ0Ci0tLSBhL3Rlc3QvcmV4bWwvdGVzdF9jb3JlLnJi CisrKyBiL3Rlc3QvcmV4bWwvdGVzdF9jb3JlLnJiCkBAIC0xMTUxLDYgKzEx NTEsMTMgQEAgRU9MCiAgICAgYXNzZXJ0X25vdF9lcXVhbCggYywgZCApCiAg IGVuZAogCisgIGRlZiB0ZXN0X2xvbmdfdGV4dAorICAgIGFhYWEgPSAnYWFh YSAnICogMV8wMDBfMDAwCisgICAgYSA9ICI8ZG9jPiN7YWFhYX08L2RvYz4i CisgICAgZiA9IFJFWE1MOjpGb3JtYXR0ZXJzOjpQcmV0dHkubmV3CisgICAg eG1sZG9jID0gUkVYTUw6OkRvY3VtZW50Lm5ldyggYSApCisgICAgYXNzZXJ0 X25vdGhpbmdfcmFpc2Vke2Yud3JpdGUoeG1sZG9jLCBiPSIiKX0KKyAgZW5k CiAKICAgZGVmIHRlc3RfdGlja2V0XzU4CiAgICAgZG9jID0gUkVYTUw6OkRv Y3VtZW50Lm5ldwotLSAKMS43LjMuMgoK --mimepart_4ce45b33105cc_566d59bd62453d0--