258fc67511c2d3cd31216df12234c73b04ad9026
[asterisk/asterisk.git] / third-party / jansson / patches / 0035-Remove-inappropriate-jsonp_free-which-caused-segment.patch
1 From e262ea5fcd789d20d5d20d5d6d9c7ec06e3c00fd Mon Sep 17 00:00:00 2001
2 From: Corey Farrell <git@cfware.com>
3 Date: Mon, 5 Nov 2018 16:43:10 -0500
4 Subject: [PATCH 35/35] Remove inappropriate jsonp_free which caused
5  segmentation fault.
6
7 pack_string should never free str on error.  This wouldn't be a problem
8 except the check for `ours` was inverted.  Just remove the check for
9 ours since the true condition is unreachable.
10
11 json_vpack_ex also had an error check for s.has_error.  This can never
12 be true unless value is NULL.
13
14 Test changes removed for merging into Asterisk bundled copy.
15
16 Fixes #444
17 ---
18  src/pack_unpack.c           |  9 ++-------
19  test/suites/api/test_pack.c | 21 +++++++++++++++++++++
20  2 files changed, 23 insertions(+), 7 deletions(-)
21
22 diff --git a/src/pack_unpack.c b/src/pack_unpack.c
23 index ec04bc3..3b99776 100644
24 --- a/src/pack_unpack.c
25 +++ b/src/pack_unpack.c
26 @@ -359,9 +359,7 @@ static json_t *pack_string(scanner_t *s, va_list *ap)
27          return t == '?' && !s->has_error ? json_null() : NULL;
28  
29      if (s->has_error) {
30 -        if (!ours)
31 -            jsonp_free(str);
32 -
33 +        /* It's impossible to reach this point if ours != 0, do not free str. */
34          return NULL;
35      }
36  
37 @@ -853,6 +851,7 @@ json_t *json_vpack_ex(json_error_t *error, size_t flags,
38      value = pack(&s, &ap_copy);
39      va_end(ap_copy);
40  
41 +    /* This will cover all situations where s.has_error is true */
42      if(!value)
43          return NULL;
44  
45 @@ -862,10 +861,6 @@ json_t *json_vpack_ex(json_error_t *error, size_t flags,
46          set_error(&s, "<format>", json_error_invalid_format, "Garbage after format string");
47          return NULL;
48      }
49 -    if(s.has_error) {
50 -        json_decref(value);
51 -        return NULL;
52 -    }
53  
54      return value;
55  }
56 -- 
57 2.17.2
58