Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock

Please unblock package getdns

Dear release team,

when I was first packaging 1.1.0~a2 release, I took the source from
github repository instead of upstream tarball (that was created
later).  And because getdns upstream uses patched version of jsmn, and
I have used verbatim upstream sources of jsmn, a #849577 is born.

So, 1.1.0~a2-2 release contains getdns version of jsmn, and so it's
same as 1.1.0-a2 getdns upstream (as it should be).  Please consider
unblocking this package, so we don't ship broken getdns in stretch.

unblock getdns/1.1.0~a2-2

-- System Information:
Debian Release: 9.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 
'testing-debug'), (500, 'unstable'), (1, 'experimental-debug'), (1, 
'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.4.0-67-generic (SMP w/24 CPU cores)
Locale: LANG=en_DK.UTF-8, LC_CTYPE=en_DK.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru getdns-1.1.0~a2/debian/changelog getdns-1.1.0~a2/debian/changelog
--- getdns-1.1.0~a2/debian/changelog    2016-11-06 21:56:21.000000000 +0100
+++ getdns-1.1.0~a2/debian/changelog    2017-03-08 11:48:09.000000000 +0100
@@ -1,3 +1,9 @@
+getdns (1.1.0~a2-2) unstable; urgency=medium
+
+  * Use upstream provided src/jsmn/ (Closes: #849577)
+
+ -- Ondřej Surý <[email protected]>  Wed, 08 Mar 2017 11:48:09 +0100
+
 getdns (1.1.0~a2-1) unstable; urgency=medium
 
   * Fix CURRENT_DATE generation for reproducible builds (Closes: #797215)
diff -Nru getdns-1.1.0~a2/debian/patches/0001-Add-src-jsmn-to-sources.patch 
getdns-1.1.0~a2/debian/patches/0001-Add-src-jsmn-to-sources.patch
--- getdns-1.1.0~a2/debian/patches/0001-Add-src-jsmn-to-sources.patch   
2016-11-06 21:56:21.000000000 +0100
+++ getdns-1.1.0~a2/debian/patches/0001-Add-src-jsmn-to-sources.patch   
2017-03-08 11:48:09.000000000 +0100
@@ -3,27 +3,15 @@
 Subject: Add src/jsmn/ to sources
 
 ---
- src/jsmn/LICENSE            |  20 +++
- src/jsmn/README.md          | 167 +++++++++++++++++++
- src/jsmn/example/jsondump.c | 126 +++++++++++++++
- src/jsmn/example/simple.c   |  76 +++++++++
- src/jsmn/jsmn.c             | 311 ++++++++++++++++++++++++++++++++++++
- src/jsmn/jsmn.h             |  76 +++++++++
- src/jsmn/library.json       |  16 ++
- src/jsmn/test/test.h        |  27 ++++
- src/jsmn/test/tests.c       | 378 ++++++++++++++++++++++++++++++++++++++++++++
- src/jsmn/test/testutil.h    |  94 +++++++++++
- 10 files changed, 1291 insertions(+)
+ src/jsmn/LICENSE   |  20 +++
+ src/jsmn/README.md | 167 ++++++++++++++++++++++++++
+ src/jsmn/jsmn.c    | 347 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/jsmn/jsmn.h    |  76 ++++++++++++
+ 4 files changed, 610 insertions(+)
  create mode 100644 src/jsmn/LICENSE
  create mode 100644 src/jsmn/README.md
- create mode 100644 src/jsmn/example/jsondump.c
- create mode 100644 src/jsmn/example/simple.c
  create mode 100644 src/jsmn/jsmn.c
  create mode 100644 src/jsmn/jsmn.h
- create mode 100644 src/jsmn/library.json
- create mode 100644 src/jsmn/test/test.h
- create mode 100644 src/jsmn/test/tests.c
- create mode 100644 src/jsmn/test/testutil.h
 
 diff --git a/src/jsmn/LICENSE b/src/jsmn/LICENSE
 new file mode 100644
@@ -224,226 +212,12 @@
 +
 +[1]: http://www.json.org/
 +[2]: http://zserge.com/jsmn.html
-diff --git a/src/jsmn/example/jsondump.c b/src/jsmn/example/jsondump.c
-new file mode 100644
-index 0000000..cf08c5c
---- /dev/null
-+++ b/src/jsmn/example/jsondump.c
-@@ -0,0 +1,126 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <errno.h>
-+#include "../jsmn.h"
-+
-+/* Function realloc_it() is a wrapper function for standart realloc()
-+ * with one difference - it frees old memory pointer in case of realloc
-+ * failure. Thus, DO NOT use old data pointer in anyway after call to
-+ * realloc_it(). If your code has some kind of fallback algorithm if
-+ * memory can't be re-allocated - use standart realloc() instead.
-+ */
-+static inline void *realloc_it(void *ptrmem, size_t size) {
-+      void *p = realloc(ptrmem, size);
-+      if (!p)  {
-+              free (ptrmem);
-+              fprintf(stderr, "realloc(): errno=%d\n", errno);
-+      }
-+      return p;
-+}
-+
-+/*
-+ * An example of reading JSON from stdin and printing its content to stdout.
-+ * The output looks like YAML, but I'm not sure if it's really compatible.
-+ */
-+
-+static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {
-+      int i, j, k;
-+      if (count == 0) {
-+              return 0;
-+      }
-+      if (t->type == JSMN_PRIMITIVE) {
-+              printf("%.*s", t->end - t->start, js+t->start);
-+              return 1;
-+      } else if (t->type == JSMN_STRING) {
-+              printf("'%.*s'", t->end - t->start, js+t->start);
-+              return 1;
-+      } else if (t->type == JSMN_OBJECT) {
-+              printf("\n");
-+              j = 0;
-+              for (i = 0; i < t->size; i++) {
-+                      for (k = 0; k < indent; k++) printf("  ");
-+                      j += dump(js, t+1+j, count-j, indent+1);
-+                      printf(": ");
-+                      j += dump(js, t+1+j, count-j, indent+1);
-+                      printf("\n");
-+              }
-+              return j+1;
-+      } else if (t->type == JSMN_ARRAY) {
-+              j = 0;
-+              printf("\n");
-+              for (i = 0; i < t->size; i++) {
-+                      for (k = 0; k < indent-1; k++) printf("  ");
-+                      printf("   - ");
-+                      j += dump(js, t+1+j, count-j, indent+1);
-+                      printf("\n");
-+              }
-+              return j+1;
-+      }
-+      return 0;
-+}
-+
-+int main() {
-+      int r;
-+      int eof_expected = 0;
-+      char *js = NULL;
-+      size_t jslen = 0;
-+      char buf[BUFSIZ];
-+
-+      jsmn_parser p;
-+      jsmntok_t *tok;
-+      size_t tokcount = 2;
-+
-+      /* Prepare parser */
-+      jsmn_init(&p);
-+
-+      /* Allocate some tokens as a start */
-+      tok = malloc(sizeof(*tok) * tokcount);
-+      if (tok == NULL) {
-+              fprintf(stderr, "malloc(): errno=%d\n", errno);
-+              return 3;
-+      }
-+
-+      for (;;) {
-+              /* Read another chunk */
-+              r = fread(buf, 1, sizeof(buf), stdin);
-+              if (r < 0) {
-+                      fprintf(stderr, "fread(): %d, errno=%d\n", r, errno);
-+                      return 1;
-+              }
-+              if (r == 0) {
-+                      if (eof_expected != 0) {
-+                              return 0;
-+                      } else {
-+                              fprintf(stderr, "fread(): unexpected EOF\n");
-+                              return 2;
-+                      }
-+              }
-+
-+              js = realloc_it(js, jslen + r + 1);
-+              if (js == NULL) {
-+                      return 3;
-+              }
-+              strncpy(js + jslen, buf, r);
-+              jslen = jslen + r;
-+
-+again:
-+              r = jsmn_parse(&p, js, jslen, tok, tokcount);
-+              if (r < 0) {
-+                      if (r == JSMN_ERROR_NOMEM) {
-+                              tokcount = tokcount * 2;
-+                              tok = realloc_it(tok, sizeof(*tok) * tokcount);
-+                              if (tok == NULL) {
-+                                      return 3;
-+                              }
-+                              goto again;
-+                      }
-+              } else {
-+                      dump(js, tok, p.toknext, 0);
-+                      eof_expected = 1;
-+              }
-+      }
-+
-+      return 0;
-+}
-diff --git a/src/jsmn/example/simple.c b/src/jsmn/example/simple.c
-new file mode 100644
-index 0000000..de44883
---- /dev/null
-+++ b/src/jsmn/example/simple.c
-@@ -0,0 +1,76 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include "../jsmn.h"
-+
-+/*
-+ * A small example of jsmn parsing when JSON structure is known and number of
-+ * tokens is predictable.
-+ */
-+
-+const char *JSON_STRING =
-+      "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n  "
-+      "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";
-+
-+static int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
-+      if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - 
tok->start &&
-+                      strncmp(json + tok->start, s, tok->end - tok->start) == 
0) {
-+              return 0;
-+      }
-+      return -1;
-+}
-+
-+int main() {
-+      int i;
-+      int r;
-+      jsmn_parser p;
-+      jsmntok_t t[128]; /* We expect no more than 128 tokens */
-+
-+      jsmn_init(&p);
-+      r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), t, 
sizeof(t)/sizeof(t[0]));
-+      if (r < 0) {
-+              printf("Failed to parse JSON: %d\n", r);
-+              return 1;
-+      }
-+
-+      /* Assume the top-level element is an object */
-+      if (r < 1 || t[0].type != JSMN_OBJECT) {
-+              printf("Object expected\n");
-+              return 1;
-+      }
-+
-+      /* Loop over all keys of the root object */
-+      for (i = 1; i < r; i++) {
-+              if (jsoneq(JSON_STRING, &t[i], "user") == 0) {
-+                      /* We may use strndup() to fetch string value */
-+                      printf("- User: %.*s\n", t[i+1].end-t[i+1].start,
-+                                      JSON_STRING + t[i+1].start);
-+                      i++;
-+              } else if (jsoneq(JSON_STRING, &t[i], "admin") == 0) {
-+                      /* We may additionally check if the value is either 
"true" or "false" */
-+                      printf("- Admin: %.*s\n", t[i+1].end-t[i+1].start,
-+                                      JSON_STRING + t[i+1].start);
-+                      i++;
-+              } else if (jsoneq(JSON_STRING, &t[i], "uid") == 0) {
-+                      /* We may want to do strtol() here to get numeric value 
*/
-+                      printf("- UID: %.*s\n", t[i+1].end-t[i+1].start,
-+                                      JSON_STRING + t[i+1].start);
-+                      i++;
-+              } else if (jsoneq(JSON_STRING, &t[i], "groups") == 0) {
-+                      int j;
-+                      printf("- Groups:\n");
-+                      if (t[i+1].type != JSMN_ARRAY) {
-+                              continue; /* We expect groups to be an array of 
strings */
-+                      }
-+                      for (j = 0; j < t[i+1].size; j++) {
-+                              jsmntok_t *g = &t[i+j+2];
-+                              printf("  * %.*s\n", g->end - g->start, 
JSON_STRING + g->start);
-+                      }
-+                      i += t[i+1].size + 1;
-+              } else {
-+                      printf("Unexpected key: %.*s\n", t[i].end-t[i].start,
-+                                      JSON_STRING + t[i].start);
-+              }
-+      }
-+      return 0;
-+}
 diff --git a/src/jsmn/jsmn.c b/src/jsmn/jsmn.c
 new file mode 100644
