[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#859404: marked as done (unblock: getdns/1.1.0~a2-2)



Your message dated Mon, 03 Apr 2017 14:06:00 +0000
with message-id <e54f5d38-967f-9627-c732-d293bd9efaba@thykier.net>
and subject line Re: Bug#859404: unblock: getdns/1.1.0~a2-2
has caused the Debian Bug report #859404,
regarding unblock: getdns/1.1.0~a2-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
859404: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=859404
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
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ý <ondrej@debian.org>  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 <pkg-dns-devel@lists.alioth.debian.org>
Uploaders: Ondřej Surý <ondrej@debian.org>, Scott Kitterman <scott@kitterman.com>, Daniel Kahn Gillmor <dkg@fifthhorseman.net>
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 <pkg-dns-devel@lists.alioth.debian.org>
Changed-By: Ondřej Surý <ondrej@debian.org>
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-----

--- End Message ---
--- Begin Message ---
Ondřej Surý:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> 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
> 
> [...]

Unblocked, thanks.

~Niels

--- End Message ---

Reply to: