summaryrefslogtreecommitdiff
path: root/json.h
Commit message (Collapse)AuthorAgeFilesLines
* Address Savannah bug #46804: JSON satellite view parsing is somewhat broken.Fred Wright2016-01-041-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fred Wright <fhgwright> writes: While trying the regression tests on a MacBook (PowerPC), I ran across some failures in the JSON unit test. Although this is ostensibly an endian issue, it turns out that the code for parsing satellite view data is actually incorrect for all processors, albeit more so for big-endian processors. The problem is that the three "integer" fields in struct satellite_t are defined as shorts, but parsed as ints by the JSON parser. On a big-endian processor, this causes the values to be misaddressed and hence have incorrect values, but even on a little-endian processor this is incorrect since it's storing four-byte values into two-byte fields. The unit tests don't catch this aspect, since the fields are favorably ordered such that the clobbered fields are clobbered before being written pseudo-correctly. I was able to demonstrate the "buffer overflow" misbehavior by modifying the test data for the last satellite to provide the fields in the reverse order from their order in the structure. The simple fix for this would be just to change the shorts to ints in the definition of struct satellite_t. On most processors, this doesn't even cost any memory, since the presence of the double forces eight-bye alignment, so the padded structure is 24 bytes regardless of whether the three fields in question are shorts or ints. However, there might be some processors with less strict alignment requirements where using shorts would actually be helpful. With the existing layout, the only possible fix is to add support for shorts to the JSON parser, and adjust the satellite-view parsing accordingly. The attached patch does that, as well as adding u_short support for completeness (though it's not currently used). It also provides the aforementioned change in the test data, in keeping with the philosophy of "create a test for what just failed, so it doesn't happen again". Note that using shorts for these fields would be more effective if the "used" field were also reduced to a short, instead of inheriting "int" from "bool". That would shrink the structure to 16 bytes. It could be further reduced to 12 bytes by using a float instead of a double for the "ss" field (and even a float is gross overkill for this purpose). This could all be more significant when MAXCHANNELS needs to be increased (again) to accommodate the deployment of the newer GNSSes.
* A horrowshow of whitespace hacks.Gary E. Miller2015-04-301-1/+1
|
* Retire splint from our set of static analyzers.Eric S. Raymond2015-03-301-6/+4
| | | | | | | | | | | | | | | | | | | The proximate cause was that we've been seing emission of error messages that were randomly and disturbingly variable across different environments - notably Raspbian and Gentoo splint gave nontrivially different results than Ubuntu 14.10 splint. And this was *not* due to Ubuntu patches! A pristine splint built from the 3.1.2 tarball on Ubuntu didn't match the Raspbian and Gentoo results either. But this has been coming for a while. Easy access to more modern static analyzers such as coverity, scan-build and cppcheck has been decreasing the utility of splint, which is unmaintained and somewhat buggy and not easy to use. Only file not cleaned is ppsthread.c, because Gary has been working on it during this cleanup. All regression tests pass. PPS observed live on GR601-W.
* Hide a sys header from splintGary E. Miller2015-03-261-1/+3
| | | | gpsd.c is now splint clean on raspbian. YMMV
* Implement and test extended JSON array parsing.Eric S. Raymond2014-09-221-1/+13
| | | | | | Now supported: JSON arrays with int, unit, bool, and real elements. All regressiion tests pass.
* Typo fixes. All regression tests pass.Eric S. Raymond2014-09-171-1/+1
|
* The JSON parser now has an "ignore" type...Eric S. Raymond2013-10-011-1/+2
| | | | ...and it's used for the new dependent _text attributes.
* Nuke trailing whitespace in C source.Eric S. Raymond2012-09-071-8/+8
|
* json.h: Change JSON_VAL_MAX from 120 to 512Christian Gagneraud2012-06-201-1/+1
| | | | | | | This will allow the parsing long hexdump (data fields) in the AIS code. The longest JSON string I saw so far was 389 characters long. scons check passed.
* Get rid of nullbool default - not used, and it causes a bad smell to Coverity.Eric S. Raymond2012-05-111-2/+0
|
* Armor the JSON code against zeroed value or attribute pointers.Eric S. Raymond2012-05-101-0/+1
| | | | | Should never happen, but having the bailout logic in plavce creates static invariants that should banish a bunch of Coverity warnings.
* Cosmetic tweak: t_timestamp -> t_time.Eric S. Raymond2011-04-161-1/+1
|
* Add a 'timestamp' type to the JSON parser to solve a compatibility problem.Eric S. Raymond2011-04-151-0/+1
| | | | | | | Sigh, no other way to get DEVICELIST to recignize both new and old timestamps. All regression tests pass.
* Prevent JSON parsing from becoming confused by client locales other than C.Eric S. Raymond2010-12-171-0/+1
| | | | Fixes Berlios tracker bug #17379: problem with different locale.
* Internals of Qt support.Chris Browet2010-03-311-0/+6
| | | | | | | | | | | | | | | | | All regression tests pass. Note from esr: this feature cannot be announced yert, as it requires documentation in the INSTALL file. 1. What the target environments are (Linux? Windows? Both) 2. All build prerequisites (C++ compiler? Qt library? Other libraries?) 3. What the new files libQgpsmm_global.h and libQgpsmm.pro are for, and how the are used. We also need to know how to regression-test this code under Linux so we can verify that it's not broken as the client library evolves. Signed-off-by: Eric S. Raymond <esr@thyrsus.com>
* Vanish away Id and Rev $ keywords, git won't expand them to anything useful.Eric S. Raymond2010-03-131-2/+0
|
* Copyright stamps everywhere. No code changes.Eric S. Raymond2010-03-111-2/+7
|
* Avoid a collision with typedef boolean.Eric S. Raymond2010-01-041-3/+5
| | | | All regression tests pass.
* Client library debugging can now nbe enabled at runtime.Eric S. Raymond2009-11-201-0/+2
| | | | | That is, if the CLIENTDEBUG_ENABLE feature switch is on. All regression tests pass.
* Splint Cleanup Meets Billy The Kid. All regression tests pass.Eric S. Raymond2009-09-101-2/+2
|
* Bride of the Splint Cleanup. All regression tests pass.Eric S. Raymond2009-09-101-2/+4
|
* Yet more splint cleanup. All regression tests pass.Eric S. Raymond2009-09-091-2/+2
|
* Partial splint cleanup. All regression tests pass.Eric S. Raymond2009-09-091-1/+1
|
* Added more type testing in the JSON parser.Eric S. Raymond2009-09-071-1/+2
|
* Enable JSON parser to recognize a type mismatch.Eric S. Raymond2009-09-071-1/+2
|
* More code generation - up to AIS message 13 now.Eric S. Raymond2009-09-011-1/+1
| | | | All regression tests pass.
* Create a way not to step on defaults.Eric S. Raymond2009-08-301-0/+1
|
* Allow mapping of strings to enumerated values in JSON.Eric S. Raymond2009-08-281-2/+8
|
* RTCM2 JSON parser is feature-complete and ready for test.Eric S. Raymond2009-08-281-2/+3
|
* Use STRUCTARRAY everywhere it's apprpriate. JSON regression tests pass.Eric S. Raymond2009-08-271-4/+3
|
* Create a convenience macro for JSON parser template declarations.Eric S. Raymond2009-08-271-0/+20
|
* Add an unsigned integer field type to the JSON parser (needed for RTCM2).Eric S. Raymond2009-08-271-1/+3
| | | | Also add a unit test for this.
* Add character type to JSON parser.Eric S. Raymond2009-08-251-1/+3
| | | | | Make gpsctl work with new protocol (only the device ID function is tested at this point).
* Change the way JSON parse templates are declared... Eric S. Raymond2009-08-251-4/+3
| | | | so that string lengths won't step on offsets.
* Remove enumerated-flags feature from JSON parser.Eric S. Raymond2009-08-191-10/+1
| | | | Too much complexity for too little gain.
* JSON parser can now unpack JSON lists into structure arrays.Eric S. Raymond2009-08-191-2/+7
|
* Hide an argument that doesn't need to be exposed.Eric S. Raymond2009-08-191-1/+1
|
* Removed unused member.Eric S. Raymond2009-08-191-1/+0
|
* Change enumerated array JSON type to yield a bitmask rather than an array.Eric S. Raymond2009-08-191-6/+5
|
* Give the JSON parser the ability to map strings to enumerated types.Eric S. Raymond2009-08-191-1/+13
|
* Checkpoint before giving the JSON parses a notion of enumerated types.Eric S. Raymond2009-08-191-2/+2
|
* Add check-string attributes to JSON parser.Eric S. Raymond2009-08-181-2/+3
| | | | Add JSON unit test to default test sequence.
* New-style WATCH command is working... Eric S. Raymond2009-07-291-0/+2
| | | | | ...at least for the simplest case ?WATCH={"TPV":true}. More testing will follow.
* More JSON refactoring - prepare the client libary to use it.Eric S. Raymond2009-07-211-1/+1
|
* SVN Id tagsChris Kuethe2009-07-161-0/+1
|
* JSON error-handling cleanup.Eric S. Raymond2009-07-141-15/+15
|
* JSON parser can now handle arrays of strings.Eric S. Raymond2009-07-141-3/+16
|
* Add entry point for dumping JSON parse error condition text messages.Eric S. Raymond2009-07-131-0/+1
|
* Subarray parsing in JSON is working, now to tighten up the validity checks.Eric S. Raymond2009-07-131-2/+4
|
* Set up initializers for JSON satellite data parsing.Eric S. Raymond2009-07-131-4/+3
|