15 Commits
v1.2 ... v1.2.1

Author SHA1 Message Date
Petri Lehtinen
047a1417fb jansson 1.2.1 2010-04-03 13:49:56 +03:00
Petri Lehtinen
ce42e30b8c doc: Distribute conformance.rst 2010-04-03 13:49:56 +03:00
Petri Lehtinen
024106bbfb Require autoconf 2.60
The AC_TYPE_INT32_T macro first appeared in autoconf 2.60.
2010-03-28 21:19:40 +03:00
Petri Lehtinen
29ee3832cf Support compilers that don't have the "inline" keyword
Use AC_C_INLINE autoconf macro, include config.h where needed, and add
a define of JSON_INLINE to jansson.h that has the correct "inline"
keyword.
2010-03-28 21:14:08 +03:00
Petri Lehtinen
c7c2edae8a doc: Add chapter on RFC conformance
Thanks to Deron Meranda for providing the initial text.
2010-03-26 22:03:26 +02:00
Petri Lehtinen
bb89a5d4d3 Estimate real number underflows with 0.0
Earlier it was a decoding error.
2010-03-26 21:59:56 +02:00
Petri Lehtinen
f76966b438 Enhance tests for null byte 2010-03-26 21:29:36 +02:00
Petri Lehtinen
f284e3c069 Fix reference counting on true, false and null
Initialize their reference counts to (unsigned int)-1 to disable
reference counting on them. It already was meant to work like this,
but the reference counts were just initialized to 1 instead of -1.

Thanks to Andrew Thompson for reporting this issue.
2010-03-23 08:12:32 +02:00
Petri Lehtinen
a2a9107600 Don't include stdint.h anywhere
This should have fixed by commit 28682322, but there was one #include
left in utf.c. It now includes utf.h instead of stdint.h.
2010-03-18 07:22:43 +02:00
Petri Lehtinen
286823227c Make int32_t available on all systems
Use AC_TYPE_INT32_T and include inttypes.h (if it exists) instead of
stdint.h for maximum portability.
2010-02-06 21:11:41 +02:00
Petri Lehtinen
08dc8d9baf Add year 2010 to copyright notices 2010-02-02 21:26:11 +02:00
Petri Lehtinen
f5662a82cd test/suites/api/test_object.c: Enhance tests for iterators 2010-01-28 21:04:21 +02:00
Petri Lehtinen
ab2e567685 test/suites/api: Fail when a test fails
The valgrind fix a while back apparently made the test system not
notice normal failures in suites/api.
2010-01-28 20:58:26 +02:00
Petri Lehtinen
d8ea2f8c4b run-tests.sh: Print the test name correctly when VERBOSE=1 2010-01-28 20:57:52 +02:00
Petri Lehtinen
aaae37afba doc/Makefile.am: Don't remove changes.rst in clean 2010-01-26 21:19:48 +02:00
59 changed files with 326 additions and 83 deletions

1
.gitignore vendored
View File

@@ -23,3 +23,4 @@ missing
stamp-h1
*.pyc
*.pc
/src/jansson.h

30
CHANGES
View File

@@ -1,3 +1,33 @@
Version 1.2.1
=============
Released 2010-04-03
* Bug fixes:
- Fix reference counting on ``true``, ``false`` and ``null``
- Estimate real number underflows in decoder with 0.0 instead of
issuing an error
* Portability:
- Make ``int32_t`` available on all systems
- Support compilers that don't have the ``inline`` keyword
- Require Autoconf 2.60 (for ``int32_t``)
* Tests:
- Print test names correctly when ``VERBOSE=1``
- ``test/suites/api``: Fail when a test fails
- Enhance tests for iterators
- Enhance tests for decoding texts that contain null bytes
* Documentation:
- Don't remove ``changes.rst`` in ``make clean``
- Add a chapter on RFC conformance
Version 1.2
===========

View File

