<p>Corey Farrell has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/10709">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">jansson: Upgrade to 2.12.<br><br>This brings in jansson-2.12, removes all patches that were merged<br>upstream.  README is created in third-party/jansson/patches to explain<br>how to add patches but also because the patches folder must exist for<br>the build process to succeed.<br><br>Change-Id: If0f2d541c50997690660c21fb7b03d625a5cdadd<br>---<br>M contrib/scripts/install_prereq<br>D third-party/jansson/jansson-2.11.tar.bz2.md5<br>A third-party/jansson/jansson-2.12.tar.bz2.md5<br>D third-party/jansson/patches/0001-Improve-test-coverage.patch<br>D third-party/jansson/patches/0017-Fix-error-handling-in-json_pack.patch<br>D third-party/jansson/patches/0022-Avoid-invalid-memory-read-in-json_pack.patch<br>D third-party/jansson/patches/0025-Call-va_end-after-va_copy-in-json_vsprintf.patch<br>D third-party/jansson/patches/0027-Rename-a-varialble-that-shadows-another-one.patch<br>D third-party/jansson/patches/0029-json_pack-Improve-handling-of-formats-with-and.patch<br>D third-party/jansson/patches/0030-More-work-on-json_pack-error-reporting.patch<br>D third-party/jansson/patches/0035-Remove-inappropriate-jsonp_free-which-caused-segment.patch<br>A third-party/jansson/patches/README<br>M third-party/versions.mak<br>13 files changed, 13 insertions(+), 767 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/09/10709/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/contrib/scripts/install_prereq b/contrib/scripts/install_prereq</span><br><span>index 8675a94..186da6a 100755</span><br><span>--- a/contrib/scripts/install_prereq</span><br><span>+++ b/contrib/scripts/install_prereq</span><br><span>@@ -155,7 +155,7 @@</span><br><span> </span><br><span> KVERS=`uname -r`</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-JANSSON_VER=2.11</span><br><span style="color: hsl(120, 100%, 40%);">+JANSSON_VER=2.12</span><br><span> </span><br><span> case "$1" in</span><br><span> test)</span><br><span>diff --git a/third-party/jansson/jansson-2.11.tar.bz2.md5 b/third-party/jansson/jansson-2.11.tar.bz2.md5</span><br><span>deleted file mode 100644</span><br><span>index db4326c..0000000</span><br><span>--- a/third-party/jansson/jansson-2.11.tar.bz2.md5</span><br><span>+++ /dev/null</span><br><span>@@ -1 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-289ca8cbd2df31de9bda7e5220754d25  jansson-2.11.tar.bz2</span><br><span>diff --git a/third-party/jansson/jansson-2.12.tar.bz2.md5 b/third-party/jansson/jansson-2.12.tar.bz2.md5</span><br><span>new file mode 100644</span><br><span>index 0000000..b0d08d8</span><br><span>--- /dev/null</span><br><span>+++ b/third-party/jansson/jansson-2.12.tar.bz2.md5</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+317dbaf90a9f85ea0ec7b12d080d173d  jansson-2.12.tar.bz2</span><br><span>diff --git a/third-party/jansson/patches/0001-Improve-test-coverage.patch b/third-party/jansson/patches/0001-Improve-test-coverage.patch</span><br><span>deleted file mode 100644</span><br><span>index 226c404..0000000</span><br><span>--- a/third-party/jansson/patches/0001-Improve-test-coverage.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,128 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 73c22de51672cb40fdc29c95331923d4dcebb6fa Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Corey Farrell <git@cfware.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Tue, 13 Feb 2018 04:35:37 -0500</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 01/22] Improve test coverage.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Changes to test/ removed for bundled use in Asterisk.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-* Test equality of different length strings.</span><br><span style="color: hsl(0, 100%, 40%);">-* Add tab to json_pack whitespace test.</span><br><span style="color: hsl(0, 100%, 40%);">-* Test json_sprintf with empty result and invalid UTF.</span><br><span style="color: hsl(0, 100%, 40%);">-* Test json_get_alloc_funcs with NULL arguments.</span><br><span style="color: hsl(0, 100%, 40%);">-* Test invalid arguments.</span><br><span style="color: hsl(0, 100%, 40%);">-* Add test_chaos to test allocation failure code paths.</span><br><span style="color: hsl(0, 100%, 40%);">-* Remove redundant json_is_string checks from json_string_equal and</span><br><span style="color: hsl(0, 100%, 40%);">-  json_string_copy.  Both functions are static and can only be called</span><br><span style="color: hsl(0, 100%, 40%);">-  with a json string.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes to issues found by test_chaos:</span><br><span style="color: hsl(0, 100%, 40%);">-* Fix crash on OOM in pack_unpack.c:read_string().</span><br><span style="color: hsl(0, 100%, 40%);">-* Unconditionally free string in string_create upon allocation failure.</span><br><span style="color: hsl(0, 100%, 40%);">-  Update load.c:parse_value() to reflect this.  This resolves a leak on</span><br><span style="color: hsl(0, 100%, 40%);">-  allocation failure for pack_unpack.c:pack_string() and</span><br><span style="color: hsl(0, 100%, 40%);">-  value.c:json_sprintf().</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Although not visible from CodeCoverage these changes significantly</span><br><span style="color: hsl(0, 100%, 40%);">-increase branch coverage.  Especially in src/value.c where we previously</span><br><span style="color: hsl(0, 100%, 40%);">-covered 67.4% of branches and now cover 96.3% of branches.</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- CMakeLists.txt                      |   1 +</span><br><span style="color: hsl(0, 100%, 40%);">- src/load.c                          |   6 +-</span><br><span style="color: hsl(0, 100%, 40%);">- src/pack_unpack.c                   |   5 +-</span><br><span style="color: hsl(0, 100%, 40%);">- src/value.c                         |   9 +-</span><br><span style="color: hsl(0, 100%, 40%);">- test/.gitignore                     |   1 +</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/Makefile.am         |   2 +</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_array.c        |  73 +++++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_chaos.c        | 115 ++++++++++++++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_equal.c        |   7 ++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_memory_funcs.c |   7 ++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_number.c       |  36 ++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_object.c       | 122 ++++++++++++++++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_pack.c         |  10 ++-</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_simple.c       |  52 ++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_sprintf.c      |  12 +++</span><br><span style="color: hsl(0, 100%, 40%);">- 15 files changed, 444 insertions(+), 14 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 test/suites/api/test_chaos.c</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CMakeLists.txt b/CMakeLists.txt</span><br><span style="color: hsl(0, 100%, 40%);">-index 16cf552..2f6cfec 100644</span><br><span>---- a/CMakeLists.txt</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CMakeLists.txt</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -487,6 +487,7 @@ if (NOT JANSSON_WITHOUT_TESTS)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(api_tests</span><br><span style="color: hsl(0, 100%, 40%);">-          test_array</span><br><span style="color: hsl(0, 100%, 40%);">-          test_copy</span><br><span style="color: hsl(0, 100%, 40%);">-+         test_chaos</span><br><span style="color: hsl(0, 100%, 40%);">-          test_dump</span><br><span style="color: hsl(0, 100%, 40%);">-          test_dump_callback</span><br><span style="color: hsl(0, 100%, 40%);">-          test_equal</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/load.c b/src/load.c</span><br><span style="color: hsl(0, 100%, 40%);">-index deb36f3..25efe2e 100644</span><br><span>---- a/src/load.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/load.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -829,10 +829,8 @@ static json_t *parse_value(lex_t *lex, size_t flags, json_error_t *error)</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-             json = jsonp_stringn_nocheck_own(value, len);</span><br><span style="color: hsl(0, 100%, 40%);">--            if(json) {</span><br><span style="color: hsl(0, 100%, 40%);">--                lex->value.string.val = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">--                lex->value.string.len = 0;</span><br><span style="color: hsl(0, 100%, 40%);">--            }</span><br><span style="color: hsl(0, 100%, 40%);">-+            lex->value.string.val = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+            lex->value.string.len = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-             break;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/pack_unpack.c b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 153f64d..19dbf93 100644</span><br><span>---- a/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -159,7 +159,10 @@ static char *read_string(scanner_t *s, va_list *ap,</span><br><span style="color: hsl(0, 100%, 40%);">-         return (char *)str;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    strbuffer_init(&strbuff);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if(strbuffer_init(&strbuff)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        set_error(s, "<internal>", json_error_out_of_memory, "Out of memory");</span><br><span style="color: hsl(0, 100%, 40%);">-+        s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     while(1) {</span><br><span style="color: hsl(0, 100%, 40%);">-         str = va_arg(*ap, const char *);</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/value.c b/src/value.c</span><br><span style="color: hsl(0, 100%, 40%);">-index b3b3141..29a978c 100644</span><br><span>---- a/src/value.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/value.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -652,8 +652,7 @@ static json_t *string_create(const char *value, size_t len, int own)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     string = jsonp_malloc(sizeof(json_string_t));</span><br><span style="color: hsl(0, 100%, 40%);">-     if(!string) {</span><br><span style="color: hsl(0, 100%, 40%);">--        if(!own)</span><br><span style="color: hsl(0, 100%, 40%);">--            jsonp_free(v);</span><br><span style="color: hsl(0, 100%, 40%);">-+        jsonp_free(v);</span><br><span style="color: hsl(0, 100%, 40%);">-         return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-     json_init(&string->json, JSON_STRING);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -768,9 +767,6 @@ static int json_string_equal(const json_t *string1, const json_t *string2)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     json_string_t *s1, *s2;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    if(!json_is_string(string1) || !json_is_string(string2))</span><br><span style="color: hsl(0, 100%, 40%);">--        return 0;</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">-     s1 = json_to_string(string1);</span><br><span style="color: hsl(0, 100%, 40%);">-     s2 = json_to_string(string2);</span><br><span style="color: hsl(0, 100%, 40%);">-     return s1->length == s2->length && !memcmp(s1->value, s2->value, s1->length);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -780,9 +776,6 @@ static json_t *json_string_copy(const json_t *string)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     json_string_t *s;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    if(!json_is_string(string))</span><br><span style="color: hsl(0, 100%, 40%);">--        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">-     s = json_to_string(string);</span><br><span style="color: hsl(0, 100%, 40%);">-     return json_stringn_nocheck(s->value, s->length);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0017-Fix-error-handling-in-json_pack.patch b/third-party/jansson/patches/0017-Fix-error-handling-in-json_pack.patch</span><br><span>deleted file mode 100644</span><br><span>index affa6c9..0000000</span><br><span>--- a/third-party/jansson/patches/0017-Fix-error-handling-in-json_pack.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,103 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 15105b66b4df387037b670ac713584194ea10c2f Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Maxim Zhukov <mussitantesmortem@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Mon, 12 Mar 2018 17:39:04 +0300</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 17/22] Fix error handling in json_pack</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Changes to test/ removed.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixed a bug where the error message was not filled if an empty object</span><br><span style="color: hsl(0, 100%, 40%);">-was passed to the json_pack.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes #271</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- src/pack_unpack.c           | 64 ++++++++++++++++++-------------------</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_pack.c |  8 +++++</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 40 insertions(+), 32 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/pack_unpack.c b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 4026fd9..6461c06 100644</span><br><span>---- a/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -348,6 +348,36 @@ static json_t *pack_string(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+static json_t *pack_object_inter(scanner_t *s, va_list *ap, int need_incref)</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+    json_t *json;</span><br><span style="color: hsl(0, 100%, 40%);">-+    char ntoken;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+    ntoken = token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ntoken != '?')</span><br><span style="color: hsl(0, 100%, 40%);">-+        prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    json = va_arg(*ap, json_t *);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (json)</span><br><span style="color: hsl(0, 100%, 40%);">-+        return need_incref ? json_incref(json) : json;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    switch (ntoken) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        case '?':</span><br><span style="color: hsl(0, 100%, 40%);">-+            return json_null();</span><br><span style="color: hsl(0, 100%, 40%);">-+        case '*':</span><br><span style="color: hsl(0, 100%, 40%);">-+            return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+        default:</span><br><span style="color: hsl(0, 100%, 40%);">-+            break;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    set_error(s, "<args>", json_error_null_value, "NULL object key");</span><br><span style="color: hsl(0, 100%, 40%);">-+    s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+    return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">- static json_t *pack(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     switch(token(s)) {</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -376,40 +406,10 @@ static json_t *pack(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-             return json_real(va_arg(*ap, double));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         case 'O': /* a json_t object; increments refcount */</span><br><span style="color: hsl(0, 100%, 40%);">--        {</span><br><span style="color: hsl(0, 100%, 40%);">--            int nullable;</span><br><span style="color: hsl(0, 100%, 40%);">--            json_t *json;</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">--            next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--            nullable = token(s) == '?';</span><br><span style="color: hsl(0, 100%, 40%);">--            if (!nullable)</span><br><span style="color: hsl(0, 100%, 40%);">--                prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">--            json = va_arg(*ap, json_t *);</span><br><span style="color: hsl(0, 100%, 40%);">--            if (!json && nullable) {</span><br><span style="color: hsl(0, 100%, 40%);">--                return json_null();</span><br><span style="color: hsl(0, 100%, 40%);">--            } else {</span><br><span style="color: hsl(0, 100%, 40%);">--                return json_incref(json);</span><br><span style="color: hsl(0, 100%, 40%);">--            }</span><br><span style="color: hsl(0, 100%, 40%);">--        }</span><br><span style="color: hsl(0, 100%, 40%);">-+            return pack_object_inter(s, ap, 1);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         case 'o': /* a json_t object; doesn't increment refcount */</span><br><span style="color: hsl(0, 100%, 40%);">--        {</span><br><span style="color: hsl(0, 100%, 40%);">--            int nullable;</span><br><span style="color: hsl(0, 100%, 40%);">--            json_t *json;</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">--            next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--            nullable = token(s) == '?';</span><br><span style="color: hsl(0, 100%, 40%);">--            if (!nullable)</span><br><span style="color: hsl(0, 100%, 40%);">--                prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">--            json = va_arg(*ap, json_t *);</span><br><span style="color: hsl(0, 100%, 40%);">--            if (!json && nullable) {</span><br><span style="color: hsl(0, 100%, 40%);">--                return json_null();</span><br><span style="color: hsl(0, 100%, 40%);">--            } else {</span><br><span style="color: hsl(0, 100%, 40%);">--                return json;</span><br><span style="color: hsl(0, 100%, 40%);">--            }</span><br><span style="color: hsl(0, 100%, 40%);">--        }</span><br><span style="color: hsl(0, 100%, 40%);">-+            return pack_object_inter(s, ap, 0);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         default:</span><br><span style="color: hsl(0, 100%, 40%);">-             set_error(s, "<format>", json_error_invalid_format, "Unexpected format character '%c'",</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0022-Avoid-invalid-memory-read-in-json_pack.patch b/third-party/jansson/patches/0022-Avoid-invalid-memory-read-in-json_pack.patch</span><br><span>deleted file mode 100644</span><br><span>index 2e8f746..0000000</span><br><span>--- a/third-party/jansson/patches/0022-Avoid-invalid-memory-read-in-json_pack.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,38 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From aed855e6920923898b94a1b922fbace27a34ddf2 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Petri Lehtinen <petri@digip.org></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Mon, 9 Jul 2018 22:26:35 +0300</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 22/29] Avoid invalid memory read in json_pack()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Initial patch by @bharjoc-bitdefender</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes #421</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- src/pack_unpack.c | 5 ++++-</span><br><span style="color: hsl(0, 100%, 40%);">- 1 file changed, 4 insertions(+), 1 deletion(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/pack_unpack.c b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 6461c06..b842772 100644</span><br><span>---- a/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -75,6 +75,9 @@ static void next_token(scanner_t *s)</span><br><span style="color: hsl(0, 100%, 40%);">-         return;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!token(s) && !*s->fmt)</span><br><span style="color: hsl(0, 100%, 40%);">-+        return;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-     t = s->fmt;</span><br><span style="color: hsl(0, 100%, 40%);">-     s->column++;</span><br><span style="color: hsl(0, 100%, 40%);">-     s->pos++;</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -97,7 +100,7 @@ static void next_token(scanner_t *s)</span><br><span style="color: hsl(0, 100%, 40%);">-     s->token.column = s->column;</span><br><span style="color: hsl(0, 100%, 40%);">-     s->token.pos = s->pos;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    t++;</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (*t) t++;</span><br><span style="color: hsl(0, 100%, 40%);">-     s->fmt = t;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0025-Call-va_end-after-va_copy-in-json_vsprintf.patch b/third-party/jansson/patches/0025-Call-va_end-after-va_copy-in-json_vsprintf.patch</span><br><span>deleted file mode 100644</span><br><span>index a56c03c..0000000</span><br><span>--- a/third-party/jansson/patches/0025-Call-va_end-after-va_copy-in-json_vsprintf.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,64 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 66e4ee795d21a30118f8503c966e9f9ae87db315 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Xin Long <lucien.xin@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Wed, 25 Jul 2018 17:39:33 +0800</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 25/29] Call va_end after va_copy in json_vsprintf</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-As said in man doc:</span><br><span style="color: hsl(0, 100%, 40%);">-  "Each  invocation  of va_copy() must be matched by a corresponding</span><br><span style="color: hsl(0, 100%, 40%);">-   invocation of va_end() in the same function."</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-va_copy may alloc memory in some system, it's necessay to free it by</span><br><span style="color: hsl(0, 100%, 40%);">-va_end.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes: efe6c7b3f2b3 ("Add json_sprintf and json_vsprintf")</span><br><span style="color: hsl(0, 100%, 40%);">-Signed-off-by: Xin Long <lucien.xin@gmail.com></span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- src/value.c | 17 ++++++++++++-----</span><br><span style="color: hsl(0, 100%, 40%);">- 1 file changed, 12 insertions(+), 5 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/value.c b/src/value.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 29a978c..861dce8 100644</span><br><span>---- a/src/value.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/value.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -781,26 +781,33 @@ static json_t *json_string_copy(const json_t *string)</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- json_t *json_vsprintf(const char *fmt, va_list ap) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    json_t *json = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     int length;</span><br><span style="color: hsl(0, 100%, 40%);">-     char *buf;</span><br><span style="color: hsl(0, 100%, 40%);">-     va_list aq;</span><br><span style="color: hsl(0, 100%, 40%);">-     va_copy(aq, ap);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     length = vsnprintf(NULL, 0, fmt, ap);</span><br><span style="color: hsl(0, 100%, 40%);">--    if (length == 0)</span><br><span style="color: hsl(0, 100%, 40%);">--        return json_string("");</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (length == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        json = json_string("");</span><br><span style="color: hsl(0, 100%, 40%);">-+        goto out;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     buf = jsonp_malloc(length + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!buf)</span><br><span style="color: hsl(0, 100%, 40%);">--        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+        goto out;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     vsnprintf(buf, length + 1, fmt, aq);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!utf8_check_string(buf, length)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         jsonp_free(buf);</span><br><span style="color: hsl(0, 100%, 40%);">--        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+        goto out;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    return jsonp_stringn_nocheck_own(buf, length);</span><br><span style="color: hsl(0, 100%, 40%);">-+    json = jsonp_stringn_nocheck_own(buf, length);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+out:</span><br><span style="color: hsl(0, 100%, 40%);">-+    va_end(aq);</span><br><span style="color: hsl(0, 100%, 40%);">-+    return json;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- json_t *json_sprintf(const char *fmt, ...) {</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0027-Rename-a-varialble-that-shadows-another-one.patch b/third-party/jansson/patches/0027-Rename-a-varialble-that-shadows-another-one.patch</span><br><span>deleted file mode 100644</span><br><span>index fc4ce07..0000000</span><br><span>--- a/third-party/jansson/patches/0027-Rename-a-varialble-that-shadows-another-one.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,56 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 020cc26b5cb147ae3569a3f7d314d3900b4bbc0b Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Petri Lehtinen <petri@digip.org></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Sun, 12 Aug 2018 18:25:51 +0300</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 27/29] Rename a varialble that shadows another one</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-configure.ac changes are removed for bundled jansson.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes #430</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- configure.ac | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- src/dump.c   | 8 ++++----</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 5 insertions(+), 5 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/dump.c b/src/dump.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 8e725c9..4a64aa4 100644</span><br><span>---- a/src/dump.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/dump.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -306,7 +306,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,</span><br><span style="color: hsl(0, 100%, 40%);">-             const char *separator;</span><br><span style="color: hsl(0, 100%, 40%);">-             int separator_length;</span><br><span style="color: hsl(0, 100%, 40%);">-             /* Space for "0x", double the sizeof a pointer for the hex and a terminator. */</span><br><span style="color: hsl(0, 100%, 40%);">--            char key[2 + (sizeof(json) * 2) + 1];</span><br><span style="color: hsl(0, 100%, 40%);">-+            char loop_key[2 + (sizeof(json) * 2) + 1];</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-             if(flags & JSON_COMPACT) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 separator = ":";</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -318,7 +318,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-             /* detect circular references */</span><br><span style="color: hsl(0, 100%, 40%);">--            if (loop_check(parents, json, key, sizeof(key)))</span><br><span style="color: hsl(0, 100%, 40%);">-+            if (loop_check(parents, json, loop_key, sizeof(loop_key)))</span><br><span style="color: hsl(0, 100%, 40%);">-                 return -1;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-             iter = json_object_iter((json_t *)json);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -326,7 +326,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,</span><br><span style="color: hsl(0, 100%, 40%);">-             if(!embed && dump("{", 1, data))</span><br><span style="color: hsl(0, 100%, 40%);">-                 return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-             if(!iter) {</span><br><span style="color: hsl(0, 100%, 40%);">--                hashtable_del(parents, key);</span><br><span style="color: hsl(0, 100%, 40%);">-+                hashtable_del(parents, loop_key);</span><br><span style="color: hsl(0, 100%, 40%);">-                 return embed ? 0 : dump("}", 1, data);</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-             if(dump_indent(flags, depth + 1, 0, dump, data))</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -422,7 +422,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,</span><br><span style="color: hsl(0, 100%, 40%);">-                 }</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--            hashtable_del(parents, key);</span><br><span style="color: hsl(0, 100%, 40%);">-+            hashtable_del(parents, loop_key);</span><br><span style="color: hsl(0, 100%, 40%);">-             return embed ? 0 : dump("}", 1, data);</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0029-json_pack-Improve-handling-of-formats-with-and.patch b/third-party/jansson/patches/0029-json_pack-Improve-handling-of-formats-with-and.patch</span><br><span>deleted file mode 100644</span><br><span>index fe86db8..0000000</span><br><span>--- a/third-party/jansson/patches/0029-json_pack-Improve-handling-of-formats-with-and.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,217 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 5df5fc5b13cac5212482d36e7f3a78951782cfb5 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Corey Farrell <git@cfware.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Tue, 25 Sep 2018 14:31:56 -0400</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 29/30] json_pack: Improve handling of formats with '?' and</span><br><span style="color: hsl(0, 100%, 40%);">- '*'.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Test updates have been removed for easier merging for bundled build.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-When NULL is received for an optional argument we should not set an</span><br><span style="color: hsl(0, 100%, 40%);">-error message as this would block later error messages. If NULL is</span><br><span style="color: hsl(0, 100%, 40%);">-received for a non-optional string we should set has_error. Set</span><br><span style="color: hsl(0, 100%, 40%);">-has_error for UTF-8 errors to ensure optional strings with UTF-8</span><br><span style="color: hsl(0, 100%, 40%);">-errors are not replaced with json_null(). Use 'purpose' argument in</span><br><span style="color: hsl(0, 100%, 40%);">-NULL error messages of read_string.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Add error handling and tests for invalid formats where '+', '#', or '%'</span><br><span style="color: hsl(0, 100%, 40%);">-is used on an optional string 's?' or 's*'.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fix NULL string error messages to use 'purpose'.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Refactor skipping of '*' token, this is now handled by read_string and</span><br><span style="color: hsl(0, 100%, 40%);">-pack_object_inter. This allows invalid format strings such as 's*#' and</span><br><span style="color: hsl(0, 100%, 40%);">-'s*+' to produce error messages.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes #437</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- src/pack_unpack.c           | 74 +++++++++++++++++++++++--------------</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_pack.c | 49 ++++++++++++++++++++++--</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 93 insertions(+), 30 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/pack_unpack.c b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-index b842772..fc98df4 100644</span><br><span>---- a/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -130,7 +130,7 @@ static json_t *pack(scanner_t *s, va_list *ap);</span><br><span style="color: hsl(0, 100%, 40%);">- /* ours will be set to 1 if jsonp_free() must be called for the result</span><br><span style="color: hsl(0, 100%, 40%);">-    afterwards */</span><br><span style="color: hsl(0, 100%, 40%);">- static char *read_string(scanner_t *s, va_list *ap,</span><br><span style="color: hsl(0, 100%, 40%);">--                         const char *purpose, size_t *out_len, int *ours)</span><br><span style="color: hsl(0, 100%, 40%);">-+                         const char *purpose, size_t *out_len, int *ours, int optional)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     char t;</span><br><span style="color: hsl(0, 100%, 40%);">-     strbuffer_t strbuff;</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -147,7 +147,10 @@ static char *read_string(scanner_t *s, va_list *ap,</span><br><span style="color: hsl(0, 100%, 40%);">-         str = va_arg(*ap, const char *);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         if(!str) {</span><br><span style="color: hsl(0, 100%, 40%);">--            set_error(s, "<args>", json_error_null_value, "NULL string argument");</span><br><span style="color: hsl(0, 100%, 40%);">-+            if (!optional) {</span><br><span style="color: hsl(0, 100%, 40%);">-+                set_error(s, "<args>", json_error_null_value, "NULL %s", purpose);</span><br><span style="color: hsl(0, 100%, 40%);">-+                s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+            }</span><br><span style="color: hsl(0, 100%, 40%);">-             return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -155,11 +158,17 @@ static char *read_string(scanner_t *s, va_list *ap,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         if(!utf8_check_string(str, length)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             set_error(s, "<args>", json_error_invalid_utf8, "Invalid UTF-8 %s", purpose);</span><br><span style="color: hsl(0, 100%, 40%);">-+            s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-             return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         *out_len = length;</span><br><span style="color: hsl(0, 100%, 40%);">-         return (char *)str;</span><br><span style="color: hsl(0, 100%, 40%);">-+    } else if (optional) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        set_error(s, "<format>", json_error_invalid_format, "Cannot use '%c' on optional strings", t);</span><br><span style="color: hsl(0, 100%, 40%);">-+        s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     if(strbuffer_init(&strbuff)) {</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -170,7 +179,7 @@ static char *read_string(scanner_t *s, va_list *ap,</span><br><span style="color: hsl(0, 100%, 40%);">-     while(1) {</span><br><span style="color: hsl(0, 100%, 40%);">-         str = va_arg(*ap, const char *);</span><br><span style="color: hsl(0, 100%, 40%);">-         if(!str) {</span><br><span style="color: hsl(0, 100%, 40%);">--            set_error(s, "<args>", json_error_null_value, "NULL string argument");</span><br><span style="color: hsl(0, 100%, 40%);">-+            set_error(s, "<args>", json_error_null_value, "NULL %s", purpose);</span><br><span style="color: hsl(0, 100%, 40%);">-             s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -226,6 +235,7 @@ static json_t *pack_object(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-         size_t len;</span><br><span style="color: hsl(0, 100%, 40%);">-         int ours;</span><br><span style="color: hsl(0, 100%, 40%);">-         json_t *value;</span><br><span style="color: hsl(0, 100%, 40%);">-+        char valueOptional;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         if(!token(s)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             set_error(s, "<format>", json_error_invalid_format, "Unexpected end of format string");</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -237,20 +247,21 @@ static json_t *pack_object(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-             goto error;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--        key = read_string(s, ap, "object key", &len, &ours);</span><br><span style="color: hsl(0, 100%, 40%);">--        if (!key)</span><br><span style="color: hsl(0, 100%, 40%);">--            s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+        key = read_string(s, ap, "object key", &len, &ours, 0);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+        next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+        valueOptional = token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+        prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-         value = pack(s, ap);</span><br><span style="color: hsl(0, 100%, 40%);">-         if(!value) {</span><br><span style="color: hsl(0, 100%, 40%);">-             if(ours)</span><br><span style="color: hsl(0, 100%, 40%);">-                 jsonp_free(key);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--            if(strchr("soO", token(s)) && s->next_token.token == '*') {</span><br><span style="color: hsl(0, 100%, 40%);">--                next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+            if(valueOptional != '*') {</span><br><span style="color: hsl(0, 100%, 40%);">-+                set_error(s, "<args>", json_error_null_value, "NULL object value\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                 s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -269,8 +280,6 @@ static json_t *pack_object(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-         if(ours)</span><br><span style="color: hsl(0, 100%, 40%);">-             jsonp_free(key);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--        if(strchr("soO", token(s)) && s->next_token.token == '*')</span><br><span style="color: hsl(0, 100%, 40%);">--            next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-         next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -289,6 +298,7 @@ static json_t *pack_array(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     while(token(s) != ']') {</span><br><span style="color: hsl(0, 100%, 40%);">-         json_t *value;</span><br><span style="color: hsl(0, 100%, 40%);">-+        char valueOptional;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         if(!token(s)) {</span><br><span style="color: hsl(0, 100%, 40%);">-             set_error(s, "<format>", json_error_invalid_format, "Unexpected end of format string");</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -296,11 +306,13 @@ static json_t *pack_array(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-             goto error;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+        next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+        valueOptional = token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+        prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-         value = pack(s, ap);</span><br><span style="color: hsl(0, 100%, 40%);">-         if(!value) {</span><br><span style="color: hsl(0, 100%, 40%);">--            if(strchr("soO", token(s)) && s->next_token.token == '*') {</span><br><span style="color: hsl(0, 100%, 40%);">--                next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+            if(valueOptional != '*') {</span><br><span style="color: hsl(0, 100%, 40%);">-                 s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -316,8 +328,6 @@ static json_t *pack_array(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-             s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--        if(strchr("soO", token(s)) && s->next_token.token == '*')</span><br><span style="color: hsl(0, 100%, 40%);">--            next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-         next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -332,23 +342,33 @@ error:</span><br><span style="color: hsl(0, 100%, 40%);">- static json_t *pack_string(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     char *str;</span><br><span style="color: hsl(0, 100%, 40%);">-+    char t;</span><br><span style="color: hsl(0, 100%, 40%);">-     size_t len;</span><br><span style="color: hsl(0, 100%, 40%);">-     int ours;</span><br><span style="color: hsl(0, 100%, 40%);">--    int nullable;</span><br><span style="color: hsl(0, 100%, 40%);">-+    int optional;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">--    nullable = token(s) == '?';</span><br><span style="color: hsl(0, 100%, 40%);">--    if (!nullable)</span><br><span style="color: hsl(0, 100%, 40%);">-+    t = token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-+    optional = t == '?' || t == '*';</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!optional)</span><br><span style="color: hsl(0, 100%, 40%);">-         prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    str = read_string(s, ap, "string", &len, &ours);</span><br><span style="color: hsl(0, 100%, 40%);">--    if (!str) {</span><br><span style="color: hsl(0, 100%, 40%);">--        return nullable ? json_null() : NULL;</span><br><span style="color: hsl(0, 100%, 40%);">--    } else if (ours) {</span><br><span style="color: hsl(0, 100%, 40%);">--        return jsonp_stringn_nocheck_own(str, len);</span><br><span style="color: hsl(0, 100%, 40%);">--    } else {</span><br><span style="color: hsl(0, 100%, 40%);">--        return json_stringn_nocheck(str, len);</span><br><span style="color: hsl(0, 100%, 40%);">-+    str = read_string(s, ap, "string", &len, &ours, optional);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!str)</span><br><span style="color: hsl(0, 100%, 40%);">-+        return t == '?' && !s->has_error ? json_null() : NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (s->has_error) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (!ours)</span><br><span style="color: hsl(0, 100%, 40%);">-+            jsonp_free(str);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ours)</span><br><span style="color: hsl(0, 100%, 40%);">-+        return jsonp_stringn_nocheck_own(str, len);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    return json_stringn_nocheck(str, len);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- static json_t *pack_object_inter(scanner_t *s, va_list *ap, int need_incref)</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -359,7 +379,7 @@ static json_t *pack_object_inter(scanner_t *s, va_list *ap, int need_incref)</span><br><span style="color: hsl(0, 100%, 40%);">-     next_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">-     ntoken = token(s);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    if (ntoken != '?')</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ntoken != '?' && ntoken != '*')</span><br><span style="color: hsl(0, 100%, 40%);">-         prev_token(s);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     json = va_arg(*ap, json_t *);</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0030-More-work-on-json_pack-error-reporting.patch b/third-party/jansson/patches/0030-More-work-on-json_pack-error-reporting.patch</span><br><span>deleted file mode 100644</span><br><span>index debb2f5..0000000</span><br><span>--- a/third-party/jansson/patches/0030-More-work-on-json_pack-error-reporting.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,100 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 8d659113d53d7ef60eae6a6e2c5b0ecfc89fc74b Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Corey Farrell <git@cfware.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Tue, 25 Sep 2018 17:34:25 -0400</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 30/30] More work on json_pack error reporting.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Test updates have been removed for easier merging for bundled build.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-* Remove errant line-feed from pack_object error message.</span><br><span style="color: hsl(0, 100%, 40%);">-* Correct error message in pack_object_inter.</span><br><span style="color: hsl(0, 100%, 40%);">-* Create pack_integer / pack_real to get the correct error messages on</span><br><span style="color: hsl(0, 100%, 40%);">-  failure when packing numeric values.</span><br><span style="color: hsl(0, 100%, 40%);">-* Add tests for packing NAN and infinity directly, in an array and as</span><br><span style="color: hsl(0, 100%, 40%);">-  an object value.</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- src/pack_unpack.c           | 46 +++++++++++++++++++++++++++----</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_pack.c | 54 +++++++++++++++++++++++++++++++++++--</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 93 insertions(+), 7 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/pack_unpack.c b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-index fc98df4..ec04bc3 100644</span><br><span>---- a/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -261,7 +261,7 @@ static json_t *pack_object(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-                 jsonp_free(key);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-             if(valueOptional != '*') {</span><br><span style="color: hsl(0, 100%, 40%);">--                set_error(s, "<args>", json_error_null_value, "NULL object value\n");</span><br><span style="color: hsl(0, 100%, 40%);">-+                set_error(s, "<args>", json_error_null_value, "NULL object value");</span><br><span style="color: hsl(0, 100%, 40%);">-                 s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -396,11 +396,47 @@ static json_t *pack_object_inter(scanner_t *s, va_list *ap, int need_incref)</span><br><span style="color: hsl(0, 100%, 40%);">-             break;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    set_error(s, "<args>", json_error_null_value, "NULL object key");</span><br><span style="color: hsl(0, 100%, 40%);">-+    set_error(s, "<args>", json_error_null_value, "NULL object");</span><br><span style="color: hsl(0, 100%, 40%);">-     s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-     return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+static json_t *pack_integer(scanner_t *s, json_int_t value)</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+    json_t *json = json_integer(value);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!json) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        set_error(s, "<internal>", json_error_out_of_memory, "Out of memory");</span><br><span style="color: hsl(0, 100%, 40%);">-+        s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    return json;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+static json_t *pack_real(scanner_t *s, double value)</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+    /* Allocate without setting value so we can identify OOM error. */</span><br><span style="color: hsl(0, 100%, 40%);">-+    json_t *json = json_real(0.0);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!json) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        set_error(s, "<internal>", json_error_out_of_memory, "Out of memory");</span><br><span style="color: hsl(0, 100%, 40%);">-+        s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (json_real_set(json, value)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        json_decref(json);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        set_error(s, "<args>", json_error_numeric_overflow, "Invalid floating point value");</span><br><span style="color: hsl(0, 100%, 40%);">-+        s->has_error = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    return json;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">- static json_t *pack(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     switch(token(s)) {</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -420,13 +456,13 @@ static json_t *pack(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-             return va_arg(*ap, int) ? json_true() : json_false();</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         case 'i': /* integer from int */</span><br><span style="color: hsl(0, 100%, 40%);">--            return json_integer(va_arg(*ap, int));</span><br><span style="color: hsl(0, 100%, 40%);">-+            return pack_integer(s, va_arg(*ap, int));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         case 'I': /* integer from json_int_t */</span><br><span style="color: hsl(0, 100%, 40%);">--            return json_integer(va_arg(*ap, json_int_t));</span><br><span style="color: hsl(0, 100%, 40%);">-+            return pack_integer(s, va_arg(*ap, json_int_t));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         case 'f': /* real */</span><br><span style="color: hsl(0, 100%, 40%);">--            return json_real(va_arg(*ap, double));</span><br><span style="color: hsl(0, 100%, 40%);">-+            return pack_real(s, va_arg(*ap, double));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-         case 'O': /* a json_t object; increments refcount */</span><br><span style="color: hsl(0, 100%, 40%);">-             return pack_object_inter(s, ap, 1);</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/0035-Remove-inappropriate-jsonp_free-which-caused-segment.patch b/third-party/jansson/patches/0035-Remove-inappropriate-jsonp_free-which-caused-segment.patch</span><br><span>deleted file mode 100644</span><br><span>index 258fc67..0000000</span><br><span>--- a/third-party/jansson/patches/0035-Remove-inappropriate-jsonp_free-which-caused-segment.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,58 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From e262ea5fcd789d20d5d20d5d6d9c7ec06e3c00fd Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Corey Farrell <git@cfware.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Mon, 5 Nov 2018 16:43:10 -0500</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 35/35] Remove inappropriate jsonp_free which caused</span><br><span style="color: hsl(0, 100%, 40%);">- segmentation fault.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-pack_string should never free str on error.  This wouldn't be a problem</span><br><span style="color: hsl(0, 100%, 40%);">-except the check for `ours` was inverted.  Just remove the check for</span><br><span style="color: hsl(0, 100%, 40%);">-ours since the true condition is unreachable.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-json_vpack_ex also had an error check for s.has_error.  This can never</span><br><span style="color: hsl(0, 100%, 40%);">-be true unless value is NULL.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Test changes removed for merging into Asterisk bundled copy.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fixes #444</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- src/pack_unpack.c           |  9 ++-------</span><br><span style="color: hsl(0, 100%, 40%);">- test/suites/api/test_pack.c | 21 +++++++++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 23 insertions(+), 7 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/src/pack_unpack.c b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-index ec04bc3..3b99776 100644</span><br><span>---- a/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/src/pack_unpack.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -359,9 +359,7 @@ static json_t *pack_string(scanner_t *s, va_list *ap)</span><br><span style="color: hsl(0, 100%, 40%);">-         return t == '?' && !s->has_error ? json_null() : NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     if (s->has_error) {</span><br><span style="color: hsl(0, 100%, 40%);">--        if (!ours)</span><br><span style="color: hsl(0, 100%, 40%);">--            jsonp_free(str);</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">-+        /* It's impossible to reach this point if ours != 0, do not free str. */</span><br><span style="color: hsl(0, 100%, 40%);">-         return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -853,6 +851,7 @@ json_t *json_vpack_ex(json_error_t *error, size_t flags,</span><br><span style="color: hsl(0, 100%, 40%);">-     value = pack(&s, &ap_copy);</span><br><span style="color: hsl(0, 100%, 40%);">-     va_end(ap_copy);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    /* This will cover all situations where s.has_error is true */</span><br><span style="color: hsl(0, 100%, 40%);">-     if(!value)</span><br><span style="color: hsl(0, 100%, 40%);">-         return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -862,10 +861,6 @@ json_t *json_vpack_ex(json_error_t *error, size_t flags,</span><br><span style="color: hsl(0, 100%, 40%);">-         set_error(&s, "<format>", json_error_invalid_format, "Garbage after format string");</span><br><span style="color: hsl(0, 100%, 40%);">-         return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">--    if(s.has_error) {</span><br><span style="color: hsl(0, 100%, 40%);">--        json_decref(value);</span><br><span style="color: hsl(0, 100%, 40%);">--        return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">--    }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     return value;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.2</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/jansson/patches/README b/third-party/jansson/patches/README</span><br><span>new file mode 100644</span><br><span>index 0000000..4b34e9c</span><br><span>--- /dev/null</span><br><span>+++ b/third-party/jansson/patches/README</span><br><span>@@ -0,0 +1,10 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Patches should be added here once merged to the upstream jansson project at</span><br><span style="color: hsl(120, 100%, 40%);">+https://github.com/akheron/jansson/.  Patch filenames should be generated by</span><br><span style="color: hsl(120, 100%, 40%);">+running 'git format-patch ${JANSSON_VERSION}' from the jansson repository, then</span><br><span style="color: hsl(120, 100%, 40%);">+copying the required patches to this folder.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Any changes to configure.ac or Makefile.am must be stripped from the upstream</span><br><span style="color: hsl(120, 100%, 40%);">+patches.  The upstream project does not commit `autoreconf -i` output files</span><br><span style="color: hsl(120, 100%, 40%);">+and we must ensure bundled jansson does not require autoconf or automake.</span><br><span style="color: hsl(120, 100%, 40%);">+Changes to test files can also be stripped as the bundled builds do not run</span><br><span style="color: hsl(120, 100%, 40%);">+jansson tests.</span><br><span>diff --git a/third-party/versions.mak b/third-party/versions.mak</span><br><span>index 052e6b4..c265adc 100644</span><br><span>--- a/third-party/versions.mak</span><br><span>+++ b/third-party/versions.mak</span><br><span>@@ -1,2 +1,2 @@</span><br><span style="color: hsl(0, 100%, 40%);">-JANSSON_VERSION = 2.11</span><br><span style="color: hsl(120, 100%, 40%);">+JANSSON_VERSION = 2.12</span><br><span> PJPROJECT_VERSION = 2.8</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/10709">change 10709</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/10709"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If0f2d541c50997690660c21fb7b03d625a5cdadd </div>
<div style="display:none"> Gerrit-Change-Number: 10709 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Corey Farrell <git@cfware.com> </div>