From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:49103) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOWBu-00074x-Bw for qemu-devel@nongnu.org; Mon, 23 May 2011 10:33:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QOWBm-0008KK-He for qemu-devel@nongnu.org; Mon, 23 May 2011 10:33:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:61121) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOWBm-0008Js-7I for qemu-devel@nongnu.org; Mon, 23 May 2011 10:32:58 -0400 Date: Mon, 23 May 2011 15:32:52 +0100 From: "Daniel P. Berrange" Message-ID: <20110523143252.GX24143@redhat.com> References: <20110520180331.GA21837@amd.home.annexia.org> <4DD6AEB9.6060506@codemonkey.ws> <20110523130411.GR24143@redhat.com> <4DDA620F.1090308@codemonkey.ws> <20110523134021.GT24143@redhat.com> <4DDA663F.30907@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCH] qemu: json: Fix parsing of integers >= 0x8000000000000000 Reply-To: "Daniel P. Berrange" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: "Richard W.M. Jones" , qemu-devel@nongnu.org, Luiz Capitulino On Mon, May 23, 2011 at 04:29:55PM +0200, Markus Armbruster wrote: > Anthony Liguori writes: > > >>> The actual value of the alert will surprise you :-) > >>> > >>> Integers in Javascript are actually represented as doubles > >>> internally which means that integer constants are only accurate up > >>> to 52 bits. > >>> > >>> So really, we should cap integers at 32-bit :-/ > >>> > >>> Have I mentioned recently that I really dislike JSON... > >> > >> NB, I am distinguishing between JSON the generic specification and > >> JSON as implemented in web browsers. JSON the specification has *no* > >> limitation on integers. > > > > The spec has no notion of integers at all. Here's the relevant > > It doesn't differentiate between integers and floating-point numbers > *syntactically*. There are just numbers. Some of them happen to be > integers. > > > text. Note that the BNF only has a single entry point for numbers. It > > does not distinguish between integers and floating point numbers. > > Also, the only discussion of valid numbers is about whether the number > > can be represented as a rational number. I think the only way to read > > the spec here is that *all* numbers are meant to be represented as > > floating point numbers. > > > > Regards, > > > > Anthony Liguori > > > > 2.4. Numbers > > > > The representation of numbers is similar to that used in most > > programming languages. A number contains an integer component that > > may be prefixed with an optional minus sign, which may be followed by > > a fraction part and/or an exponent part. > > > > Octal and hex forms are not allowed. Leading zeros are not allowed. > > > > A fraction part is a decimal point followed by one or more digits. > > > > An exponent part begins with the letter E in upper or lowercase, > > which may be followed by a plus or minus sign. The E and optional > > sign are followed by one or more digits. > > > > Numeric values that cannot be represented as sequences of digits > > (such as Infinity and NaN) are not permitted. > > Therefore, the number 1234567890123456789 is permitted. > > > > > > > number = [ minus ] int [ frac ] [ exp ] > > > > decimal-point = %x2E ; . > > > > digit1-9 = %x31-39 ; 1-9 > > > > e = %x65 / %x45 ; e E > > > > exp = e [ minus / plus ] 1*DIGIT > > > > frac = decimal-point 1*DIGIT > > > > int = zero / ( digit1-9 *DIGIT ) > > > > minus = %x2D ; - > > > > plus = %x2B ; + > > > > zero = %x30 ; 0 > > There's more: > > 4. Parsers > > A JSON parser transforms a JSON text into another representation. A > JSON parser MUST accept all texts that conform to the JSON grammar. > A JSON parser MAY accept non-JSON forms or extensions. Incidentally, we should likely use the QMP capabilities handshake to optionally enable parsing support for Infinity/-Infinity/NaN in QEMU since that seems to be a common extension used[1]. Regards, Daniel [1] http://deron.meranda.us/python/comparing_json_modules/numbers -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|