luci-base: cbi.js: properly handle non-strings in `%h` and `%q` formats
authorJo-Philipp Wich <jo@mein.io>
Thu, 9 Dec 2021 15:25:50 +0000 (16:25 +0100)
committerJo-Philipp Wich <jo@mein.io>
Thu, 9 Dec 2021 15:25:50 +0000 (16:25 +0100)
Only replace null, objects and function values with the empty string but
return booleans and numbers as strings.

Spotted while debugging #5587.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/cbi.js

index 9200954d1e791f088f9bf66bab9a10637e1435f1..324a91403fa9c87a6641d5d3ed141f2b49aee355 100644 (file)
@@ -521,9 +521,14 @@ String.prototype.format = function()
        var quot_esc = [/"/g, '&#34;', /'/g, '&#39;'];
 
        function esc(s, r) {
-               if (typeof(s) !== 'string' && !(s instanceof String))
+               var t = typeof(s);
+
+               if (s == null || t === 'object' || t === 'function')
                        return '';
 
+               if (t !== 'string')
+                       s = String(s);
+
                for (var i = 0; i < r.length; i += 2)
                        s = s.replace(r[i], r[i+1]);