-index 0000000..e7765eb
+index 0000000..c5f47cb
 --- /dev/null
 +++ b/src/jsmn/jsmn.c
-@@ -0,0 +1,311 @@
+@@ -0,0 +1,347 @@
 +#include "jsmn.h"
 +
 +/**
@@ -487,11 +261,18 @@
 +
 +      for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
 +              switch (js[parser->pos]) {
-+#ifndef JSMN_STRICT
++#if !defined(JSMN_STRICT) && !defined(JSMN_GETDNS)
 +                      /* In strict mode primitive must be followed by "," or 
"}" or "]" */
 +                      case ':':
++#elif defined(JSMN_GETDNS)
++                      case ':':
++                              if (tokens[parser->toksuper].type != 
JSMN_OBJECT)
++                                      break;
 +#endif
 +                      case '\t' : case '\r' : case '\n' : case ' ' :
++#ifdef JSMN_GETDNS
++                      case '>':
++#endif
 +                      case ','  : case ']'  : case '}' :
 +                              goto found;
 +              }
@@ -500,7 +281,7 @@
 +                      return JSMN_ERROR_INVAL;
 +              }
 +      }
-+#ifdef JSMN_STRICT
++#if defined(JSMN_STRICT)
 +      /* In strict mode primitive must be followed by a comma/object/array */
 +      parser->pos = start;
 +      return JSMN_ERROR_PART;
