From 9cd40c5d2676845b6db8c797341e67726788d8f5 Mon Sep 17 00:00:00 2001 From: Pelle Wessman Date: Wed, 20 Jan 2021 00:36:56 +0100 Subject: [PATCH] Don't type cast non-sensible values Fixes #186 --- lib/fields.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/fields.js b/lib/fields.js index a002aeb..5008e62 100644 --- a/lib/fields.js +++ b/lib/fields.js @@ -12,6 +12,9 @@ var validators = require('./validators'); var coerceArray = function (arr) { return is.array(arr) && arr.length > 0 ? arr : []; }; +var isSingleFieldData = function (raw_data) { + return is.string(raw_data) || is.number(raw_data); +}; var nameSeparatorRegExp = /[_-]/g; exports.string = function (options) { @@ -21,10 +24,7 @@ exports.string = function (options) { f.widget = f.widget || forms.widgets.text(opt.attrs || {}); f.parse = function (raw_data) { - if (typeof raw_data !== 'undefined' && raw_data !== null) { - return String(raw_data); - } - return ''; + return isSingleFieldData(raw_data) ? String(raw_data) : ''; }; f.bind = function (raw_data) { var b = assign({}, f); // clone field object: @@ -112,10 +112,10 @@ exports.number = function (opt) { var f = exports.string(opts); f.parse = function (raw_data) { - if (raw_data === null || raw_data === '') { + if (raw_data === '') { return NaN; } - return Number(raw_data); + return isSingleFieldData(raw_data) ? Number(raw_data) : NaN; }; return f; }; @@ -126,7 +126,10 @@ exports['boolean'] = function (opt) { f.widget = opts.widget || forms.widgets.checkbox(opts.attrs || {}); f.parse = function (raw_data) { - return !!raw_data; + if (is.bool(raw_data)) { + return raw_data; + } + return !!(raw_data && isSingleFieldData(raw_data)); }; return f; };