From: Austin Ziegler Date: 2015-05-10T02:57:42+00:00 Subject: [ruby-core:69115] Re: [Ruby trunk - Bug #11088] [Rejected] Infinite loop on calling missing/overwritten methods of restored marshaled objects --001a11440e34dbb7130515b16cd3 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I don't think this should be rejected completely, Nobu. As I mentioned in my analysis, it appears that NoMethodError#message is calling #inspect on the object that raised the error, only to discard *most* of the item in favour of *just* the "#" output. I can understand that this is a pathological case, but I'm curious why the output is different than would be expected here. -a On Sat, May 9, 2015 at 10:48 PM wrote: > Issue #11088 has been updated by Nobuyoshi Nakada. > > Status changed from Open to Rejected > > Your objects are consist of very large networks with complex recursive > references. > Even with omission of the recursions, it makes tons of hundreds MB string= s. > You should define `inspect` methods for your purpose. > > ---------------------------------------- > Bug #11088: Infinite loop on calling missing/overwritten methods of > restored marshaled objects > https://bugs.ruby-lang.org/issues/11088#change-52360 > > * Author: J=FCrgen Bickert > * Status: Rejected > * Priority: Normal > * Assignee: > * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] > * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN > ---------------------------------------- > I have Marshal.dump some objects and then I Marshal.load them and later I > call non-existent methods on those objects and instead of raising an > exception (NoMethodError) it runs off in an infinite loop. > > I have tested with simple cases where the dumped structure is not > recursive and it works fine. So I attached a non-working dump which will > when called with inspect or a non-existing method run off in an infinite > loop. > > When you run "ruby bug_hunt.rb" it will get stuck and you have to > abort(CTRL-C) and only then will it print an error message and finish. > > ---Files-------------------------------- > bug_hunt.rb (336 Bytes) > ruby_object.dump (561 KB) > 11088_test.rb (305 Bytes) > simple-inspect.txt (1.19 MB) > simple-inspect-stats.txt (90.7 KB) > bug_hunt_benchmark.rb (1.42 KB) > bug_hunt_simple.rb (1.09 KB) > > > -- > https://bugs.ruby-lang.org/ > --001a11440e34dbb7130515b16cd3 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
I don’t think this should be rejected completely, No= bu. As I mentioned in my analysis, it appears that NoMethodError#message is= calling #inspect on the object that raised the error, only to discard *mos= t* of the item in favour of *just* the "#<Klass:0xOBJECTREF>&quo= t; output. I can understand that this is a pathological case, but I’m curious = why the output is different than would be expected here.

-a



On Sat, May 9, 2015 at 10:48 PM <nobu@ruby-lang.org> wrote:
Issue #11088 has been updated by Nobuyoshi Nakada.

Status changed from Open to Rejected

Your objects are consist of very large networks with complex recursive refe= rences.
Even with omission of the recursions, it makes tons of hundreds MB strings.=
You should define `inspect` methods for your purpose.

----------------------------------------
Bug #11088: Infinite loop on calling missing/overwritten methods of restore= d marshaled objects
https://bugs.ruby-lang.org/issues/11088#change-52360

* Author: J=FCrgen Bickert
* Status: Rejected
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
I have Marshal.dump some objects and then I Marshal.load them and later I c= all non-existent methods on those objects and instead of raising an excepti= on (NoMethodError) it runs off in an infinite loop.

I have tested with simple cases where the dumped structure is not recursive= and it works fine. So I attached a non-working dump which will when called= with inspect or a non-existing method run off in an infinite loop.

When you run "ruby bug_hunt.rb" it will get stuck and you have to= abort(CTRL-C) and only then will it print an error message and finish.

---Files--------------------------------
bug_hunt.rb (336 Bytes)
ruby_object.dump (561 KB)
11088_test.rb (305 Bytes)
simple-inspect.txt (1.19 MB)
simple-inspect-stats.txt (90.7 KB)
bug_hunt_benchmark.rb (1.42 KB)
bug_hunt_simple.rb (1.09 KB)


--
https://bugs.ruby= -lang.org/
--001a11440e34dbb7130515b16cd3--