From ed3239e4dbe8dbaf3e0aa7261cf322fb8ad90827 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Sat, 16 Sep 2017 22:19:10 -0700 Subject: [PATCH] Fix exception when setting invalid bool value --- lib/device.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/device.js b/lib/device.js index f6dd46d..cc5ff40 100644 --- a/lib/device.js +++ b/lib/device.js @@ -28,12 +28,26 @@ const CHANGE_FLAGS = { }; +function parseBool(v) { + v = "" + v; + if (v === "true" || v === "TRUE" || v === "True" || v === "1") + return true; + else if (v === "false" || v === "FALSE" || v === "False" || v === "0") + return false; + else + return null; +} + + function sanitizeParameterValue(parameterValue) { if (parameterValue[0] != null) { switch (parameterValue[1]) { case 'xsd:boolean': if (typeof parameterValue[0] !== 'boolean') { - parameterValue[0] = !!JSON.parse(parameterValue[0]); + let v = parseBool(parameterValue[0]); + if (v == null) + v = '' + parameterValue[0]; + parameterValue[0] = v; } break; case 'xsd:string': @@ -44,12 +58,15 @@ function sanitizeParameterValue(parameterValue) { case 'xsd:int': case 'xsd:unsignedInt': if (typeof parameterValue[0] !== 'number') { - parameterValue[0] = +parameterValue[0]; + let v = parseInt(parameterValue[0]); + if (isNaN(v)) + v = '' + parameterValue[0]; + parameterValue[0] = v; } break; case 'xsd:dateTime': if (typeof parameterValue[0] !== 'number') { - let v = +parameterValue[0]; + let v = parseInt(parameterValue[0]); if (isNaN(v)) { v = Date.parse(parameterValue[0]); if (isNaN(v))