]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
* Fix additional error case in object parsing
authorMichael Clark <michael@metaparadigm.com>
Tue, 13 Mar 2007 08:26:22 +0000 (08:26 +0000)
committerMichael Clark <michael@metaparadigm.com>
Tue, 13 Mar 2007 08:26:22 +0000 (08:26 +0000)
  * Add back sign reversal in nested object parse as error pointer
    value is negative, while error value is positive.
    Michael Clark <michael@metaparadigm.com>

git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@8 327403b1-1117-474d-bef2-5cb71233fd97

ChangeLog
README.html
json_tokener.c
test1.c

index 5b6909758fbdaf2fc2b0f90f37f17c3acd01ecd1..5dea73e22881c89b108e2b5746f5cd968781f202 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+0.4
+  * Fix additional error case in object parsing
+  * Add back sign reversal in nested object parse as error pointer
+    value is negative, while error value is positive.
+    Michael Clark <michael@metaparadigm.com>
+
 0.3
   * fix pointer arithmetic bug for error pointer check in is_error() macro
   * fix type passed to printbuf_memappend in json_tokener
index 52b44953e16789cd4db5353dcad208efb2bfcc0d..65d9917efb892fc4e41b6addef953a5f22bc9e92 100644 (file)
@@ -8,7 +8,7 @@
        </head>\r
        <body>\r
                <h2>JSON-C - A JSON implementation in C</h2>\r
-               <p>Latest release: <a href="json-c-0.3.tar.gz">json-c-0.3.tar.gz</a></p>\r
+               <p>Latest release: <a href="json-c-0.4.tar.gz">json-c-0.4.tar.gz</a></p>\r
                <p>JSON-C implements a reference counting object model that allows you to easily \r
                        construct JSON objects in C, output them as JSON formatted strings and parse \r
                        JSON formatted strings back into the C representation of JSON objects.</p>\r
index a224c7df742b4c44e1f8f4a59c57b56f1be59e14..fdb51135b0a4a0dd42e4c61eb637a2d26de5a238 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: json_tokener.c,v 1.15 2005/07/15 03:19:43 mclark Exp $
+ * $Id: json_tokener.c,v 1.17 2005/07/26 07:49:11 mclark Exp $
  *
  * Copyright Metaparadigm Pte. Ltd. 2004.
  * Michael Clark <michael@metaparadigm.com>
@@ -350,7 +350,7 @@ static struct json_object* json_tokener_do_parse(struct json_tokener *this)
       } else {
        obj = json_tokener_do_parse(this);
        if(is_error(obj)) {
-         err = (enum json_tokener_error)obj;
+         err = -(enum json_tokener_error)obj;
          goto out;
        }
        json_object_array_add(current, obj);
@@ -389,6 +389,9 @@ static struct json_object* json_tokener_do_parse(struct json_tokener *this)
        printbuf_reset(this->pb);
        state = json_tokener_state_object_field;
        start_offset = ++this->pos;
+      } else {
+       err = json_tokener_error_parse_object;
+       goto out;
       }
       break;
 
@@ -419,7 +422,7 @@ static struct json_object* json_tokener_do_parse(struct json_tokener *this)
     case json_tokener_state_object_value:
       obj = json_tokener_do_parse(this);
       if(is_error(obj)) {
-       err = (enum json_tokener_error)obj;
+       err = -(enum json_tokener_error)obj;
        goto out;
       }
       json_object_object_add(current, obj_field_name, obj);
@@ -457,5 +460,5 @@ static struct json_object* json_tokener_do_parse(struct json_tokener *this)
   mc_debug("json_tokener_do_parse: error=%d state=%d char=%c\n",
           err, state, c);
   json_object_put(current);
-  return error_ptr((ptrdiff_t)-err);
+  return error_ptr(-err);
 }
diff --git a/test1.c b/test1.c
index 2376d4a8fe07a14cffd1a2349fc04fb90d014727..7f34cdc67f2373aa22df073ae85e9c67c5895e91 100644 (file)
--- a/test1.c
+++ b/test1.c
@@ -121,6 +121,9 @@ int main(int argc, char **argv)
   printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
   json_object_put(new_obj);
 
+  new_obj = json_tokener_parse("{ foo }");
+  if(is_error(new_obj)) printf("got error as expected\n");
+
   new_obj = json_tokener_parse("foo");
   if(is_error(new_obj)) printf("got error as expected\n");