@@ -1,4 +1,4 @@
Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,5 +1,5 @@
AC_PREREQ([2.59])
AC_INIT([jansson], [1.2], [petri@digip.org])
AC_PREREQ([2.60])
AC_INIT([jansson], [1.2.1], [petri@digip.org])
AM_INIT_AUTOMAKE([1.10 foreign])
@@ -15,6 +15,15 @@ AC_PROG_LIBTOOL
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_INT32_T
AC_C_INLINE
case $ac_cv_c_inline in
yes) json_inline=inline;;
no) json_inline=;;
*) json_inline=$ac_cv_c_inline;;
esac
AC_SUBST([json_inline])
# Checks for library functions.
@@ -23,6 +32,7 @@ AC_CONFIG_FILES([
Makefile
doc/Makefile
src/Makefile
src/jansson.h
test/Makefile
test/bin/Makefile
test/suites/Makefile

View File

@@ -1,5 +1,6 @@
EXTRA_DIST = conf.py apiref.rst changes.rst gettingstarted.rst \
github_commits.c index.rst tutorial.rst ext/refcounting.py
EXTRA_DIST = conf.py apiref.rst changes.rst conformance.rst \
gettingstarted.rst github_commits.c index.rst tutorial.rst \
ext/refcounting.py
SPHINXBUILD = sphinx-build
SPHINXOPTS = -d _build/doctrees -W
@@ -16,4 +17,4 @@ uninstall-local:
clean-local:
rm -rf _build
rm -f ext/refcounting.pyc changes.rst
rm -f ext/refcounting.pyc

View File

@@ -43,7 +43,7 @@ master_doc = 'index'
# General information about the project.
project = u'Jansson'
copyright = u'2009, Petri Lehtinen'
copyright = u'2009, 2010 Petri Lehtinen'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -52,7 +52,7 @@ copyright = u'2009, Petri Lehtinen'
# The short X.Y version.
version = '1.2'
# The full version, including alpha/beta/rc tags.
release = '1.2'
release = '1.2.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

102
doc/conformance.rst Normal file
View File

@@ -0,0 +1,102 @@
***************
RFC Conformance
***************
JSON is specified in :rfc:`4627`, *"The application/json Media Type
for JavaScript Object Notation (JSON)"*. This chapter discusses
Jansson's conformance to this specification.
Character Encoding
==================
Jansson only supports UTF-8 encoded JSON texts. It does not support or
auto-detect any of the other encodings mentioned in the RFC, namely
UTF-16LE, UTF-16BE, UTF-32LE or UTF-32BE. Pure ASCII is supported, as
it's a subset of UTF-8.
Strings
=======
JSON strings are mapped to C-style null-terminated character arrays,
and UTF-8 encoding is used internally. Strings may not contain
embedded null characters, not even escaped ones.
For example, trying to decode the following JSON text leads to a parse
error::
["this string contains the null character: \u0000"]
All other Unicode codepoints U+0001 through U+10FFFF are allowed.
Numbers
=======
Real vs. Integer
----------------
JSON makes no distinction between real and integer numbers; Jansson
does. Real numbers are mapped to the ``double`` type and integers to
the ``int`` type.
A JSON number is considered to be a real number if its lexical
representation includes one of ``e``, ``E``, or ``.``; regardless if
its actual numeric value is a true integer (e.g., all of ``1E6``,
``3.0``, ``400E-2``, and ``3.14E3`` are mathematical integers, but
will be treated as real values).
All other JSON numbers are considered integers.
When encoding to JSON, real values are always represented
with a fractional part; e.g., the ``double`` value 3.0 will be
represented in JSON as ``3.0``, not ``3``.
Overflow, Underflow & Precision
-------------------------------
Real numbers whose absolute values are too small to be represented in
a C double will be silently estimated with 0.0. Thus, depending on
platform, JSON numbers very close to zero such as 1E-999 may result in
0.0.
Real numbers whose absolute values are too large to be represented in
a C ``double`` type will result in an overflow error (a JSON decoding
error). Thus, depending on platform, JSON numbers like 1E+999 or
-1E+999 may result in a parsing error.
Likewise, integer numbers whose absolute values are too large to be
represented in the ``int`` type will result in an overflow error (a
JSON decoding error). Thus, depending on platform, JSON numbers like
1000000000000000 may result in parsing error.
Parsing JSON real numbers may result in a loss of precision. As long
as overflow does not occur (i.e. a total loss of precision), the
rounded approximate value is silently used. Thus the JSON number
1.000000000000000005 may, depending on platform, result in the
``double`` value 1.0.
Signed zeros
------------
JSON makes no statement about what a number means; however Javascript
(ECMAscript) does state that +0.0 and -0.0 must be treated as being
distinct values, i.e. -0.0 |not-equal| 0.0. Jansson relies on the
underlying floating point library in the C environment in which it is
compiled. Therefore it is platform-dependent whether 0.0 and -0.0 will
be distinct values. Most platforms that use the IEEE 754
floating-point standard will support signed zeros.
Note that this only applies to floating-point; neither JSON, C, or
IEEE support the concept of signed integer zeros.
.. |not-equal| unicode:: U+2260
Types
-----
No support is provided in Jansson for any C numeric types other than
``int`` and ``double``. This excludes things such as unsigned types,
``long``, ``long long``, ``long double``, etc. Obviously, shorter
types like ``short`` and ``float`` are implicitly handled via the
ordinary C type coercion rules (subject to overflow semantics). Also,
no support or hooks are provided for any supplemental "bignum" type
add-on packages.

View File

@@ -19,7 +19,7 @@
<description of the json_object function>
:copyright: Copyright 2009 Petri Lehtinen <petri@digip.org>
:copyright: Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
:license: MIT, see LICENSE for details.
"""

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -34,6 +34,7 @@ Contents
gettingstarted
tutorial
conformance
apiref
changes

View File

@@ -15,6 +15,6 @@ libjansson_la_SOURCES = \
value.c
libjansson_la_LDFLAGS = \
-export-symbols-regex '^json_' \
-version-info 2:0:2
-version-info 2:1:2
AM_CFLAGS = -Wall -Wextra -Werror

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -9,7 +9,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <assert.h>
#include <jansson.h>

View File

@@ -1,10 +1,12 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#include <config.h>
#include <stdlib.h>
#include "hashtable.h"

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -10,7 +10,10 @@
#include <stdio.h>
#ifdef __cplusplus
#ifndef __cplusplus
#define JSON_INLINE @json_inline@
#else
#define JSON_INLINE inline
extern "C" {
#endif
@@ -56,7 +59,8 @@ json_t *json_true(void);
json_t *json_false(void);
json_t *json_null(void);
static inline json_t *json_incref(json_t *json)
static JSON_INLINE
json_t *json_incref(json_t *json)
{
if(json && json->refcount != (unsigned int)-1)
++json->refcount;
@@ -66,7 +70,8 @@ static inline json_t *json_incref(json_t *json)
/* do not call json_delete directly */
void json_delete(json_t *json);
static inline void json_decref(json_t *json)
static JSON_INLINE
void json_decref(json_t *json)
{
if(json && json->refcount != (unsigned int)-1 && --json->refcount == 0)
json_delete(json);
@@ -87,13 +92,13 @@ void *json_object_iter_next(json_t *object, void *iter);
const char *json_object_iter_key(void *iter);
json_t *json_object_iter_value(void *iter);
static inline
static JSON_INLINE
int json_object_set(json_t *object, const char *key, json_t *value)
{
return json_object_set_new(object, key, json_incref(value));
}
static inline
static JSON_INLINE
int json_object_set_nocheck(json_t *object, const char *key, json_t *value)
{
return json_object_set_new_nocheck(object, key, json_incref(value));
@@ -108,19 +113,19 @@ int json_array_remove(json_t *array, unsigned int index);
int json_array_clear(json_t *array);
int json_array_extend(json_t *array, json_t *other);
static inline
static JSON_INLINE
int json_array_set(json_t *array, unsigned int index, json_t *value)
{
return json_array_set_new(array, index, json_incref(value));
}
static inline
static JSON_INLINE
int json_array_append(json_t *array, json_t *value)
{
return json_array_append_new(array, json_incref(value));
}
static inline
static JSON_INLINE
int json_array_insert(json_t *array, unsigned int index, json_t *value)
{
return json_array_insert_new(array, index, json_incref(value));

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -14,7 +14,6 @@
#include <string.h>
#include <stdarg.h>
#include <assert.h>
#include <stdint.h>
#include <jansson.h>
#include "jansson_private.h"
@@ -484,14 +483,7 @@ static int lex_scan_number(lex_t *lex, char c, json_error_t *error)
value = strtod(saved_text, &end);
assert(end == saved_text + lex->saved_text.length);
if(value == 0 && errno == ERANGE) {
error_set(error, lex, "real number underflow");
goto out;
}
/* Cannot test for +/-HUGE_VAL because the HUGE_VAL constant is
only defined in C99 mode. So let's trust in sole errno. */
else if(errno == ERANGE) {
if(errno == ERANGE && value != 0) {
error_set(error, lex, "real number overflow");
goto out;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,12 +1,12 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#include <string.h>
#include <stdint.h>
#include "utf.h"
int utf8_encode(int32_t codepoint, char *buffer, int *size)
{

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -8,6 +8,15 @@
#ifndef UTF_H
#define UTF_H
#include <config.h>
#ifdef HAVE_INTTYPES_H
/* inttypes.h includes stdint.h in a standard environment, so there's
no need to include stdint.h separately. If inttypes.h doesn't define
int32_t, it's defined in config.h. */
#include <inttypes.h>
#endif
int utf8_encode(int codepoint, char *buffer, int *size);
int utf8_check_first(char byte);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,11 +1,14 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#define _GNU_SOURCE
#include <config.h>
#include <stdlib.h>
#include <string.h>
@@ -784,7 +787,7 @@ json_t *json_true(void)
{
static json_t the_true = {
.type = JSON_TRUE,
.refcount = (unsigned int)1
.refcount = (unsigned int)-1
};
return &the_true;
}
@@ -794,7 +797,7 @@ json_t *json_false(void)
{
static json_t the_false = {
.type = JSON_FALSE,
.refcount = (unsigned int)1
.refcount = (unsigned int)-1
};
return &the_false;
}
@@ -804,7 +807,7 @@ json_t *json_null(void)
{
static json_t the_null = {
.type = JSON_NULL,
.refcount = (unsigned int)1
.refcount = (unsigned int)-1
};
return &the_null;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
@@ -29,7 +29,7 @@ for test_path in $suite_srcdir/*; do
rm -rf $test_log
mkdir -p $test_log
if [ $VERBOSE -eq 1 ]; then
echo -n "$name... "
echo -n "$test_name... "
fi
if run_test; then

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
@@ -17,7 +17,8 @@ run_test() {
else
$test_runner $suite_builddir/${test_name%.c} \
>$test_log/stdout \
2>$test_log/stderr
2>$test_log/stderr \
|| return 1
valgrind_check $test_log/stderr || return 1
fi
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -205,10 +205,68 @@ static void test_set_nocheck()
json_decref(object);
}
static void test_iterators()
{
json_t *object, *foo, *bar, *baz;
void *iter;
if(json_object_iter(NULL))
fail("able to iterate over NULL");
if(json_object_iter_next(NULL, NULL))
fail("able to increment an iterator on a NULL object");
object = json_object();
foo = json_string("foo");
bar = json_string("bar");
baz = json_string("baz");
if(!object || !foo || !bar || !bar)
fail("unable to create values");
if(json_object_iter_next(object, NULL))
fail("able to increment a NULL iterator");
if(json_object_set(object, "a", foo) ||
json_object_set(object, "b", bar) ||
json_object_set(object, "c", baz))
fail("unable to populate object");
iter = json_object_iter(object);
if(!iter)
fail("unable to get iterator");
if(strcmp(json_object_iter_key(iter), "a"))
fail("iterating failed: wrong key");
if(json_object_iter_value(iter) != foo)
fail("iterating failed: wrong value");
iter = json_object_iter_next(object, iter);
if(!iter)
fail("unable to increment iterator");
if(strcmp(json_object_iter_key(iter), "b"))
fail("iterating failed: wrong key");
if(json_object_iter_value(iter) != bar)
fail("iterating failed: wrong value");
iter = json_object_iter_next(object, iter);
if(!iter)
fail("unable to increment iterator");
if(strcmp(json_object_iter_key(iter), "c"))
fail("iterating failed: wrong key");
if(json_object_iter_value(iter) != baz)
fail("iterating failed: wrong value");
if(json_object_iter_next(object, iter) != NULL)
fail("able to iterate over the end");
json_decref(object);
json_decref(foo);
json_decref(bar);
json_decref(baz);
}
static void test_misc()
{
json_t *object, *string, *other_string, *value;
void *iter;
object = json_object();
string = json_string("test");
@@ -231,17 +289,6 @@ static void test_misc()
if(!json_object_set(object, "a", NULL))
fail("able to set NULL value");
iter = json_object_iter(object);
if(!iter)
fail("unable to get iterator");
if(strcmp(json_object_iter_key(iter), "a"))
fail("iterating failed: wrong key");
if(json_object_iter_value(iter) != string)
fail("iterating failed: wrong value");
if(json_object_iter_next(object, iter) != NULL)
fail("able to iterate over the end");
/* invalid UTF-8 in key */
if(!json_object_set(object, "a\xefz", string))
fail("able to set invalid unicode key");
@@ -332,6 +379,7 @@ int main()
test_update();
test_circular();
test_set_nocheck();
test_iterators();
return 0;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
@@ -150,5 +150,36 @@ int main()
fail("json_null failed");
json_decref(value);
/* Test reference counting on singletons (true, false, null) */
value = json_true();
if(value->refcount != (unsigned int)-1)
fail("refcounting true works incorrectly");
json_decref(value);
if(value->refcount != (unsigned int)-1)
fail("refcounting true works incorrectly");
json_incref(value);
if(value->refcount != (unsigned int)-1)
fail("refcounting true works incorrectly");
value = json_false();
if(value->refcount != (unsigned int)-1)
fail("refcounting false works incorrectly");
json_decref(value);
if(value->refcount != (unsigned int)-1)
fail("refcounting false works incorrectly");
json_incref(value);
if(value->refcount != (unsigned int)-1)
fail("refcounting false works incorrectly");
value = json_null();
if(value->refcount != (unsigned int)-1)
fail("refcounting null works incorrectly");
json_decref(value);
if(value->refcount != (unsigned int)-1)
fail("refcounting null works incorrectly");
json_incref(value);
if(value->refcount != (unsigned int)-1)
fail("refcounting null works incorrectly");
return 0;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
* Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

View File

@@ -0,0 +1,2 @@
1
\u0000 is not allowed

View File

@@ -0,0 +1 @@
["\u0000 (null byte not allowed)"]

View File

@@ -1,2 +1,2 @@
1
\u0000 is not allowed
control character 0x0 near '"null byte '

View File

@@ -0,0 +1,2 @@
1
invalid token near end of file

View File

@@ -1,2 +0,0 @@
1
real number underflow near '123e-10000000'

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

View File

@@ -0,0 +1,2 @@
1
\u0000 is not allowed

View File

@@ -0,0 +1 @@
["\u0000 (null byte not allowed)"]

View File

@@ -1,2 +1,2 @@
1
\u0000 is not allowed
control character 0x0 near '"null byte '

View File

@@ -0,0 +1,2 @@
1
invalid token near end of file

Binary file not shown.

View File

@@ -1,2 +0,0 @@
1
real number underflow near '123e-10000000'

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

View File

@@ -0,0 +1 @@
[0.0]

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

View File

@@ -0,0 +1 @@
[0.0]

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
# Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.