idb icon indicating copy to clipboard operation
idb copied to clipboard

Crash on "Dump Keychain" - Linux

Open sanitybit opened this issue 12 years ago • 7 comments

1ac6aaab8603e7ef2c2fa9f8415f4d50e4748628

On OS X 10.9.1 with same ruby version 1.9.3, this does not crash.

[INFO] 2014-01-29 20:08:34 :: gidb ::  Dumping keychain...
[INFO] 2014-01-29 20:08:34 :: gidb ::  Downloading dumped keychain...
[INFO] 2014-01-29 20:08:35 :: gidb ::  Parsing keychain plist file..
Fatal error: PCDATA invalid Char value 1 at :183.
Fatal error: Premature end of data in tag string line 183 at :183.
Fatal error: Premature end of data in tag dict line 175 at :183.
Fatal error: Premature end of data in tag array line 4 at :183.
Fatal error: Premature end of data in tag plist line 3 at :183.
Fatal error: PCDATA invalid Char value 1 at :183.
Fatal error: Premature end of data in tag string line 183 at :183.
Fatal error: Premature end of data in tag dict line 175 at :183.
Fatal error: Premature end of data in tag array line 4 at :183.
Fatal error: Premature end of data in tag plist line 3 at :183.
#<LibXML::XML::Error: Fatal error: Premature end of data in tag plist line 3 at :183.>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:76:in `parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:76:in `string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list/rbXMLCFPropertyList.rb:14:in `load'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list/rbCFPropertyList.rb:255:in `load_str'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list.rb:20:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list.rb:42:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
#<LibXML::XML::Error: Fatal error: Premature end of data in tag plist line 3 at :183.>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml4r-0.2.6/lib/libxml4r.rb:209:in `parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml4r-0.2.6/lib/libxml4r.rb:209:in `to_xmldoc'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/libxml4r.rb:70:in `parse_plist_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/libxml4r.rb:88:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
#<RuntimeError: CoreFoundation Framework not found. Searched in: /System/Library/Frameworks/CoreFoundation.framework>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/osx_plist.rb:19:in `require_c_ext'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/osx_plist.rb:25:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/osx_plist.rb:47:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
#<RuntimeError: RubyCocoa Framework not found. Searched in: /System/Library/Frameworks/RubyCocoa.framework>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:217:in `ruby_cocoa_exec'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:328:in `open_with_args'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:348:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:352:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'

sanitybit avatar Jan 30 '14 05:01 sanitybit

Hm, thats a crash in libxml due to some unexpected encoding in the file content it seams. The plist parsing library I'm using supports different backends for xml parsing and they recommend CFPropertyList. Could you try installing it into your ruby install:

gem install CFPropertyList

Then restart idb and re-dump the keychain. Thanks!

dmayer avatar Jan 30 '14 14:01 dmayer

I installed CFPropertyList and re-ran the application. Still crashing.

[INFO] 2014-01-30 13:53:49 :: gidb ::  Dumping keychain...
[INFO] 2014-01-30 13:53:50 :: gidb ::  Downloading dumped keychain...
[INFO] 2014-01-30 13:53:50 :: gidb ::  Parsing keychain plist file..
Fatal error: PCDATA invalid Char value 1 at :183.
Fatal error: Premature end of data in tag string line 183 at :183.
Fatal error: Premature end of data in tag dict line 175 at :183.
Fatal error: Premature end of data in tag array line 4 at :183.
Fatal error: Premature end of data in tag plist line 3 at :183.
Fatal error: PCDATA invalid Char value 1 at :183.
Fatal error: Premature end of data in tag string line 183 at :183.
Fatal error: Premature end of data in tag dict line 175 at :183.
Fatal error: Premature end of data in tag array line 4 at :183.
Fatal error: Premature end of data in tag plist line 3 at :183.
#<LibXML::XML::Error: Fatal error: Premature end of data in tag plist line 3 at :183.>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:76:in `parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml-ruby-2.7.0/lib/libxml/document.rb:76:in `string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list/rbXMLCFPropertyList.rb:14:in `load'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list/rbCFPropertyList.rb:255:in `load_str'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list.rb:20:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/c_f_property_list.rb:42:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
#<LibXML::XML::Error: Fatal error: Premature end of data in tag plist line 3 at :183.>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml4r-0.2.6/lib/libxml4r.rb:209:in `parse'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/libxml4r-0.2.6/lib/libxml4r.rb:209:in `to_xmldoc'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/libxml4r.rb:70:in `parse_plist_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/libxml4r.rb:88:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
#<RuntimeError: CoreFoundation Framework not found. Searched in: /System/Library/Frameworks/CoreFoundation.framework>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/osx_plist.rb:19:in `require_c_ext'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/osx_plist.rb:25:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/osx_plist.rb:47:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
#<RuntimeError: RubyCocoa Framework not found. Searched in: /System/Library/Frameworks/RubyCocoa.framework>
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:217:in `ruby_cocoa_exec'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:328:in `open_with_args'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:348:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend/ruby_cocoa.rb:352:in `from_xml'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:68:in `block in generic_call'
    from /usr/local/rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:67:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:22:in `from_string'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `block in generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `instance_eval'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:54:in `generic_call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:106:in `block in call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `each'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/backend.rb:96:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist_cache.rb:67:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r/plist.rb:295:in `open'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/plist4r-1.2.2/lib/plist4r.rb:34:in `open'
    from /home/sanitybit/.sources/idb/lib/keychain_plist_parser.rb:10:in `initialize'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `new'
    from /home/sanitybit/.sources/idb/gui/key_chain_widget.rb:47:in `block in initialize'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `call'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:2427:in `invoke'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `qt_metacall'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `method_missing'
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/qtbindings-4.8.3.0/lib/Qt/qtruby4.rb:469:in `exec'
    from gidb.rb:251:in `<main>'
