Browse Source

Cherry-pick fix for JSON detection. Closes: 922874

Christoph Biedl 2 years ago
parent
commit
cf50fd6ae8

+ 73 - 0
debian/patches/cherry-pick.FILE5_36-32-g479e0995.pr-69-only-consider-arrays-1-element-when-quickly-figuring-out-if-a.patch

@@ -0,0 +1,73 @@
+Subject: PR/69: Only consider arrays > 1 element when quickly figuring out if a (...)
+Origin: FILE5_36-32-g479e0995 <https://github.com/file/file/commit/FILE5_36-32-g479e0995>
+Upstream-Author: Christos Zoulas <christos@zoulas.com>
+Date: Sat Mar 2 01:08:10 2019 +0000
+Bug-Debian: https://bugs.debian.org/922874
+
+    PR/69: Only consider arrays > 1 element when quickly figuring out if a
+    file is JSON.
+
+--- a/src/is_json.c
++++ b/src/is_json.c
+@@ -52,7 +52,8 @@
+ #define JSON_NUMBER	2
+ #define JSON_OBJECT	3
+ #define JSON_STRING	4
+-#define JSON_MAX	5
++#define JSON_ARRAYN	5
++#define JSON_MAX	6
+ 
+ /*
+  * if JSON_COUNT != 0:
+@@ -171,6 +172,7 @@
+ 	size_t *st, size_t lvl)
+ {
+ 	const unsigned char *uc = *ucp;
++	int more = 0;	/* Array has more than 1 element */
+ 
+ 	DPRINTF("Parse array: ", uc, *ucp);
+ 	while (uc < ue) {
+@@ -180,9 +182,12 @@
+ 			goto out;
+ 		switch (*uc) {
+ 		case ',':
++			more++;
+ 			uc++;
+ 			continue;
+ 		case ']':
++			if (more)
++				st[JSON_ARRAYN]++;
+ 			*ucp = uc + 1;
+ 			return 1;
+ 		default:
+@@ -330,7 +335,7 @@
+ 		return 0;
+ #if JSON_COUNT
+ 	/* bail quickly if not counting */
+-	if (lvl > 1 && (st[JSON_OBJECT] || st[JSON_ARRAY]))
++	if (lvl > 1 && (st[JSON_OBJECT] || st[JSON_ARRAYN]))
+ 		return 1;
+ #endif
+ 
+@@ -373,7 +378,7 @@
+ 	*ucp = uc;
+ 	DPRINTF("End general: ", uc, *ucp);
+ 	if (lvl == 0)
+-		return rv && (st[JSON_ARRAY] || st[JSON_OBJECT]);
++		return rv && (st[JSON_ARRAYN] || st[JSON_OBJECT]);
+ 	return rv;
+ }
+ 
+@@ -408,8 +413,10 @@
+ #define P(n) st[n], st[n] > 1 ? "s" : ""
+ 	if (file_printf(ms, " (%" SIZE_T_FORMAT "u object%s, %" SIZE_T_FORMAT
+ 	    "u array%s, %" SIZE_T_FORMAT "u string%s, %" SIZE_T_FORMAT
+-	    "u constant%s, %" SIZE_T_FORMAT "u number%s)", P(JSON_OBJECT),
+-	    P(JSON_ARRAY), P(JSON_STRING), P(JSON_CONSTANT), P(JSON_NUMBER))
++	    "u constant%s, %" SIZE_T_FORMAT "u number%s, %" SIZE_T_FORMAT
++	    "u >1array%s)",
++	    P(JSON_OBJECT), P(JSON_ARRAY), P(JSON_STRING), P(JSON_CONSTANT),
++	    P(JSON_NUMBER), P(JSON_ARRAYN))
+ 	    == -1)
+ 		return -1;
+ #endif

+ 1 - 0
debian/patches/series

@@ -21,6 +21,7 @@ cherry-pick.FILE5_36-24-g9b2f9d6a.cast-to-unsigned-first-to-appease-ubsan-oss-fu
 # patches that should go upstream
 
 # local modifications
+cherry-pick.FILE5_36-32-g479e0995.pr-69-only-consider-arrays-1-element-when-quickly-figuring-out-if-a.patch
 local.support-local-definitions-in-etc-magic.patch
 local.don-t-include-libs-in-build.patch
 local.mention-posixly-correct-dependent-behaviour-in-usage-message.patch