[Libguestfs] [PATCH v3 1/4] mltools: Rename Yajl module as JSON_parser and move to common/mltools.

Richard W.M. Jones rjones at redhat.com
Fri Aug 17 16:53:52 UTC 2018


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




More information about the Libguestfs mailing list