On 03/21/2017 11:49 AM, Markus Armbruster wrote: > > QMP clients that work around the "large positive integers are rejected" > bugs by sending large negative ones instead may well exist. Fixing the > interface would break them. Depressing. Eric, could you have a peek at > libvirt?
Yes, libvirt is such a client already. From util/virjson.c:virJSONValueObjectAddVArgs(): * Adds the key-value pairs supplied as variable argument list to @obj. * * Keys look like s:name the first letter is a type code: ... * U: unsigned long integer value (see below for quirks) * P: unsigned long integer value, omitted if zero ... case 'P': case 'U': { /* qemu silently truncates numbers larger than LLONG_MAX, * so passing the full range of unsigned 64 bit integers * is not safe here. Pass them as signed 64 bit integers * instead. */ long long val = va_arg(args, long long); if (!val && type == 'P') continue; rc = virJSONValueObjectAppendNumberLong(obj, key, val); } break; So if we "fix" QMP to reject negative values in place of large unsigned values, we'll need to also fix libvirt to have a way to introspect the difference and cope accordingly. (I'm thinking that we'll have to keep the negative parsing indefinitely, and can merely improve the parser to also parse large positive - but that we can still reject values < INT64_MIN that would have a weird wraparound). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature