jnunemaker / crack

Really simple JSON and XML parsing, ripped from Merb and Rails.
MIT License
541 stars 93 forks source link

parsing of XML return a singleton Hash that is not dumpable #35

Closed HoneyryderChuck closed 9 months ago

HoneyryderChuck commented 12 years ago

I'm using the parsing engine in order to get hash representation that will be serialized somewhere. In order for it to be serialized, the object cannot be singleton. Turns out, what the parsing function returns is indeed singleton, therefore, not dumpable.

quick example:



xml = '
This
is
freaky
'

Marshal.dump Crack::XML.parse(xml)


this returns: TypeError: singleton can't be dumped

Is it short-term-fixable?

Regards Tiago

HoneyryderChuck commented 12 years ago

Hi,

investigated further, and it seems it is all because of these lines:


if t.is_a?(String)
        class << t
          attr_accessor :attributes
        end
        t.attributes = attributes
      end

line 85 - 90 of the xml.rb file.

Apparently, after the insertion of the attributes accessor on the t variable, t is no longer an instance of String, but a singleton instance(?) of String. Not dumpable, therefore. How to fix this? I'll investigate further, just wanted to tell u about so u could know of the issue as well.

HoneyryderChuck commented 12 years ago

The main culprit of this issue has been (and now a quote from the Marshal class documentation for Ruby 1.x.x):

Some objects cannot be dumped: if the objects to be dumped include bindings, procedure or method objects, instances of class IO, or singleton objects, a TypeError will be raised.

the solutions, as far as i see it is, are:

what do you think?

mhuggins commented 12 years ago

Anyone have a solution or workaround for this in the past 7 months?

kiskoza commented 9 months ago

Seems to be fixed already