@@ -679,6 +460,9 @@
 +                                      tokens[parser->toksuper].size++;
 +                              break;
 +                      case '\t' : case '\r' : case '\n' : case ' ':
++#ifdef JSMN_GETDNS
++                      case '>':
++#endif
 +                              break;
 +                      case ':':
 +                              parser->toksuper = parser->toknext - 1;
@@ -701,6 +485,32 @@
 +#endif
 +                              }
 +                              break;
++#ifdef JSMN_GETDNS
++                      case '<':
++                              if (parser->pos + 14 < len &&
++                                  js[parser->pos+ 1] == 'b' &&
++                                  js[parser->pos+ 2] == 'i' &&
++                                  js[parser->pos+ 3] == 'n' &&
++                                  js[parser->pos+ 4] == 'd' &&
++                                  js[parser->pos+ 5] == 'a' &&
++                                  js[parser->pos+ 6] == 't' &&
++                                  js[parser->pos+ 7] == 'a' &&
++                                  js[parser->pos+ 8] == ' ') {
++                                      if (js[parser->pos+ 9] == 'o' &&
++                                          js[parser->pos+10] == 'f' &&
++                                          js[parser->pos+11] == ' ') {
++                                              parser->pos += 11;
++                                              break;
++
++                                      } else if (js[parser->pos+ 9] == 'f' &&
++                                          js[parser->pos+10] == 'o' &&
++                                          js[parser->pos+11] == 'r' &&
++                                          js[parser->pos+12] == ' ') {
++                                              parser->pos += 12;
++                                              break;
++                                      }
++                              }
++#endif
 +#ifdef JSMN_STRICT
 +                      /* In strict mode primitives are: numbers and booleans 
*/
 +                      case '-': case '0': case '1' : case '2': case '3' : 
case '4':
@@ -837,542 +647,3 @@
 +#endif
 +
 +#endif /* __JSMN_H_ */
