From d3ad21f81f0f93658b6f905367188ceb7c88a087 Mon Sep 17 00:00:00 2001
From: Ole R <frissdiegurke@protonmail.com>
Date: Fri, 5 Feb 2016 10:12:07 +0100
Subject: [PATCH 1/3] Fix settings trim cleaning arrays

---
 src/settings.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/settings.js b/src/settings.js
index 3d90dcfa84..6f3e1a0b36 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -20,6 +20,7 @@ function expandObjBy(obj1, obj2) {
 }
 
 function trim(obj1, obj2) {
+	if (obj1 instanceof Array) { return; }
 	var key, val1;
 	for (key in obj1) {
 		if (obj1.hasOwnProperty(key)) {
@@ -29,7 +30,7 @@ function trim(obj1, obj2) {
 			} else if (typeof val1 === 'object') {
 				trim(val1, obj2[key]);
 			}
-		}	
+		}
 	}
 }
 

From 7484389a4119ba80373c4ba3fbc8f489727e7bd4 Mon Sep 17 00:00:00 2001
From: Ole R <frissdiegurke@protonmail.com>
Date: Wed, 10 Feb 2016 15:04:55 +0100
Subject: [PATCH 2/3] Update array-check to Array.isArray

---
 src/settings.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/settings.js b/src/settings.js
index 6f3e1a0b36..71e0ea1374 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -20,7 +20,7 @@ function expandObjBy(obj1, obj2) {
 }
 
 function trim(obj1, obj2) {
-	if (obj1 instanceof Array) { return; }
+	if (Array.isArray(obj1)) { return; }
 	var key, val1;
 	for (key in obj1) {
 		if (obj1.hasOwnProperty(key)) {

From f537dfee1622b2040f2ab88219fd82328c822b0b Mon Sep 17 00:00:00 2001
From: Ole R <frissdiegurke@protonmail.com>
Date: Thu, 25 Feb 2016 11:01:46 +0100
Subject: [PATCH 3/3] Update array-check for settings trim and expand

---
 src/settings.js | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/settings.js b/src/settings.js
index 71e0ea1374..6f6cad2854 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -3,16 +3,19 @@
 var meta = require('./meta');
 
 function expandObjBy(obj1, obj2) {
-	var key, val1, val2, changed = false;
+	var key, val1, val2, xorValIsArray, changed = false;
 	for (key in obj2) {
 		if (obj2.hasOwnProperty(key)) {
 			val2 = obj2[key];
 			val1 = obj1[key];
-			if (!obj1.hasOwnProperty(key) || typeof val2 !== typeof val1) {
+			xorValIsArray = Array.isArray(val1) ^ Array.isArray(val2);
+			if (xorValIsArray || !obj1.hasOwnProperty(key) || typeof val2 !== typeof val1) {
 				obj1[key] = val2;
 				changed = true;
-			} else if (typeof val2 === 'object' && expandObjBy(val1, val2)) {
-				changed = true;
+			} else if (typeof val2 === 'object' && !Array.isArray(val2)) {
+				if (expandObjBy(val1, val2)) {
+					changed = true;
+				}
 			}
 		}
 	}
@@ -20,14 +23,13 @@ function expandObjBy(obj1, obj2) {
 }
 
 function trim(obj1, obj2) {
-	if (Array.isArray(obj1)) { return; }
 	var key, val1;
 	for (key in obj1) {
 		if (obj1.hasOwnProperty(key)) {
 			val1 = obj1[key];
 			if (!obj2.hasOwnProperty(key)) {
 				delete obj1[key];
-			} else if (typeof val1 === 'object') {
+			} else if (typeof val1 === 'object' && !Array.isArray(val1)) {
 				trim(val1, obj2[key]);
 			}
 		}