Control: clone 696282 -2
Control: reassign -2 libxml2
Control: retitle -1 gnucash silently corrupts the account file if it is 
truncated when read
Control: retitle -2 libxml2: gzip decompression truncates the output (possible 
data loss)
Control: found -2 2.8.0+dfsg1-7
Control: tag -2 upstream fixed-upstream

On 2012-12-19 00:16:41 +0100, Vincent Lefevre wrote:
[...]
> $ gnucash test.gnucash
> Found Finance::Quote version 1.17
> I/O error : Resource temporarily unavailable
> $

I've done tests with gdb, and the problem occurs at

    xmlParseDocument( ctxt->data.saxParserCtxt );

in src/backend/xml/sixtp.c line 709 (sixtp_parse_file_common).
It comes from a known bug in libxml2, discussed here:

  https://bugzilla.redhat.com/show_bug.cgi?id=877567

It is fixed upstream. I could check with xmllint on the compressed
file that this is the same bug:

$ xmllint test.gnucash
test.gnucash:222630: parser error : expected '>'
  </trn:d
         ^
test.gnucash:222630: parser error : Opening and ending tag mismatch: 
date-posted line 222628 and d
  </trn:d
         ^
test.gnucash:222630: parser error : Premature end of data in tag transaction 
line 222621
  </trn:d
         ^
test.gnucash:222630: parser error : Premature end of data in tag 
template-transactions line 219417
  </trn:d
         ^
test.gnucash:222630: parser error : Premature end of data in tag book line 33
  </trn:d
         ^
test.gnucash:222630: parser error : Premature end of data in tag gnc-v2 line 2
  </trn:d
         ^

No such problem with the uncompressed file. If I truncate the
uncompressed file at </trn:d line 222630 like above, I get the
same problem.

So, this is also a bug in GnuCash, as like xmllint, GnuCash should
have detected the error, but it doesn't:

Breakpoint 1, sixtp_parse_file_common (sixtp=0x95b6a0, xml_context=0x8a6600, 
    data_for_top_level=0x0, global_data=0x7fffffffd040, 
    parse_result=0x7fffffffd038) at sixtp.c:699
699         if (!(ctxt = sixtp_context_new(sixtp, global_data, 
data_for_top_level)))
(gdb) next
705         ctxt->data.saxParserCtxt = xml_context;
(gdb) 
706         ctxt->data.saxParserCtxt->sax = &ctxt->handler;
(gdb) 
707         ctxt->data.saxParserCtxt->userData = &ctxt->data;
(gdb) 
708         ctxt->data.bad_xml_parser = 
sixtp_dom_parser_new(gnc_bad_xml_end_handler, NULL, NULL);
(gdb) 
709         xmlParseDocument( ctxt->data.saxParserCtxt );
(gdb) 
I/O error : Resource temporarily unavailable
712         sixtp_context_run_end_handler(ctxt);
(gdb) 
714         if (ctxt->data.parsing_ok)
(gdb) 
716             if (parse_result)
(gdb) 

-- 
Vincent Lefèvre <vinc...@vinc17.net> - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


--
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to