-diff --git a/src/jsmn/library.json b/src/jsmn/library.json
-new file mode 100644
-index 0000000..8e2f5c2
---- /dev/null
-+++ b/src/jsmn/library.json
-@@ -0,0 +1,16 @@
-+{
-+  "name": "jsmn",
-+  "keywords": "json",
-+  "description": "Minimalistic JSON parser/tokenizer in C. It can be easily 
integrated into resource-limited or embedded projects",
-+  "repository":
-+  {
-+    "type": "git",
-+    "url": "https://github.com/zserge/jsmn.git";
-+  },
-+  "frameworks": "*",
-+  "platforms": "*",
-+  "examples": [
-+    "example/*.c"
-+  ],
-+  "exclude": "test"
-+}
-diff --git a/src/jsmn/test/test.h b/src/jsmn/test/test.h
-new file mode 100644
-index 0000000..930ebaf
---- /dev/null
-+++ b/src/jsmn/test/test.h
-@@ -0,0 +1,27 @@
-+#ifndef __TEST_H__
-+#define __TEST_H__
-+
-+static int test_passed = 0;
-+static int test_failed = 0;
-+
-+/* Terminate current test with error */
-+#define fail()        return __LINE__
-+
-+/* Successfull end of the test case */
-+#define done() return 0
-+
-+/* Check single condition */
-+#define check(cond) do { if (!(cond)) fail(); } while (0)
-+
-+/* Test runner */
-+static void test(int (*func)(void), const char *name) {
-+      int r = func();
-+      if (r == 0) {
-+              test_passed++;
-+      } else {
-+              test_failed++;
-+              printf("FAILED: %s (at line %d)\n", name, r);
-+      }
-+}
-+
-+#endif /* __TEST_H__ */
-diff --git a/src/jsmn/test/tests.c b/src/jsmn/test/tests.c
-new file mode 100644
-index 0000000..a72689e
---- /dev/null
-+++ b/src/jsmn/test/tests.c
-@@ -0,0 +1,378 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdarg.h>
-+
-+#include "test.h"
-+#include "testutil.h"
-+
-+int test_empty(void) {
-+      check(parse("{}", 1, 1,
-+                              JSMN_OBJECT, 0, 2, 0));
-+      check(parse("[]", 1, 1,
-+                              JSMN_ARRAY, 0, 2, 0));
-+      check(parse("[{},{}]", 3, 3,
-+                              JSMN_ARRAY, 0, 7, 2,
-+                              JSMN_OBJECT, 1, 3, 0,
-+                              JSMN_OBJECT, 4, 6, 0));
-+      return 0;
-+}
-+
-+int test_object(void) {
-+      check(parse("{\"a\":0}", 3, 3,
-+                              JSMN_OBJECT, 0, 7, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_PRIMITIVE, "0"));
-+      check(parse("{\"a\":[]}", 3, 3,
-+                              JSMN_OBJECT, 0, 8, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_ARRAY, 5, 7, 0));
-+      check(parse("{\"a\":{},\"b\":{}}", 5, 5,
-+                              JSMN_OBJECT, -1, -1, 2,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_OBJECT, -1, -1, 0,
-+                              JSMN_STRING, "b", 1,
-+                              JSMN_OBJECT, -1, -1, 0));
-+      check(parse("{\n \"Day\": 26,\n \"Month\": 9,\n \"Year\": 12\n }", 7, 7,
-+                              JSMN_OBJECT, -1, -1, 3,
-+                              JSMN_STRING, "Day", 1,
-+                              JSMN_PRIMITIVE, "26",
-+                              JSMN_STRING, "Month", 1,
-+                              JSMN_PRIMITIVE, "9",
-+                              JSMN_STRING, "Year", 1,
-+                              JSMN_PRIMITIVE, "12"));
-+      check(parse("{\"a\": 0, \"b\": \"c\"}", 5, 5,
-+                              JSMN_OBJECT, -1, -1, 2,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_PRIMITIVE, "0",
-+                              JSMN_STRING, "b", 1,
-+                              JSMN_STRING, "c", 0));
-+
-+#ifdef JSMN_STRICT
-+      check(parse("{\"a\"\n0}", JSMN_ERROR_INVAL, 3));
-+      check(parse("{\"a\", 0}", JSMN_ERROR_INVAL, 3));
-+      check(parse("{\"a\": {2}}", JSMN_ERROR_INVAL, 3));
-+      check(parse("{\"a\": {2: 3}}", JSMN_ERROR_INVAL, 3));
-+      check(parse("{\"a\": {\"a\": 2 3}}", JSMN_ERROR_INVAL, 5));
-+      /* FIXME */
-+      /*check(parse("{\"a\"}", JSMN_ERROR_INVAL, 2));*/
-+      /*check(parse("{\"a\": 1, \"b\"}", JSMN_ERROR_INVAL, 4));*/
-+      /*check(parse("{\"a\",\"b\":1}", JSMN_ERROR_INVAL, 4));*/
-+      /*check(parse("{\"a\":1,}", JSMN_ERROR_INVAL, 4));*/
-+      /*check(parse("{\"a\":\"b\":\"c\"}", JSMN_ERROR_INVAL, 4));*/
-+      /*check(parse("{,}", JSMN_ERROR_INVAL, 4));*/
-+#endif
-+      return 0;
-+}
-+
-+int test_array(void) {
-+      /* FIXME */
-+      /*check(parse("[10}", JSMN_ERROR_INVAL, 3));*/
-+      /*check(parse("[1,,3]", JSMN_ERROR_INVAL, 3)*/
-+      check(parse("[10]", 2, 2,
-+                              JSMN_ARRAY, -1, -1, 1,
-+                              JSMN_PRIMITIVE, "10"));
-+      check(parse("{\"a\": 1]", JSMN_ERROR_INVAL, 3));
-+      /* FIXME */
-+      /*check(parse("[\"a\": 1]", JSMN_ERROR_INVAL, 3));*/
-+      return 0;
-+}
-+
-+int test_primitive(void) {
-+      check(parse("{\"boolVar\" : true }", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "boolVar", 1,
-+                              JSMN_PRIMITIVE, "true"));
-+      check(parse("{\"boolVar\" : false }", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "boolVar", 1,
-+                              JSMN_PRIMITIVE, "false"));
-+      check(parse("{\"nullVar\" : null }", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "nullVar", 1,
-+                              JSMN_PRIMITIVE, "null"));
-+      check(parse("{\"intVar\" : 12}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "intVar", 1,
-+                              JSMN_PRIMITIVE, "12"));
-+      check(parse("{\"floatVar\" : 12.345}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "floatVar", 1,
-+                              JSMN_PRIMITIVE, "12.345"));
-+      return 0;
-+}
-+
-+int test_string(void) {
-+      check(parse("{\"strVar\" : \"hello world\"}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "strVar", 1,
-+                              JSMN_STRING, "hello world", 0));
-+      check(parse("{\"strVar\" : \"escapes: \\/\\r\\n\\t\\b\\f\\\"\\\\\"}", 
3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "strVar", 1,
-+                              JSMN_STRING, "escapes: 
\\/\\r\\n\\t\\b\\f\\\"\\\\", 0));
-+      check(parse("{\"strVar\": \"\"}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "strVar", 1,
-+                              JSMN_STRING, "", 0));
-+      check(parse("{\"a\":\"\\uAbcD\"}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_STRING, "\\uAbcD", 0));
-+      check(parse("{\"a\":\"str\\u0000\"}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_STRING, "str\\u0000", 0));
-+      check(parse("{\"a\":\"\\uFFFFstr\"}", 3, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_STRING, "\\uFFFFstr", 0));
-+      check(parse("{\"a\":[\"\\u0280\"]}", 4, 4,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_ARRAY, -1, -1, 1,
-+                              JSMN_STRING, "\\u0280", 0));
-+
-+      check(parse("{\"a\":\"str\\uFFGFstr\"}", JSMN_ERROR_INVAL, 3));
-+      check(parse("{\"a\":\"str\\u@FfF\"}", JSMN_ERROR_INVAL, 3));
-+      check(parse("{{\"a\":[\"\\u028\"]}", JSMN_ERROR_INVAL, 4));
-+      return 0;
-+}
-+
-+int test_partial_string(void) {
-+      int i;
-+      int r;
-+      jsmn_parser p;
-+      jsmntok_t tok[5];
-+      const char *js = "{\"x\": \"va\\\\ue\", \"y\": \"value y\"}";
-+
-+      jsmn_init(&p);
-+      for (i = 1; i <= strlen(js); i++) {
-+              r = jsmn_parse(&p, js, i, tok, sizeof(tok)/sizeof(tok[0]));
-+              if (i == strlen(js)) {
-+                      check(r == 5);
-+                      check(tokeq(js, tok, 5,
-+                                      JSMN_OBJECT, -1, -1, 2,
-+                                      JSMN_STRING, "x", 1,
-+                                      JSMN_STRING, "va\\\\ue", 0,
-+                                      JSMN_STRING, "y", 1,
-+                                      JSMN_STRING, "value y", 0));
-+              } else {
-+                      check(r == JSMN_ERROR_PART);
-+              }
-+      }
-+      return 0;
-+}
-+
-+int test_partial_array(void) {
-+#ifdef JSMN_STRICT
-+      int r;
-+      int i;
-+      jsmn_parser p;
-+      jsmntok_t tok[10];
-+      const char *js = "[ 1, true, [123, \"hello\"]]";
-+
-+      jsmn_init(&p);
-+      for (i = 1; i <= strlen(js); i++) {
-+              r = jsmn_parse(&p, js, i, tok, sizeof(tok)/sizeof(tok[0]));
-+              if (i == strlen(js)) {
-+                      check(r == 6);
-+                      check(tokeq(js, tok, 6,
-+                                      JSMN_ARRAY, -1, -1, 3,
-+                                      JSMN_PRIMITIVE, "1",
-+                                      JSMN_PRIMITIVE, "true",
-+                                      JSMN_ARRAY, -1, -1, 2,
-+                                      JSMN_PRIMITIVE, "123",
-+                                      JSMN_STRING, "hello", 0));
-+              } else {
-+                      check(r == JSMN_ERROR_PART);
-+              }
-+      }
-+#endif
-+      return 0;
-+}
-+
-+int test_array_nomem(void) {
-+      int i;
-+      int r;
-+      jsmn_parser p;
-+      jsmntok_t toksmall[10], toklarge[10];
-+      const char *js;
-+
-+      js = "  [ 1, true, [123, \"hello\"]]";
-+
-+      for (i = 0; i < 6; i++) {
-+              jsmn_init(&p);
-+              memset(toksmall, 0, sizeof(toksmall));
-+              memset(toklarge, 0, sizeof(toklarge));
-+              r = jsmn_parse(&p, js, strlen(js), toksmall, i);
-+              check(r == JSMN_ERROR_NOMEM);
-+
-+              memcpy(toklarge, toksmall, sizeof(toksmall));
-+
-+              r = jsmn_parse(&p, js, strlen(js), toklarge, 10);
-+              check(r >= 0);
-+              check(tokeq(js, toklarge, 4,
-+                                      JSMN_ARRAY, -1, -1, 3,
-+                                      JSMN_PRIMITIVE, "1",
-+                                      JSMN_PRIMITIVE, "true",
-+                                      JSMN_ARRAY, -1, -1, 2,
-+                                      JSMN_PRIMITIVE, "123",
-+                                      JSMN_STRING, "hello", 0));
-+      }
-+      return 0;
-+}
-+
-+int test_unquoted_keys(void) {
-+#ifndef JSMN_STRICT
-+      int r;
-+      jsmn_parser p;
-+      jsmntok_t tok[10];
-+      const char *js;
-+
-+      jsmn_init(&p);
-+      js = "key1: \"value\"\nkey2 : 123";
-+
-+      r = jsmn_parse(&p, js, strlen(js), tok, 10);
-+      check(r >= 0);
-+      check(tokeq(js, tok, 4,
-+                              JSMN_PRIMITIVE, "key1",
-+                              JSMN_STRING, "value", 0,
-+                              JSMN_PRIMITIVE, "key2",
-+                              JSMN_PRIMITIVE, "123"));
-+#endif
-+      return 0;
-+}
-+
-+int test_issue_22(void) {
-+      int r;
-+      jsmn_parser p;
-+      jsmntok_t tokens[128];
-+      const char *js;
-+
-+      js = "{ \"height\":10, \"layers\":[ { \"data\":[6,6], \"height\":10, "
-+              "\"name\":\"Calque de Tile 1\", \"opacity\":1, 
\"type\":\"tilelayer\", "
-+              "\"visible\":true, \"width\":10, \"x\":0, \"y\":0 }], "
-+              "\"orientation\":\"orthogonal\", \"properties\": { }, 
\"tileheight\":32, "
-+              "\"tilesets\":[ { \"firstgid\":1, 
\"image\":\"..\\/images\\/tiles.png\", "
-+              "\"imageheight\":64, \"imagewidth\":160, \"margin\":0, 
\"name\":\"Tiles\", "
-+              "\"properties\":{}, \"spacing\":0, \"tileheight\":32, 
\"tilewidth\":32 }], "
-+              "\"tilewidth\":32, \"version\":1, \"width\":10 }";
-+      jsmn_init(&p);
-+      r = jsmn_parse(&p, js, strlen(js), tokens, 128);
-+      check(r >= 0);
-+      return 0;
-+}
-+
-+int test_issue_27(void) {
-+      const char *js =
-+              "{ \"name\" : \"Jack\", \"age\" : 27 } { \"name\" : \"Anna\", ";
-+      check(parse(js, JSMN_ERROR_PART, 8));
-+      return 0;
-+}
-+
-+int test_input_length(void) {
-+      const char *js;
-+      int r;
-+      jsmn_parser p;
-+      jsmntok_t tokens[10];
-+
-+      js = "{\"a\": 0}garbage";
-+
-+      jsmn_init(&p);
-+      r = jsmn_parse(&p, js, 8, tokens, 10);
-+      check(r == 3);
-+      check(tokeq(js, tokens, 3,
-+                              JSMN_OBJECT, -1, -1, 1,
-+                              JSMN_STRING, "a", 1,
-+                              JSMN_PRIMITIVE, "0"));
-+      return 0;
-+}
-+
-+int test_count(void) {
-+      jsmn_parser p;
-+      const char *js;
-+
-+      js = "{}";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 1);
-+
-+      js = "[]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 1);
-+
-+      js = "[[]]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 2);
-+
-+      js = "[[], []]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 3);
-+
-+      js = "[[], []]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 3);
-+
-+      js = "[[], [[]], [[], []]]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 7);
-+
-+      js = "[\"a\", [[], []]]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 5);
-+
-+      js = "[[], \"[], [[]]\", [[]]]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 5);
-+
-+      js = "[1, 2, 3]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 4);
-+
-+      js = "[1, 2, [3, \"a\"], null]";
-+      jsmn_init(&p);
-+      check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 7);
-+
-+      return 0;
-+}
-+
-+
-+int test_nonstrict(void) {
-+#ifndef JSMN_STRICT
-+      const char *js;
-+      js = "a: 0garbage";
-+      check(parse(js, 2, 2,
-+                              JSMN_PRIMITIVE, "a",
-+                              JSMN_PRIMITIVE, "0garbage"));
-+
-+      js = "Day : 26\nMonth : Sep\n\nYear: 12";
-+      check(parse(js, 6, 6,
-+                              JSMN_PRIMITIVE, "Day",
-+                              JSMN_PRIMITIVE, "26",
-+                              JSMN_PRIMITIVE, "Month",
-+                              JSMN_PRIMITIVE, "Sep",
-+                              JSMN_PRIMITIVE, "Year",
-+                              JSMN_PRIMITIVE, "12"));
-+#endif
-+      return 0;
-+}
-+
-+int main(void) {
-+      test(test_empty, "test for a empty JSON objects/arrays");
-+      test(test_object, "test for a JSON objects");
-+      test(test_array, "test for a JSON arrays");
-+      test(test_primitive, "test primitive JSON data types");
-+      test(test_string, "test string JSON data types");
-+
-+      test(test_partial_string, "test partial JSON string parsing");
-+      test(test_partial_array, "test partial array reading");
-+      test(test_array_nomem, "test array reading with a smaller number of 
tokens");
-+      test(test_unquoted_keys, "test unquoted keys (like in JavaScript)");
-+      test(test_input_length, "test strings that are not null-terminated");
-+      test(test_issue_22, "test issue #22");
-+      test(test_issue_27, "test issue #27");
-+      test(test_count, "test tokens count estimation");
-+      test(test_nonstrict, "test for non-strict mode");
-+      printf("\nPASSED: %d\nFAILED: %d\n", test_passed, test_failed);
-+      return (test_failed > 0);
-+}
-diff --git a/src/jsmn/test/testutil.h b/src/jsmn/test/testutil.h
-new file mode 100644
-index 0000000..9a1eb2d
---- /dev/null
-+++ b/src/jsmn/test/testutil.h
-@@ -0,0 +1,94 @@
-+#ifndef __TEST_UTIL_H__
-+#define __TEST_UTIL_H__
-+
-+#include "../jsmn.c"
-+
-+static int vtokeq(const char *s, jsmntok_t *t, int numtok, va_list ap) {
-+      if (numtok > 0) {
-+              int i, start, end, size;
-+              int type;
-+              char *value;
-+
-+              size = -1;
-+              value = NULL;
-+              for (i = 0; i < numtok; i++) {
-+                      type = va_arg(ap, int);
-+                      if (type == JSMN_STRING) {
-+                              value = va_arg(ap, char *);
-+                              size = va_arg(ap, int);
-+                              start = end = -1;
-+                      } else if (type == JSMN_PRIMITIVE) {
-+                              value = va_arg(ap, char *);
-+                              start = end = size = -1;
-+                      } else {
-+                              start = va_arg(ap, int);
-+                              end = va_arg(ap, int);
-+                              size = va_arg(ap, int);
-+                              value = NULL;
-+                      }
-+                      if (t[i].type != type) {
-+                              printf("token %d type is %d, not %d\n", i, 
t[i].type, type);
-+                              return 0;
-+                      }
-+                      if (start != -1 && end != -1) {
-+                              if (t[i].start != start) {
-+                                      printf("token %d start is %d, not 
%d\n", i, t[i].start, start);
-+                                      return 0;
-+                              }
-+                              if (t[i].end != end ) {
-+                                      printf("token %d end is %d, not %d\n", 
i, t[i].end, end);
-+                                      return 0;
-+                              }
-+                      }
-+                      if (size != -1 && t[i].size != size) {
-+                              printf("token %d size is %d, not %d\n", i, 
t[i].size, size);
-+                              return 0;
-+                      }
-+
-+                      if (s != NULL && value != NULL) {
-+                              const char *p = s + t[i].start;
-+                              if (strlen(value) != t[i].end - t[i].start ||
-+                                              strncmp(p, value, t[i].end - 
t[i].start) != 0) {
-+                                      printf("token %d value is %.*s, not 
%s\n", i, t[i].end-t[i].start,
-+                                                      s+t[i].start, value);
-+                                      return 0;
-+                              }
-+                      }
-+              }
-+      }
-+      return 1;
-+}
-+
-+static int tokeq(const char *s, jsmntok_t *tokens, int numtok, ...) {
-+      int ok;
-+      va_list args;
-+      va_start(args, numtok);
-+      ok = vtokeq(s, tokens, numtok, args); 
-+      va_end(args);
-+      return ok;
-+}
-+
-+static int parse(const char *s, int status, int numtok, ...) {
-+      int r;
-+      int ok = 1;
-+      va_list args;
-+      jsmn_parser p;
-+      jsmntok_t *t = malloc(numtok * sizeof(jsmntok_t));
-+
-+      jsmn_init(&p);
-+      r = jsmn_parse(&p, s, strlen(s), t, numtok);
-+      if (r != status) {
-+              printf("status is %d, not %d\n", r, status);
-+              return 0;
-+      }
-+
-+      if (status >= 0) {
-+              va_start(args, numtok);
-+              ok = vtokeq(s, t, numtok, args); 
-+              va_end(args);
-+      }
-+      free(t);
-+      return ok;
-+}
-+
-+#endif /* __TEST_UTIL_H__ */
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 3.0 (quilt)
Source: getdns
Binary: libgetdns-dev, libgetdns1, getdns-utils
Architecture: any
Version: 1.1.0~a2-2
Maintainer: Debian DNS Packaging <[email protected]>
Uploaders: Ondřej Surý <[email protected]>, Scott Kitterman 
<[email protected]>, Daniel Kahn Gillmor <[email protected]>
Homepage: https://getdnsapi.net/
Standards-Version: 3.9.8
Vcs-Browser: https://anonscm.debian.org/git/pkg-dns/getdns.git
Vcs-Git: https://anonscm.debian.org/git/pkg-dns/getdns.git
Build-Depends: autotools-dev, check, debhelper (>= 9), dh-autoreconf, 
libev-dev, libevent-dev, libexpat-dev, libidn11-dev, libldns-dev, 
libunbound-dev, libuv1-dev, unbound-anchor
Package-List:
 getdns-utils deb libs extra arch=any
 libgetdns-dev deb libdevel extra arch=any
 libgetdns1 deb libs extra arch=any
Checksums-Sha1:
 4a20a83884a9ce6027441f9d0c0be58280fd0364 658110 getdns_1.1.0~a2.orig.tar.gz
 28fbe8bd20a628bddbcab158a3fc092966c2eb9e 19836 getdns_1.1.0~a2-2.debian.tar.xz
Checksums-Sha256:
 49204cfe1958e181c149926bbf65d0e30b62359bc8a2e739c6512416dbdac3f6 658110 
getdns_1.1.0~a2.orig.tar.gz
 ac18616f733fde8436fa28ead07854fcf54a9402a442231516a35341dd7108bf 19836 
getdns_1.1.0~a2-2.debian.tar.xz
Files:
 d8e93059508fc0898da554bec81d630f 658110 getdns_1.1.0~a2.orig.tar.gz
 8c62e360e14de5f7464c0eb4f59fdf07 19836 getdns_1.1.0~a2-2.debian.tar.xz

-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEMLkz2A/OPZgaLTj7DJm3DvT8uwcFAli/5I5fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDMw
QjkzM0Q4MEZDRTNEOTgxQTJEMzhGQjBDOTlCNzBFRjRGQ0JCMDcACgkQDJm3DvT8
uwdyKhAA7jfEOsmTUG/13vQuczWtXUdBUbmlItxgWLr7a7pMnqyn2BItpFGa9rr4
eWYg+yw2cvPMEv7OmDFpt6Dd+p46KGVFK1GkHJbc7IDdUglLx0I4R2fgRSh6Cs76
cxFGcXxJKBW4OA551fMNuZ1iBqOiPICkj7NX7OTQ67j+PrLWKdmGzOB104O/nq7J
7W1CXl/D9F2M4Ctef/Vqe01E48NRKYPaQcG77dHoWmSN4aVyz09bI9edczEtrHh/
q3ji0hqRFYLl/9cvx+H1WtjLFog0DWSGN9F23p8zFCGiAhUFJ1pTtnx+FJzLw4+u
JpOp05x0qD+2G9IcLizSQ7fqU0EdiqMR8tO7PXJRsIDGYj7Y3GpIFbKdVz/7Q1GF
Hd4/EKd6vCtVSWbS8Mvfn7YWBSGzCKjs8Ii56HlUH0ViFUy+QETOBkGflD1vYO6e
v0oRcF7+dL81txTR5MtDXBD2sebgn/cJxtqW0wDl/MOkaTD8em4fkk+nowrDgcLO
DgvHtW4tT6Zxq7aleaqpXq75G7gZgtv/1gJNOM6gopLC7DgZIf3e2oJAUjO7Yxjz
JwmhsSIR1UeoGiiS83oi2t/kwwOiEszPMJ/fk5v/X+c87rBsXP/ANg3Re11h9aDl
8jsflc5myu8d76UU8tpxZojd5WFjJ3hhlkDtoQhGbu7wYyKhsRk=
=RKHx
-----END PGP SIGNATURE-----

Attachment: getdns_1.1.0~a2-2.debian.tar.xz
Description: application/xz

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Wed, 08 Mar 2017 11:48:09 +0100
Source: getdns
Binary: libgetdns-dev libgetdns1 getdns-utils
Architecture: source
Version: 1.1.0~a2-2
Distribution: unstable
Urgency: medium
Maintainer: Debian DNS Packaging <[email protected]>
Changed-By: Ondřej Surý <[email protected]>
Description:
 getdns-utils - modern asynchronous DNS API (utils)
 libgetdns-dev - modern asynchronous DNS API (development)
 libgetdns1 - modern asynchronous DNS API (shared library)
Closes: 849577
Changes:
 getdns (1.1.0~a2-2) unstable; urgency=medium
 .
   * Use upstream provided src/jsmn/ (Closes: #849577)
Checksums-Sha1:
 3a6c0917e921180c987446e5c1d5408c86393451 2370 getdns_1.1.0~a2-2.dsc
 28fbe8bd20a628bddbcab158a3fc092966c2eb9e 19836 getdns_1.1.0~a2-2.debian.tar.xz
 5d7181e1e8c04a674555f1b947186c61818082e9 6486 getdns_1.1.0~a2-2_amd64.buildinfo
Checksums-Sha256:
 bb00bcf568c664fbc50d15111e0af49b2f1cf1507db619f92674d4b1701f8487 2370 
getdns_1.1.0~a2-2.dsc
 ac18616f733fde8436fa28ead07854fcf54a9402a442231516a35341dd7108bf 19836 
getdns_1.1.0~a2-2.debian.tar.xz
 7b9d2a712d785dfbc370451c643a7cedaf8e91a4e64dfeda5352b7fbfdb0623e 6486 
getdns_1.1.0~a2-2_amd64.buildinfo
Files:
 e79c972b279141fce0428388d793499d 2370 libs extra getdns_1.1.0~a2-2.dsc
 8c62e360e14de5f7464c0eb4f59fdf07 19836 libs extra 
getdns_1.1.0~a2-2.debian.tar.xz
 e5a0ad31cb8b7623ad9e360f5be7e27c 6486 libs extra 
getdns_1.1.0~a2-2_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEMLkz2A/OPZgaLTj7DJm3DvT8uwcFAli/5I9fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDMw
QjkzM0Q4MEZDRTNEOTgxQTJEMzhGQjBDOTlCNzBFRjRGQ0JCMDcACgkQDJm3DvT8
uwf0VhAA47ruDJjcha0bIoNGrxq7yOvJWcfavK86YTq7CDJTp2aDiZUAylDe5srr
mMylJTVOysPQLeAtifrYgNM1kRN5coqOVl/qAK0UFVHXggiPGyBPJSdAOo9FIySp
aH0PutYF5LfFcCq/2dwD6/UKJ/lP3jUlOmkOlyyTSd3MpSFBTfc3O11ZWu8ISOoi
/8jfu4Fmvrq/QmyQcwxEMW8YVvJmjYIeVao0I7NrXw/rEPMqmkT/kseclhmB3YUx
A56A2jcSnb/fh1A2RRHBFWlbI1IYSz5RhmBaohLn4CTECFiuhYB4MpWqFYY00i7t
Zdyih4NCP5jv7+lQKFUWTdsDdu++EFf3xuzDiPQWhtNkdCdxNadSoquTelA7pysx
V1Du/HE8A3Zz8i4JIZjEV/DHVOesQdaSgghlnKjmfwWcHDDi2ckqNyWA+HU9tHCX
Q9cqJdGagBwHbxZ8nRleuMQl5sFYkl/PU4jMFKFGEcnCbKyRtIYjdsQdT0/NmeEf
CAuPkMq5pjG6Pbno/do5jQE11vRL6+33jPuFV3mgicewOwFq/Ue/zPJ36TmhDJ5Y
hx6pg00UZ9BNNMMPogYJXjsQbCsay9AZS7wM7n9GvgtXHnajUoLIqeQ/PpU9VIOb
IJaRmmg99NBavvayhpSiQyx5f7XLSYevH2Cbrc8egwCDABeycFU=
=D7UR
-----END PGP SIGNATURE-----

Reply via email to