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