On Fri, Aug 17, 2018 at 11:50:35AM -0500, Eric Blake wrote: > On 08/17/2018 10:48 AM, Richard W.M. Jones wrote: > >On Fri, Aug 17, 2018 at 10:30:35AM -0500, Eric Blake wrote: > >>On 08/17/2018 10:16 AM, Richard W.M. Jones wrote: > >>>Commit bd1c5c9f4dcf38458099db8a0bf4659a07ef055d changed all the code > >>>to use Jansson instead of yajl. However it didn't change the OCaml > >>>API name (which was still Yajl). > >>> > >> > >>Are you aware that Jansson can't parse all JSON generated by qemu, > >>and that the developers of Jansson did not seem sympathetic to > >>patches that would make it possible? Libvirt recently reverted > >>their use of Jansson because of its inability to deal with unsigned > >>64-bit numbers (and sadly, RFC7159 does not define bounds for what > >>forms valid JSON numbers, but merely leaves it up to implementations > >>to decide for themselves). > > > >Yes, painfully aware. Not sure what to do about it however, since the > >alternative (ie. switching back to yajl) as libvirt did is not going > >to be pleasant. > > > >Currently we're OK as long as disk sizes don't exceed 8 petabytes, if > >my quick calculation is correct. > > The problem comes anywhere that qemu outputs an unsigned 64-bit > number as unsigned AND where that value is larger than INT64_MAX > (jansson uses strtoll, rather than strtoull). But since disk sizes > cannot exceed off_t, which is a signed 64-bit number, it does not > matter whether qemu outputs those as signed or unsigned - they will > still be parseable as a signed number. Thus, you are correct that > disk sizes in qemu output won't trigger the Jansson limitation.
Ah thanks, I misunderstood the limitation. I thought it was parsing ints as floats like Javascript (hence a loss of precision around 2^53). If it's a mix up of signed and unsigned then we're really fine for how we use Jansson in libguestfs - but I understand how libvirt is affected eg in the way it wants to send and receive memory addresses for instance. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
