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

Eric Blake
Fri, 17 Aug 2018 16:50:35 -0000

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.

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org