Fatal error: PCDATA invalid Char value 1 at :183.
Fatal error: Premature end of data in tag string line 183 at :183.
Fatal error: Premature end of data in tag dict line 175 at :183.
Fatal error: Premature end of data in tag array line 4 at :183.
Fatal error: Premature end of data in tag plist line 3 at :183.
Fatal error: PCDATA invalid Char value 1 at :183.
Fatal error: Premature end of data in tag string line 183 at :183.
Fatal error: Premature end of data in tag dict line 175 at :183.
Fatal error: Premature end of data in tag array line 4 at :183.
Fatal error: Premature end of data in tag plist line 3 at :183.
#<LibXML::XML::Error: Fatal error: Premature end of data in tag plist line 3 at :183.>

SNIP

sanitybit avatar Jan 30 '14 22:01 sanitybit

Not 100% sure what causes the encoding problem. May be the keychain_dump already. And asking you to send me your keychain doesn't seem appropriate..

So I am now forcing encoding to utf8 before parsing the file. Maybe this helps. I pushed the change to an experimental branch: 2349a831cbed7e30d4eeb3c3a2faa96bb2178b21 If you pull the update make sure to do

git checkout keychain_plist_encoding

dmayer avatar Jan 30 '14 23:01 dmayer

Alright, lets see if adding an explicit encoding to the ruby file helps. If you still feel like testing this, please do. Otherwise I'll close the issue until someone else runs into it as well

Commit: 5d94096e8c720a6b0ff5870f1c0600e03bad9e36

dmayer avatar Apr 09 '14 20:04 dmayer

v2.1.0 has still this bug

ldrolez avatar Oct 31 '14 15:10 ldrolez

Thanks, I can reproduce this on my Ubuntu laptop as well. I am not sure why this is the case though. libxml on Linux appears to have trouble parsing the file. I suspect there are some unicode characters in there that cause the problem.

I'll try to look into it and would be happy for any suggestions.

dmayer avatar Nov 05 '14 21:11 dmayer

Latest version still has this bug all over plist parsing locations in code, earliest in "Select app". With some debugging it looks like on a Mac Plist4r always uses the OsxPlist backend, which works, but on Linux it tries all backends which all fail because plists are not actually valid XML (no root node). Ultimately idb sees that none of the backends can handle the file and fails itself:

[DEBUG] 2019-01-28 10:53:09 :: idb ::  Executing blocking SSH command: /usr/bin/ldid -e '/private/var/containers/Bundle/Application/APP_PATH_SANITIZED'
[INFO] 2019-01-28 10:53:09 :: idb ::  TRYING Plist4r::Backend::CFPropertyList
Fatal error: XML declaration allowed only at the start of the document at :17.
Fatal error: Extra content at the end of the document at :18.
[INFO] 2019-01-28 10:53:09 :: idb ::  TRYING Plist4r::Backend::Haml
[INFO] 2019-01-28 10:53:09 :: idb ::  TRYING Plist4r::Backend::Libxml4r
Fatal error: XML declaration allowed only at the start of the document at :17.
Fatal error: Extra content at the end of the document at :18.
[INFO] 2019-01-28 10:53:09 :: idb ::  TRYING Plist4r::Backend::RubyCocoa
[INFO] 2019-01-28 10:53:09 :: idb ::  TRYING Plist4r::Backend::OsxPlist
#<LibXML::XML::Error: Fatal error: Extra content at the end of the document at :18.>

All backends on Linux rely on LibXML under the hood, while on a Mac it uses Apple's native frameworks which don't seem to use LibXML at all. No one has looked into parsing plists with LibXML since 2015. Apple changed the format since then. Plists of the new format are incompatible with LibXML and all existing Ruby bindings because the new format doesn't have a root node.

pandasauce avatar Jan 28 '19 11:01 pandasauce