Blame SOURCES/json-c-0.14-backport_fixes_from_master.patch

2496d2
From 812d5e3903c5507c9d015cf0078b3a63d391b022 Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Tue, 21 Apr 2020 03:19:17 +0000
2496d2
Subject: [PATCH 01/18] Issue #471: always create directories with mode 0755,
2496d2
 regardless of umask.
2496d2
2496d2
---
2496d2
 CMakeLists.txt | 11 +++++++++++
2496d2
 1 file changed, 11 insertions(+)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index c51f477c5f..ea536947df 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -392,6 +392,17 @@ target_include_directories(${PROJECT_NAME}
2496d2
         $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
2496d2
 )
2496d2
 
2496d2
+# Always create new install dirs with 0755 permissions, regardless of umask
2496d2
+set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
2496d2
+	OWNER_READ
2496d2
+	OWNER_WRITE
2496d2
+	OWNER_EXECUTE
2496d2
+	GROUP_READ
2496d2
+	GROUP_EXECUTE
2496d2
+	WORLD_READ
2496d2
+	WORLD_EXECUTE
2496d2
+   )
2496d2
+
2496d2
 install(TARGETS ${PROJECT_NAME}
2496d2
     EXPORT ${PROJECT_NAME}-targets
2496d2
     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2496d2
2496d2
From 3a3ab6c7d8991892a44267919204f852dbd512ed Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Sun, 3 May 2020 03:50:16 +0000
2496d2
Subject: [PATCH 02/18] Fix cmake-configure to accept "--prefix=<foo>" in
2496d2
 addition to "--prefix <foo>" (see also Issue #591)
2496d2
2496d2
---
2496d2
 cmake-configure | 3 +++
2496d2
 1 file changed, 3 insertions(+)
2496d2
2496d2
diff --git a/cmake-configure b/cmake-configure
2496d2
index 7a06b660c1..2fcc39e3ca 100755
2496d2
--- a/cmake-configure
2496d2
+++ b/cmake-configure
2496d2
@@ -52,6 +52,9 @@ while [ $# -gt 0 ] ; do
2496d2
 		FLAGS+=(-DCMAKE_INSTALL_PREFIX="$2")
2496d2
 		shift
2496d2
 		;;
2496d2
+	--prefix=*)
2496d2
+		FLAGS+=(-DCMAKE_INSTALL_PREFIX="${1##--prefix=}")
2496d2
+		;;
2496d2
 	--enable-threading)
2496d2
 		FLAGS+=(-DENABLE_THREADING=ON)
2496d2
 		;;
2496d2
2496d2
From 0ca0361a24cd9f76b9bcb92eba2a752ff5269cea Mon Sep 17 00:00:00 2001
2496d2
From: Tudor Brindus <me@tbrindus.ca>
2496d2
Date: Fri, 1 May 2020 22:24:20 -0400
2496d2
Subject: [PATCH 03/18] Fix segmentation fault in CPUID check
2496d2
2496d2
---
2496d2
 random_seed.c | 15 ++-------------
2496d2
 1 file changed, 2 insertions(+), 13 deletions(-)
2496d2
2496d2
diff --git a/random_seed.c b/random_seed.c
2496d2
index fc19e26d13..c459f0f92f 100644
2496d2
--- a/random_seed.c
2496d2
+++ b/random_seed.c
2496d2
@@ -26,19 +26,8 @@
2496d2
 static void do_cpuid(int regs[], int h)
2496d2
 {
2496d2
 	/* clang-format off */
2496d2
-    __asm__ __volatile__(
2496d2
-#if defined __x86_64__
2496d2
-                         "pushq %%rbx;\n"
2496d2
-#else
2496d2
-                         "pushl %%ebx;\n"
2496d2
-#endif
2496d2
-                         "cpuid;\n"
2496d2
-#if defined __x86_64__
2496d2
-                         "popq %%rbx;\n"
2496d2
-#else
2496d2
-                         "popl %%ebx;\n"
2496d2
-#endif
2496d2
-                         : "=a"(regs[0]), [ebx] "=r"(regs[1]), "=c"(regs[2]), "=d"(regs[3])
2496d2
+    __asm__ __volatile__("cpuid"
2496d2
+                         : "=a"(regs[0]), "=b"(regs[1]), "=c"(regs[2]), "=d"(regs[3])
2496d2
                          : "a"(h));
2496d2
 	/* clang-format on */
2496d2
 }
2496d2
2496d2
From 23005a7d9d7e9a1c433689b5df29a53bf629b470 Mon Sep 17 00:00:00 2001
2496d2
From: Tudor Brindus <me@tbrindus.ca>
2496d2
Date: Fri, 1 May 2020 21:09:22 -0400
2496d2
Subject: [PATCH 04/18] Detect broken RDRAND during initialization
2496d2
2496d2
Some CPUs advertise RDRAND in CPUID, but return 0xFFFFFFFF
2496d2
unconditionally. To avoid locking up later, test RDRAND during
2496d2
initialization, and if it returns 0xFFFFFFFF, mark it as nonexistent.
2496d2
2496d2
Fixes #588.
2496d2
---
2496d2
 random_seed.c | 37 +++++++++++++++++++++++++++++++++----
2496d2
 1 file changed, 33 insertions(+), 4 deletions(-)
2496d2
2496d2
diff --git a/random_seed.c b/random_seed.c
2496d2
index c459f0f92f..4ddcb07d16 100644
2496d2
--- a/random_seed.c
2496d2
+++ b/random_seed.c
2496d2
@@ -43,12 +43,41 @@ static void do_cpuid(int regs[], int h)
2496d2
 
2496d2
 #if HAS_X86_CPUID
2496d2
 
2496d2
+static int get_rdrand_seed(void);
2496d2
+
2496d2
+// Valid values are -1 (haven't tested), 0 (no), and 1 (yes).
2496d2
+static int _has_rdrand = -1;
2496d2
+
2496d2
 static int has_rdrand(void)
2496d2
 {
2496d2
-	// CPUID.01H:ECX.RDRAND[bit 30] == 1
2496d2
-	int regs[4];
2496d2
-	do_cpuid(regs, 1);
2496d2
-	return (regs[2] & (1 << 30)) != 0;
2496d2
+	if (_has_rdrand == -1)
2496d2
+	{
2496d2
+		// CPUID.01H:ECX.RDRAND[bit 30] == 1
2496d2
+		int regs[4];
2496d2
+		do_cpuid(regs, 1);
2496d2
+		if (!(regs[2] & (1 << 30)))
2496d2
+		{
2496d2
+			_has_rdrand = 0;
2496d2
+		} else
2496d2
+		{
2496d2
+			// Some CPUs advertise RDRAND in CPUID, but return 0xFFFFFFFF
2496d2
+			// unconditionally. To avoid locking up later, test RDRAND here. If over
2496d2
+			// 10 trials RDRAND has returned the same value, declare it broken.
2496d2
+			_has_rdrand = 0;
2496d2
+			int prev = get_rdrand_seed();
2496d2
+			for (int i = 0; i < 10; i++) {
2496d2
+				int temp = get_rdrand_seed();
2496d2
+				if (temp != prev) {
2496d2
+					_has_rdrand = 1;
2496d2
+					break;
2496d2
+				}
2496d2
+
2496d2
+				prev = temp;
2496d2
+			}
2496d2
+		}
2496d2
+	}
2496d2
+
2496d2
+	return _has_rdrand;
2496d2
 }
2496d2
 
2496d2
 #endif
2496d2
2496d2
From 8d28e677e6a0919dcea40ea9a5b5d484df1d7d41 Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Mon, 4 May 2020 01:29:02 +0000
2496d2
Subject: [PATCH 05/18] Issue #589: drop the rdrand test loops to just 3, tweak
2496d2
 comments and add some links to bug reports, and decrease the nesting level of
2496d2
 the has_rdrand() function.
2496d2
2496d2
---
2496d2
 random_seed.c | 64 +++++++++++++++++++++++++++++++--------------------
2496d2
 1 file changed, 39 insertions(+), 25 deletions(-)
2496d2
2496d2
diff --git a/random_seed.c b/random_seed.c
2496d2
index 4ddcb07d16..b5f8a0795e 100644
2496d2
--- a/random_seed.c
2496d2
+++ b/random_seed.c
2496d2
@@ -45,36 +45,46 @@ static void do_cpuid(int regs[], int h)
2496d2
 
2496d2
 static int get_rdrand_seed(void);
2496d2
 
2496d2
-// Valid values are -1 (haven't tested), 0 (no), and 1 (yes).
2496d2
+/* Valid values are -1 (haven't tested), 0 (no), and 1 (yes). */
2496d2
 static int _has_rdrand = -1;
2496d2
 
2496d2
 static int has_rdrand(void)
2496d2
 {
2496d2
-	if (_has_rdrand == -1)
2496d2
+	if (_has_rdrand != -1)
2496d2
 	{
2496d2
-		// CPUID.01H:ECX.RDRAND[bit 30] == 1
2496d2
-		int regs[4];
2496d2
-		do_cpuid(regs, 1);
2496d2
-		if (!(regs[2] & (1 << 30)))
2496d2
-		{
2496d2
-			_has_rdrand = 0;
2496d2
-		} else
2496d2
+		return _has_rdrand;
2496d2
+	}
2496d2
+
2496d2
+	/* CPUID.01H:ECX.RDRAND[bit 30] == 1 */
2496d2
+	int regs[4];
2496d2
+	do_cpuid(regs, 1);
2496d2
+	if (!(regs[2] & (1 << 30)))
2496d2
+	{
2496d2
+		_has_rdrand = 0;
2496d2
+		return 0;
2496d2
+	}
2496d2
+
2496d2
+	/*
2496d2
+	 * Some CPUs advertise RDRAND in CPUID, but return 0xFFFFFFFF
2496d2
+	 * unconditionally. To avoid locking up later, test RDRAND here. If over
2496d2
+	 * 3 trials RDRAND has returned the same value, declare it broken.
2496d2
+	 * Example CPUs are AMD Ryzen 3000 series
2496d2
+	 * and much older AMD APUs, such as the E1-1500
2496d2
+	 * https://github.com/systemd/systemd/issues/11810
2496d2
+	 * https://linuxreviews.org/RDRAND_stops_returning_random_values_on_older_AMD_CPUs_after_suspend
2496d2
+	 */
2496d2
+	_has_rdrand = 0;
2496d2
+	int prev = get_rdrand_seed();
2496d2
+	for (int i = 0; i < 3; i++)
2496d2
+	{
2496d2
+		int temp = get_rdrand_seed();
2496d2
+		if (temp != prev)
2496d2
 		{
2496d2
-			// Some CPUs advertise RDRAND in CPUID, but return 0xFFFFFFFF
2496d2
-			// unconditionally. To avoid locking up later, test RDRAND here. If over
2496d2
-			// 10 trials RDRAND has returned the same value, declare it broken.
2496d2
-			_has_rdrand = 0;
2496d2
-			int prev = get_rdrand_seed();
2496d2
-			for (int i = 0; i < 10; i++) {
2496d2
-				int temp = get_rdrand_seed();
2496d2
-				if (temp != prev) {
2496d2
-					_has_rdrand = 1;
2496d2
-					break;
2496d2
-				}
2496d2
-
2496d2
-				prev = temp;
2496d2
-			}
2496d2
+			_has_rdrand = 1;
2496d2
+			break;
2496d2
 		}
2496d2
+
2496d2
+		prev = temp;
2496d2
 	}
2496d2
 
2496d2
 	return _has_rdrand;
2496d2
@@ -92,7 +102,7 @@ static int get_rdrand_seed(void)
2496d2
 {
2496d2
 	DEBUG_SEED("get_rdrand_seed");
2496d2
 	int _eax;
2496d2
-	// rdrand eax
2496d2
+	/* rdrand eax */
2496d2
 	/* clang-format off */
2496d2
 	__asm__ __volatile__("1: .byte 0x0F\n"
2496d2
 	                     "   .byte 0xC7\n"
2496d2
@@ -132,7 +142,7 @@ static int get_rdrand_seed(void)
2496d2
 	DEBUG_SEED("get_rdrand_seed");
2496d2
 	int _eax;
2496d2
 retry:
2496d2
-	// rdrand eax
2496d2
+	/* rdrand eax */
2496d2
 	__asm _emit 0x0F __asm _emit 0xC7 __asm _emit 0xF0
2496d2
 	__asm jnc retry
2496d2
 	__asm mov _eax, eax
2496d2
@@ -206,6 +216,10 @@ static int get_dev_random_seed(void)
2496d2
 
2496d2
 /* clang-format off */
2496d2
 #include <windows.h>
2496d2
+
2496d2
+/* Caution: these blank lines must remain so clang-format doesn't reorder
2496d2
+   includes to put windows.h after wincrypt.h */
2496d2
+
2496d2
 #include <wincrypt.h>
2496d2
 /* clang-format on */
2496d2
 #ifndef __GNUC__
2496d2
2496d2
From a9695f34c3f4bbd4475597cce1e5d48284286634 Mon Sep 17 00:00:00 2001
2496d2
From: Tobias Stoeckmann <tobias@stoeckmann.org>
2496d2
Date: Mon, 4 May 2020 19:41:16 +0200
2496d2
Subject: [PATCH 06/18] Protect array_list_del_idx against size_t overflow.
2496d2
2496d2
If the assignment of stop overflows due to idx and count being
2496d2
larger than SIZE_T_MAX in sum, out of boundary access could happen.
2496d2
2496d2
It takes invalid usage of this function for this to happen, but
2496d2
I decided to add this check so array_list_del_idx is as safe against
2496d2
bad usage as the other arraylist functions.
2496d2
---
2496d2
 arraylist.c | 3 +++
2496d2
 1 file changed, 3 insertions(+)
2496d2
2496d2
diff --git a/arraylist.c b/arraylist.c
2496d2
index 12ad8af6d3..e5524aca75 100644
2496d2
--- a/arraylist.c
2496d2
+++ b/arraylist.c
2496d2
@@ -136,6 +136,9 @@ int array_list_del_idx(struct array_list *arr, size_t idx, size_t count)
2496d2
 {
2496d2
 	size_t i, stop;
2496d2
 
2496d2
+	/* Avoid overflow in calculation with large indices. */
2496d2
+	if (idx > SIZE_T_MAX - count)
2496d2
+		return -1;
2496d2
 	stop = idx + count;
2496d2
 	if (idx >= arr->length || stop > arr->length)
2496d2
 		return -1;
2496d2
2496d2
From e66f7f7223fc6a2d3b808216ae28c7de65a54fe7 Mon Sep 17 00:00:00 2001
2496d2
From: Tobias Stoeckmann <tobias@stoeckmann.org>
2496d2
Date: Mon, 4 May 2020 19:46:45 +0200
2496d2
Subject: [PATCH 07/18] Prevent division by zero in linkhash.
2496d2
2496d2
If a linkhash with a size of zero is created, then modulo operations
2496d2
are prone to division by zero operations.
2496d2
2496d2
Purely protective measure against bad usage.
2496d2
---
2496d2
 linkhash.c | 3 +++
2496d2
 1 file changed, 3 insertions(+)
2496d2
2496d2
diff --git a/linkhash.c b/linkhash.c
2496d2
index 7ea58c0abf..f05cc38030 100644
2496d2
--- a/linkhash.c
2496d2
+++ b/linkhash.c
2496d2
@@ -12,6 +12,7 @@
2496d2
 
2496d2
 #include "config.h"
2496d2
 
2496d2
+#include <assert.h>
2496d2
 #include <limits.h>
2496d2
 #include <stdarg.h>
2496d2
 #include <stddef.h>
2496d2
@@ -499,6 +500,8 @@ struct lh_table *lh_table_new(int size, lh_entry_free_fn *free_fn, lh_hash_fn *h
2496d2
 	int i;
2496d2
 	struct lh_table *t;
2496d2
 
2496d2
+	/* Allocate space for elements to avoid divisions by zero. */
2496d2
+	assert(size > 0);
2496d2
 	t = (struct lh_table *)calloc(1, sizeof(struct lh_table));
2496d2
 	if (!t)
2496d2
 		return NULL;
2496d2
2496d2
From c4eae053d4d5c6f300984677b4435f0c00f706a9 Mon Sep 17 00:00:00 2001
2496d2
From: Tobias Stoeckmann <tobias@stoeckmann.org>
2496d2
Date: Mon, 4 May 2020 19:47:25 +0200
2496d2
Subject: [PATCH 08/18] Fix integer overflows.
2496d2
2496d2
The data structures linkhash and printbuf are limited to 2 GB in size
2496d2
due to a signed integer being used to track their current size.
2496d2
2496d2
If too much data is added, then size variable can overflow, which is
2496d2
an undefined behaviour in C programming language.
2496d2
2496d2
Assuming that a signed int overflow just leads to a negative value,
2496d2
like it happens on many sytems (Linux i686/amd64 with gcc), then
2496d2
printbuf is vulnerable to an out of boundary write on 64 bit systems.
2496d2
---
2496d2
 linkhash.c |  7 +++++--
2496d2
 printbuf.c | 19 ++++++++++++++++---
2496d2
 2 files changed, 21 insertions(+), 5 deletions(-)
2496d2
2496d2
diff --git a/linkhash.c b/linkhash.c
2496d2
index f05cc38030..51e90b13a2 100644
2496d2
--- a/linkhash.c
2496d2
+++ b/linkhash.c
2496d2
@@ -580,9 +580,12 @@ int lh_table_insert_w_hash(struct lh_table *t, const void *k, const void *v, con
2496d2
 {
2496d2
 	unsigned long n;
2496d2
 
2496d2
-	if (t->count >= t->size * LH_LOAD_FACTOR)
2496d2
-		if (lh_table_resize(t, t->size * 2) != 0)
2496d2
+	if (t->count >= t->size * LH_LOAD_FACTOR) {
2496d2
+		/* Avoid signed integer overflow with large tables. */
2496d2
+		int new_size = INT_MAX / 2 < t->size ? t->size * 2 : INT_MAX;
2496d2
+		if (t->size == INT_MAX || lh_table_resize(t, new_size) != 0)
2496d2
 			return -1;
2496d2
+	}
2496d2
 
2496d2
 	n = h % t->size;
2496d2
 
2496d2
diff --git a/printbuf.c b/printbuf.c
2496d2
index 976c12dde5..00822fac4f 100644
2496d2
--- a/printbuf.c
2496d2
+++ b/printbuf.c
2496d2
@@ -15,6 +15,7 @@
2496d2
 
2496d2
 #include "config.h"
2496d2
 
2496d2
+#include <limits.h>
2496d2
 #include <stdio.h>
2496d2
 #include <stdlib.h>
2496d2
 #include <string.h>
2496d2
@@ -65,10 +66,16 @@ static int printbuf_extend(struct printbuf *p, int min_size)
2496d2
 
2496d2
 	if (p->size >= min_size)
2496d2
 		return 0;
2496d2
-
2496d2
-	new_size = p->size * 2;
2496d2
-	if (new_size < min_size + 8)
2496d2
+	/* Prevent signed integer overflows with large buffers. */
2496d2
+	if (min_size > INT_MAX - 8)
2496d2
+		return -1;
2496d2
+	if (p->size > INT_MAX / 2)
2496d2
 		new_size = min_size + 8;
2496d2
+	else {
2496d2
+		new_size = p->size * 2;
2496d2
+		if (new_size < min_size + 8)
2496d2
+			new_size = min_size + 8;
2496d2
+	}
2496d2
 #ifdef PRINTBUF_DEBUG
2496d2
 	MC_DEBUG("printbuf_memappend: realloc "
2496d2
 	         "bpos=%d min_size=%d old_size=%d new_size=%d\n",
2496d2
@@ -83,6 +90,9 @@ static int printbuf_extend(struct printbuf *p, int min_size)
2496d2
 
2496d2
 int printbuf_memappend(struct printbuf *p, const char *buf, int size)
2496d2
 {
2496d2
+	/* Prevent signed integer overflows with large buffers. */
2496d2
+	if (size > INT_MAX - p->bpos - 1)
2496d2
+		return -1;
2496d2
 	if (p->size <= p->bpos + size + 1)
2496d2
 	{
2496d2
 		if (printbuf_extend(p, p->bpos + size + 1) < 0)
2496d2
@@ -100,6 +110,9 @@ int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len)
2496d2
 
2496d2
 	if (offset == -1)
2496d2
 		offset = pb->bpos;
2496d2
+	/* Prevent signed integer overflows with large buffers. */
2496d2
+	if (len > INT_MAX - offset)
2496d2
+		return -1;
2496d2
 	size_needed = offset + len;
2496d2
 	if (pb->size < size_needed)
2496d2
 	{
2496d2
2496d2
From 392770c8e5c0783185bdfe0d919737e705190904 Mon Sep 17 00:00:00 2001
2496d2
From: dota17 <chenguopingdota@163.com>
2496d2
Date: Wed, 6 May 2020 10:48:53 +0800
2496d2
Subject: [PATCH 09/18] support to build both static and shared libraries
2496d2
2496d2
---
2496d2
 CMakeLists.txt | 20 ++++++++++++++++++++
2496d2
 README.md      | 10 +++++++++-
2496d2
 2 files changed, 29 insertions(+), 1 deletion(-)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index ea536947df..7d7bd7fcc4 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -392,6 +392,26 @@ target_include_directories(${PROJECT_NAME}
2496d2
         $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
2496d2
 )
2496d2
 
2496d2
+# Allow to build static and shared libraries at the same time
2496d2
+if (BUILD_STATIC_LIBS)
2496d2
+    set(ORIGINAL_STATIC_LIB_NAME ${PROJECT_NAME}-static)
2496d2
+    add_library(${ORIGINAL_STATIC_LIB_NAME} STATIC
2496d2
+        ${JSON_C_SOURCES}
2496d2
+        ${JSON_C_HEADERS}
2496d2
+    )
2496d2
+
2496d2
+    # rename the static library
2496d2
+    set_target_properties(${ORIGINAL_STATIC_LIB_NAME} PROPERTIES
2496d2
+        OUTPUT_NAME ${PROJECT_NAME}
2496d2
+    )
2496d2
+
2496d2
+    target_include_directories(${PROJECT_NAME}
2496d2
+        PUBLIC
2496d2
+            $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
2496d2
+            $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
2496d2
+    )
2496d2
+endif ()
2496d2
+
2496d2
 # Always create new install dirs with 0755 permissions, regardless of umask
2496d2
 set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
2496d2
 	OWNER_READ
2496d2
diff --git a/README.md b/README.md
2496d2
index 39ea0d6814..909fd116bf 100644
2496d2
--- a/README.md
2496d2
+++ b/README.md
2496d2
@@ -98,6 +98,7 @@ Variable             | Type   | Description
2496d2
 CMAKE_INSTALL_PREFIX | String | The install location.
2496d2
 CMAKE_BUILD_TYPE     | String | Defaults to "debug"
2496d2
 BUILD_SHARED_LIBS    | Bool   | The default build generates a dynamic (dll/so) library.  Set this to OFF to create a static library instead.
2496d2
+BUILD_STATIC_LIBS    | Bool   | This build generates a static (lib/a) library.
2496d2
 ENABLE_RDRAND        | Bool   | Enable RDRAND Hardware RNG Hash Seed
2496d2
 ENABLE_THREADING     | Bool   | Enable partial threading support
2496d2
 DISABLE_WERROR       | Bool   | Disable use of -Werror
2496d2
@@ -106,7 +107,14 @@ DISABLE_BSYMBOLIC    | Bool   | Disable use of -Bsymbolic-functions
2496d2
 Pass these options as `-D` on CMake's command-line.
2496d2
 
2496d2
 ```sh
2496d2
-cmake -DBUILD_SHARED_LIBS=OFF ...
2496d2
+# build a static library
2496d2
+cmake -DBUILD_SHARED_LIBS=OFF ..
2496d2
+```
2496d2
+
2496d2
+Allow to build both static and shared libraries.
2496d2
+
2496d2
+```sh
2496d2
+cmake -DBUILD_STATIC_LIBS=ON ..
2496d2
 ```
2496d2
 
2496d2
 ### Building with partial threading support
2496d2
2496d2
From af7a3e05af5e7410c1d8e00ec10b728db737843a Mon Sep 17 00:00:00 2001
2496d2
From: dota17 <chenguopingdota@163.com>
2496d2
Date: Thu, 7 May 2020 14:50:43 +0800
2496d2
Subject: [PATCH 10/18] update
2496d2
2496d2
---
2496d2
 CMakeLists.txt |  7 +------
2496d2
 README.md      | 12 +++---------
2496d2
 2 files changed, 4 insertions(+), 15 deletions(-)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index 7d7bd7fcc4..f82103879a 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -65,6 +65,7 @@ include(GNUInstallDirs)
2496d2
 include(CMakePackageConfigHelpers)
2496d2
 
2496d2
 option(BUILD_SHARED_LIBS  "Default to building shared libraries" ON)
2496d2
+option(BUILD_STATIC_LIBS  "Default to building static libraries" ON)
2496d2
 
2496d2
 # Generate a release merge and test it to verify the correctness of republishing the package.
2496d2
 ADD_CUSTOM_TARGET(distcheck
2496d2
@@ -404,12 +405,6 @@ if (BUILD_STATIC_LIBS)
2496d2
     set_target_properties(${ORIGINAL_STATIC_LIB_NAME} PROPERTIES
2496d2
         OUTPUT_NAME ${PROJECT_NAME}
2496d2
     )
2496d2
-
2496d2
-    target_include_directories(${PROJECT_NAME}
2496d2
-        PUBLIC
2496d2
-            $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
2496d2
-            $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
2496d2
-    )
2496d2
 endif ()
2496d2
 
2496d2
 # Always create new install dirs with 0755 permissions, regardless of umask
2496d2
diff --git a/README.md b/README.md
2496d2
index 909fd116bf..f5a7ee39b4 100644
2496d2
--- a/README.md
2496d2
+++ b/README.md
2496d2
@@ -97,8 +97,8 @@ Variable             | Type   | Description
2496d2
 ---------------------|--------|--------------
2496d2
 CMAKE_INSTALL_PREFIX | String | The install location.
2496d2
 CMAKE_BUILD_TYPE     | String | Defaults to "debug"
2496d2
-BUILD_SHARED_LIBS    | Bool   | The default build generates a dynamic (dll/so) library.  Set this to OFF to create a static library instead.
2496d2
-BUILD_STATIC_LIBS    | Bool   | This build generates a static (lib/a) library.
2496d2
+BUILD_SHARED_LIBS    | Bool   | The default build generates a dynamic (dll/so) library.  Set this to OFF to create a static library only.
2496d2
+BUILD_STATIC_LIBS    | Bool   | The default build generates a static (lib/a) library.  Set this to OFF to create a shared library only.
2496d2
 ENABLE_RDRAND        | Bool   | Enable RDRAND Hardware RNG Hash Seed
2496d2
 ENABLE_THREADING     | Bool   | Enable partial threading support
2496d2
 DISABLE_WERROR       | Bool   | Disable use of -Werror
2496d2
@@ -107,16 +107,10 @@ DISABLE_BSYMBOLIC    | Bool   | Disable use of -Bsymbolic-functions
2496d2
 Pass these options as `-D` on CMake's command-line.
2496d2
 
2496d2
 ```sh
2496d2
-# build a static library
2496d2
+# build a static library only
2496d2
 cmake -DBUILD_SHARED_LIBS=OFF ..
2496d2
 ```
2496d2
 
2496d2
-Allow to build both static and shared libraries.
2496d2
-
2496d2
-```sh
2496d2
-cmake -DBUILD_STATIC_LIBS=ON ..
2496d2
-```
2496d2
-
2496d2
 ### Building with partial threading support
2496d2
 
2496d2
 Although json-c does not support fully multi-threaded access to
2496d2
2496d2
From 077eceead18152fae8c6bd8e2288d53d5eba7cf6 Mon Sep 17 00:00:00 2001
2496d2
From: hofnarr <hofnarr@hofnarr.fi>
2496d2
Date: Fri, 8 May 2020 02:16:52 +0300
2496d2
Subject: [PATCH 11/18] cmake: add list for build targets
2496d2
2496d2
---
2496d2
 CMakeLists.txt | 5 +++--
2496d2
 1 file changed, 3 insertions(+), 2 deletions(-)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index f82103879a..00613a8d67 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -384,7 +384,7 @@ add_library(${PROJECT_NAME}
2496d2
 set_target_properties(${PROJECT_NAME} PROPERTIES
2496d2
     VERSION 5.0.0
2496d2
     SOVERSION 5)
2496d2
-
2496d2
+list(APPEND CMAKE_TARGETS ${PROJECT_NAME})
2496d2
 # If json-c is used as subroject it set to target correct interface -I flags and allow
2496d2
 # to build external target without extra include_directories(...)
2496d2
 target_include_directories(${PROJECT_NAME}
2496d2
@@ -405,6 +405,7 @@ if (BUILD_STATIC_LIBS)
2496d2
     set_target_properties(${ORIGINAL_STATIC_LIB_NAME} PROPERTIES
2496d2
         OUTPUT_NAME ${PROJECT_NAME}
2496d2
     )
2496d2
+    list(APPEND CMAKE_TARGETS ${STATIC_LIB})
2496d2
 endif ()
2496d2
 
2496d2
 # Always create new install dirs with 0755 permissions, regardless of umask
2496d2
@@ -418,7 +419,7 @@ set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
2496d2
 	WORLD_EXECUTE
2496d2
    )
2496d2
 
2496d2
-install(TARGETS ${PROJECT_NAME}
2496d2
+install(TARGETS ${CMAKE_TARGETS}
2496d2
     EXPORT ${PROJECT_NAME}-targets
2496d2
     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2496d2
     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
2496d2
2496d2
From 20895f941ee4e1ffe8248c30c01322970479d7cd Mon Sep 17 00:00:00 2001
2496d2
From: hofnarr <hofnarr@hofnarr.fi>
2496d2
Date: Fri, 8 May 2020 02:19:38 +0300
2496d2
Subject: [PATCH 12/18] cmake: change variable name
2496d2
2496d2
---
2496d2
 CMakeLists.txt | 6 +++---
2496d2
 1 file changed, 3 insertions(+), 3 deletions(-)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index 00613a8d67..7302d4edf0 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -395,14 +395,14 @@ target_include_directories(${PROJECT_NAME}
2496d2
 
2496d2
 # Allow to build static and shared libraries at the same time
2496d2
 if (BUILD_STATIC_LIBS)
2496d2
-    set(ORIGINAL_STATIC_LIB_NAME ${PROJECT_NAME}-static)
2496d2
-    add_library(${ORIGINAL_STATIC_LIB_NAME} STATIC
2496d2
+    set(STATIC_LIB ${PROJECT_NAME}-static)
2496d2
+    add_library(${STATIC_LIB} STATIC
2496d2
         ${JSON_C_SOURCES}
2496d2
         ${JSON_C_HEADERS}
2496d2
     )
2496d2
 
2496d2
     # rename the static library
2496d2
-    set_target_properties(${ORIGINAL_STATIC_LIB_NAME} PROPERTIES
2496d2
+    set_target_properties(${STATIC_LIB} PROPERTIES
2496d2
         OUTPUT_NAME ${PROJECT_NAME}
2496d2
     )
2496d2
     list(APPEND CMAKE_TARGETS ${STATIC_LIB})
2496d2
2496d2
From 2db5633de4980a33c911e9a52984ac62f2a5edf7 Mon Sep 17 00:00:00 2001
2496d2
From: hofnarr <hofnarr@hofnarr.fi>
2496d2
Date: Fri, 8 May 2020 02:27:06 +0300
2496d2
Subject: [PATCH 13/18] cmake-configure: fix enable-static option
2496d2
2496d2
---
2496d2
 cmake-configure | 2 +-
2496d2
 1 file changed, 1 insertion(+), 1 deletion(-)
2496d2
2496d2
diff --git a/cmake-configure b/cmake-configure
2496d2
index 2fcc39e3ca..c8e44aeed4 100755
2496d2
--- a/cmake-configure
2496d2
+++ b/cmake-configure
2496d2
@@ -65,7 +65,7 @@ while [ $# -gt 0 ] ; do
2496d2
 		FLAGS+=(-DBUILD_SHARED_LIBS=ON)
2496d2
 		;;
2496d2
 	--enable-static)
2496d2
-		FLAGS+=(-DBUILD_SHARED_LIBS=OFF)
2496d2
+		FLAGS+=(-DBUILD_STATIC_LIBS=ON)
2496d2
 		;;
2496d2
 	--disable-Bsymbolic)
2496d2
 		FLAGS+=(-DDISABLE_BSYMBOLIC=ON)
2496d2
2496d2
From 7a4807fe0cdb1d9e20273c79762cbf54833aaae4 Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Sun, 10 May 2020 03:32:19 +0000
2496d2
Subject: [PATCH 14/18] Issue #599: Fix the backwards check in
2496d2
 lh_table_insert_w_hash() that was preventing adding more than 11 objects. Add
2496d2
 a test to check for this too.
2496d2
2496d2
---
2496d2
 linkhash.c           |  2 +-
2496d2
 tests/test4.c        | 29 +++++++++++++++++++++++++++++
2496d2
 tests/test4.expected |  1 +
2496d2
 3 files changed, 31 insertions(+), 1 deletion(-)
2496d2
2496d2
diff --git a/linkhash.c b/linkhash.c
2496d2
index 51e90b13a2..f930efd387 100644
2496d2
--- a/linkhash.c
2496d2
+++ b/linkhash.c
2496d2
@@ -582,7 +582,7 @@ int lh_table_insert_w_hash(struct lh_table *t, const void *k, const void *v, con
2496d2
 
2496d2
 	if (t->count >= t->size * LH_LOAD_FACTOR) {
2496d2
 		/* Avoid signed integer overflow with large tables. */
2496d2
-		int new_size = INT_MAX / 2 < t->size ? t->size * 2 : INT_MAX;
2496d2
+		int new_size = (t->size > INT_MAX / 2) ? INT_MAX : (t->size * 2);
2496d2
 		if (t->size == INT_MAX || lh_table_resize(t, new_size) != 0)
2496d2
 			return -1;
2496d2
 	}
2496d2
diff --git a/tests/test4.c b/tests/test4.c
2496d2
index bd964ec789..fd2f3be8ec 100644
2496d2
--- a/tests/test4.c
2496d2
+++ b/tests/test4.c
2496d2
@@ -3,8 +3,10 @@
2496d2
  */
2496d2
 
2496d2
 #include "config.h"
2496d2
+#include <assert.h>
2496d2
 #include <stdio.h>
2496d2
 #include <string.h>
2496d2
+#include <stdlib.h>
2496d2
 
2496d2
 #include "json_inttypes.h"
2496d2
 #include "json_object.h"
2496d2
@@ -24,6 +26,30 @@ void print_hex(const char *s)
2496d2
 	putchar('\n');
2496d2
 }
2496d2
 
2496d2
+static void test_lot_of_adds(void);
2496d2
+static void test_lot_of_adds()
2496d2
+{
2496d2
+	int ii;
2496d2
+	char key[50];
2496d2
+	json_object *jobj = json_object_new_object();
2496d2
+	assert(jobj != NULL);
2496d2
+	for (ii = 0; ii < 500; ii++)
2496d2
+	{
2496d2
+		snprintf(key, sizeof(key), "k%d", ii);
2496d2
+		json_object *iobj = json_object_new_int(ii);
2496d2
+		assert(iobj != NULL);
2496d2
+		if (json_object_object_add(jobj, key, iobj))
2496d2
+		{
2496d2
+			fprintf(stderr, "FAILED to add object #%d\n", ii);
2496d2
+			abort();
2496d2
+		}
2496d2
+	}
2496d2
+	printf("%s\n", json_object_to_json_string(jobj));
2496d2
+	assert(json_object_object_length(jobj) == 500);
2496d2
+	json_object_put(jobj);
2496d2
+}
2496d2
+
2496d2
+
2496d2
 int main(void)
2496d2
 {
2496d2
 	const char *input = "\"\\ud840\\udd26,\\ud840\\udd27,\\ud800\\udd26,\\ud800\\udd27\"";
2496d2
@@ -52,5 +78,8 @@ int main(void)
2496d2
 		retval = 1;
2496d2
 	}
2496d2
 	json_object_put(parse_result);
2496d2
+
2496d2
+	test_lot_of_adds();
2496d2
+
2496d2
 	return retval;
2496d2
 }
2496d2
diff --git a/tests/test4.expected b/tests/test4.expected
2496d2
index 68d4336d90..cb2744012b 100644
2496d2
--- a/tests/test4.expected
2496d2
+++ b/tests/test4.expected
2496d2
@@ -1,3 +1,4 @@
2496d2
 input: "\ud840\udd26,\ud840\udd27,\ud800\udd26,\ud800\udd27"
2496d2
 JSON parse result is correct: 𠄦,𠄧,𐄦,𐄧
2496d2
 PASS
2496d2
+{ "k0": 0, "k1": 1, "k2": 2, "k3": 3, "k4": 4, "k5": 5, "k6": 6, "k7": 7, "k8": 8, "k9": 9, "k10": 10, "k11": 11, "k12": 12, "k13": 13, "k14": 14, "k15": 15, "k16": 16, "k17": 17, "k18": 18, "k19": 19, "k20": 20, "k21": 21, "k22": 22, "k23": 23, "k24": 24, "k25": 25, "k26": 26, "k27": 27, "k28": 28, "k29": 29, "k30": 30, "k31": 31, "k32": 32, "k33": 33, "k34": 34, "k35": 35, "k36": 36, "k37": 37, "k38": 38, "k39": 39, "k40": 40, "k41": 41, "k42": 42, "k43": 43, "k44": 44, "k45": 45, "k46": 46, "k47": 47, "k48": 48, "k49": 49, "k50": 50, "k51": 51, "k52": 52, "k53": 53, "k54": 54, "k55": 55, "k56": 56, "k57": 57, "k58": 58, "k59": 59, "k60": 60, "k61": 61, "k62": 62, "k63": 63, "k64": 64, "k65": 65, "k66": 66, "k67": 67, "k68": 68, "k69": 69, "k70": 70, "k71": 71, "k72": 72, "k73": 73, "k74": 74, "k75": 75, "k76": 76, "k77": 77, "k78": 78, "k79": 79, "k80": 80, "k81": 81, "k82": 82, "k83": 83, "k84": 84, "k85": 85, "k86": 86, "k87": 87, "k88": 88, "k89": 89, "k90": 90, "k91": 91, "k92": 92, "k93": 93, "k94": 94, "k95": 95, "k96": 96, "k97": 97, "k98": 98, "k99": 99, "k100": 100, "k101": 101, "k102": 102, "k103": 103, "k104": 104, "k105": 105, "k106": 106, "k107": 107, "k108": 108, "k109": 109, "k110": 110, "k111": 111, "k112": 112, "k113": 113, "k114": 114, "k115": 115, "k116": 116, "k117": 117, "k118": 118, "k119": 119, "k120": 120, "k121": 121, "k122": 122, "k123": 123, "k124": 124, "k125": 125, "k126": 126, "k127": 127, "k128": 128, "k129": 129, "k130": 130, "k131": 131, "k132": 132, "k133": 133, "k134": 134, "k135": 135, "k136": 136, "k137": 137, "k138": 138, "k139": 139, "k140": 140, "k141": 141, "k142": 142, "k143": 143, "k144": 144, "k145": 145, "k146": 146, "k147": 147, "k148": 148, "k149": 149, "k150": 150, "k151": 151, "k152": 152, "k153": 153, "k154": 154, "k155": 155, "k156": 156, "k157": 157, "k158": 158, "k159": 159, "k160": 160, "k161": 161, "k162": 162, "k163": 163, "k164": 164, "k165": 165, "k166": 166, "k167": 167, "k168": 168, "k169": 169, "k170": 170, "k171": 171, "k172": 172, "k173": 173, "k174": 174, "k175": 175, "k176": 176, "k177": 177, "k178": 178, "k179": 179, "k180": 180, "k181": 181, "k182": 182, "k183": 183, "k184": 184, "k185": 185, "k186": 186, "k187": 187, "k188": 188, "k189": 189, "k190": 190, "k191": 191, "k192": 192, "k193": 193, "k194": 194, "k195": 195, "k196": 196, "k197": 197, "k198": 198, "k199": 199, "k200": 200, "k201": 201, "k202": 202, "k203": 203, "k204": 204, "k205": 205, "k206": 206, "k207": 207, "k208": 208, "k209": 209, "k210": 210, "k211": 211, "k212": 212, "k213": 213, "k214": 214, "k215": 215, "k216": 216, "k217": 217, "k218": 218, "k219": 219, "k220": 220, "k221": 221, "k222": 222, "k223": 223, "k224": 224, "k225": 225, "k226": 226, "k227": 227, "k228": 228, "k229": 229, "k230": 230, "k231": 231, "k232": 232, "k233": 233, "k234": 234, "k235": 235, "k236": 236, "k237": 237, "k238": 238, "k239": 239, "k240": 240, "k241": 241, "k242": 242, "k243": 243, "k244": 244, "k245": 245, "k246": 246, "k247": 247, "k248": 248, "k249": 249, "k250": 250, "k251": 251, "k252": 252, "k253": 253, "k254": 254, "k255": 255, "k256": 256, "k257": 257, "k258": 258, "k259": 259, "k260": 260, "k261": 261, "k262": 262, "k263": 263, "k264": 264, "k265": 265, "k266": 266, "k267": 267, "k268": 268, "k269": 269, "k270": 270, "k271": 271, "k272": 272, "k273": 273, "k274": 274, "k275": 275, "k276": 276, "k277": 277, "k278": 278, "k279": 279, "k280": 280, "k281": 281, "k282": 282, "k283": 283, "k284": 284, "k285": 285, "k286": 286, "k287": 287, "k288": 288, "k289": 289, "k290": 290, "k291": 291, "k292": 292, "k293": 293, "k294": 294, "k295": 295, "k296": 296, "k297": 297, "k298": 298, "k299": 299, "k300": 300, "k301": 301, "k302": 302, "k303": 303, "k304": 304, "k305": 305, "k306": 306, "k307": 307, "k308": 308, "k309": 309, "k310": 310, "k311": 311, "k312": 312, "k313": 313, "k314": 314, "k315": 315, "k316": 316, "k317": 317, "k318": 318, "k319": 319, "k320": 320, "k321": 321, "k322": 322, "k323": 323, "k324": 324, "k325": 325, "k326": 326, "k327": 327, "k328": 328, "k329": 329, "k330": 330, "k331": 331, "k332": 332, "k333": 333, "k334": 334, "k335": 335, "k336": 336, "k337": 337, "k338": 338, "k339": 339, "k340": 340, "k341": 341, "k342": 342, "k343": 343, "k344": 344, "k345": 345, "k346": 346, "k347": 347, "k348": 348, "k349": 349, "k350": 350, "k351": 351, "k352": 352, "k353": 353, "k354": 354, "k355": 355, "k356": 356, "k357": 357, "k358": 358, "k359": 359, "k360": 360, "k361": 361, "k362": 362, "k363": 363, "k364": 364, "k365": 365, "k366": 366, "k367": 367, "k368": 368, "k369": 369, "k370": 370, "k371": 371, "k372": 372, "k373": 373, "k374": 374, "k375": 375, "k376": 376, "k377": 377, "k378": 378, "k379": 379, "k380": 380, "k381": 381, "k382": 382, "k383": 383, "k384": 384, "k385": 385, "k386": 386, "k387": 387, "k388": 388, "k389": 389, "k390": 390, "k391": 391, "k392": 392, "k393": 393, "k394": 394, "k395": 395, "k396": 396, "k397": 397, "k398": 398, "k399": 399, "k400": 400, "k401": 401, "k402": 402, "k403": 403, "k404": 404, "k405": 405, "k406": 406, "k407": 407, "k408": 408, "k409": 409, "k410": 410, "k411": 411, "k412": 412, "k413": 413, "k414": 414, "k415": 415, "k416": 416, "k417": 417, "k418": 418, "k419": 419, "k420": 420, "k421": 421, "k422": 422, "k423": 423, "k424": 424, "k425": 425, "k426": 426, "k427": 427, "k428": 428, "k429": 429, "k430": 430, "k431": 431, "k432": 432, "k433": 433, "k434": 434, "k435": 435, "k436": 436, "k437": 437, "k438": 438, "k439": 439, "k440": 440, "k441": 441, "k442": 442, "k443": 443, "k444": 444, "k445": 445, "k446": 446, "k447": 447, "k448": 448, "k449": 449, "k450": 450, "k451": 451, "k452": 452, "k453": 453, "k454": 454, "k455": 455, "k456": 456, "k457": 457, "k458": 458, "k459": 459, "k460": 460, "k461": 461, "k462": 462, "k463": 463, "k464": 464, "k465": 465, "k466": 466, "k467": 467, "k468": 468, "k469": 469, "k470": 470, "k471": 471, "k472": 472, "k473": 473, "k474": 474, "k475": 475, "k476": 476, "k477": 477, "k478": 478, "k479": 479, "k480": 480, "k481": 481, "k482": 482, "k483": 483, "k484": 484, "k485": 485, "k486": 486, "k487": 487, "k488": 488, "k489": 489, "k490": 490, "k491": 491, "k492": 492, "k493": 493, "k494": 494, "k495": 495, "k496": 496, "k497": 497, "k498": 498, "k499": 499 }
2496d2
2496d2
From b4c0c8d0270155a37f192033786b7602245eb923 Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Sun, 10 May 2020 03:48:45 +0000
2496d2
Subject: [PATCH 15/18] Issue #598: avoid building static libraries twice.
2496d2
2496d2
---
2496d2
 CMakeLists.txt | 2 +-
2496d2
 1 file changed, 1 insertion(+), 1 deletion(-)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index 7302d4edf0..67c2ae6e7c 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -394,7 +394,7 @@ target_include_directories(${PROJECT_NAME}
2496d2
 )
2496d2
 
2496d2
 # Allow to build static and shared libraries at the same time
2496d2
-if (BUILD_STATIC_LIBS)
2496d2
+if (BUILD_STATIC_LIBS AND BUILD_SHARED_LIBS)
2496d2
     set(STATIC_LIB ${PROJECT_NAME}-static)
2496d2
     add_library(${STATIC_LIB} STATIC
2496d2
         ${JSON_C_SOURCES}
2496d2
2496d2
From 5d3466d0cb709da0f84b1010c4658a87805db47f Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Sun, 10 May 2020 03:58:27 +0000
2496d2
Subject: [PATCH 16/18] Re-format after recent change to fix linkhash.
2496d2
2496d2
---
2496d2
 linkhash.c    | 3 ++-
2496d2
 tests/test4.c | 3 +--
2496d2
 2 files changed, 3 insertions(+), 3 deletions(-)
2496d2
2496d2
diff --git a/linkhash.c b/linkhash.c
2496d2
index f930efd387..b021ef10b0 100644
2496d2
--- a/linkhash.c
2496d2
+++ b/linkhash.c
2496d2
@@ -580,7 +580,8 @@ int lh_table_insert_w_hash(struct lh_table *t, const void *k, const void *v, con
2496d2
 {
2496d2
 	unsigned long n;
2496d2
 
2496d2
-	if (t->count >= t->size * LH_LOAD_FACTOR) {
2496d2
+	if (t->count >= t->size * LH_LOAD_FACTOR)
2496d2
+	{
2496d2
 		/* Avoid signed integer overflow with large tables. */
2496d2
 		int new_size = (t->size > INT_MAX / 2) ? INT_MAX : (t->size * 2);
2496d2
 		if (t->size == INT_MAX || lh_table_resize(t, new_size) != 0)
2496d2
diff --git a/tests/test4.c b/tests/test4.c
2496d2
index fd2f3be8ec..7d3d0be168 100644
2496d2
--- a/tests/test4.c
2496d2
+++ b/tests/test4.c
2496d2
@@ -5,8 +5,8 @@
2496d2
 #include "config.h"
2496d2
 #include <assert.h>
2496d2
 #include <stdio.h>
2496d2
-#include <string.h>
2496d2
 #include <stdlib.h>
2496d2
+#include <string.h>
2496d2
 
2496d2
 #include "json_inttypes.h"
2496d2
 #include "json_object.h"
2496d2
@@ -49,7 +49,6 @@ static void test_lot_of_adds()
2496d2
 	json_object_put(jobj);
2496d2
 }
2496d2
 
2496d2
-
2496d2
 int main(void)
2496d2
 {
2496d2
 	const char *input = "\"\\ud840\\udd26,\\ud840\\udd27,\\ud800\\udd26,\\ud800\\udd27\"";
2496d2
2496d2
From f0bbaec2d4e1c64bcc2b4e9880d15ccb46233fc0 Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Sun, 10 May 2020 03:58:51 +0000
2496d2
Subject: [PATCH 17/18] Issue #600: don't rename the static library on Windows,
2496d2
 it _needs_ to have a different name because the dll build also creates a
2496d2
 "json-c.lib" file.
2496d2
2496d2
---
2496d2
 CMakeLists.txt | 2 ++
2496d2
 1 file changed, 2 insertions(+)
2496d2
2496d2
diff --git a/CMakeLists.txt b/CMakeLists.txt
2496d2
index 67c2ae6e7c..b980a5a2f8 100644
2496d2
--- a/CMakeLists.txt
2496d2
+++ b/CMakeLists.txt
2496d2
@@ -402,9 +402,11 @@ if (BUILD_STATIC_LIBS AND BUILD_SHARED_LIBS)
2496d2
     )
2496d2
 
2496d2
     # rename the static library
2496d2
+    if (NOT MSVC)
2496d2
     set_target_properties(${STATIC_LIB} PROPERTIES
2496d2
         OUTPUT_NAME ${PROJECT_NAME}
2496d2
     )
2496d2
+    endif()
2496d2
     list(APPEND CMAKE_TARGETS ${STATIC_LIB})
2496d2
 endif ()
2496d2
 
2496d2
2496d2
From c7c7d1cbe93a978898c0f270948369bb8ec9cc05 Mon Sep 17 00:00:00 2001
2496d2
From: Eric Haszlakiewicz <erh+git@nimenees.com>
2496d2
Date: Sun, 10 May 2020 04:04:28 +0000
2496d2
Subject: [PATCH 18/18] Fix snprintf on windows problem for test4.
2496d2
2496d2
---
2496d2
 tests/test4.c | 1 +
2496d2
 1 file changed, 1 insertion(+)
2496d2
2496d2
diff --git a/tests/test4.c b/tests/test4.c
2496d2
index 7d3d0be168..288cec1792 100644
2496d2
--- a/tests/test4.c
2496d2
+++ b/tests/test4.c
2496d2
@@ -11,6 +11,7 @@
2496d2
 #include "json_inttypes.h"
2496d2
 #include "json_object.h"
2496d2
 #include "json_tokener.h"
2496d2
+#include "snprintf_compat.h"
2496d2
 
2496d2
 void print_hex(const char *s)
2496d2
 {