Fixed JSON escaping in meshcore.
Ylian Saint-Hilaire committed
Jan 16, 2022 at 12:14 UTC
86e0e85cf75323ea9aa413e7a31423adb8e5fe9a
1 file changed
+15
-14
meshcentral.js
+15
-14
@@ -2403,7 +2403,7 @@ function CreateMeshCentralServer(config, args) {
2403
};
2404
2405
// Escape a code string
2406
- obj.escapeCodeString = function (str) {
2406
+ obj.escapeCodeString = function (str, keepUtf8) {
2407
const escapeCodeStringTable = { '\'': '\\\'', '\"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t' };
2408
var r = '', c, cr, table;
2409
for (var i = 0; i < str.length; i++) {
@@ -2411,6 +2411,8 @@ function CreateMeshCentralServer(config, args) {
2411
table = escapeCodeStringTable[c];
2412
if (table != null) {
2413
r += table;
2414
+ } else if (keepUtf8 === true) {
2415
+ r += c;
2416
} else {
2417
cr = c.charCodeAt(0);
2418
if ((cr >= 32) && (cr <= 127)) { r += c; }
@@ -2477,20 +2479,22 @@ function CreateMeshCentralServer(config, args) {
2479
if (modulesDir != null) {
2480
for (var i in modulesDir) {
2481
if (modulesDir[i].toLowerCase().endsWith('.json')) {
2482
+ // We are adding a JSON file to the meshcores
2483
var moduleName = modulesDir[i].substring(0, modulesDir[i].length - 5);
2484
if (moduleName.endsWith('.min')) { moduleName = moduleName.substring(0, moduleName.length - 6); } // Remove the ".min" for ".min.json" files.
2482
- var d = obj.fs.readFileSync(obj.path.join(moduleDirPath, modulesDir[i])).toString('utf8').split('\'').join('\\\'');
2483
- var moduleData = ['var ', moduleName, ' = JSON.parse(\'', d, '\');\r\n'];
2485
+ const jsonData = obj.escapeCodeString(obj.fs.readFileSync(obj.path.join(moduleDirPath, modulesDir[i])).toString('utf8'), true);
2486
+ const moduleData = ['var ', moduleName, ' = JSON.parse(\'', jsonData, '\');\r\n'];
2487
2485
- // Add to all cores
2488
+ // Add to all major cores
2489
modulesAdd['windows-amt'].push(...moduleData);
2490
modulesAdd['linux-amt'].push(...moduleData);
2491
modulesAdd['linux-noamt'].push(...moduleData);
2492
}
2493
if (modulesDir[i].toLowerCase().endsWith('.js')) {
2494
+ // We are adding a JS file to the meshcores
2495
var moduleName = modulesDir[i].substring(0, modulesDir[i].length - 3);
2496
if (moduleName.endsWith('.min')) { moduleName = moduleName.substring(0, moduleName.length - 4); } // Remove the ".min" for ".min.js" files.
2493
- var moduleData = [ 'try { addModule("', moduleName, '", "', obj.escapeCodeString(obj.fs.readFileSync(obj.path.join(moduleDirPath, modulesDir[i])).toString('binary')), '"); addedModules.push("', moduleName, '"); } catch (e) { }\r\n' ];
2497
+ const moduleData = [ 'try { addModule("', moduleName, '", "', obj.escapeCodeString(obj.fs.readFileSync(obj.path.join(moduleDirPath, modulesDir[i])).toString('binary')), '"); addedModules.push("', moduleName, '"); } catch (e) { }\r\n' ];
2498
2499
// Merge this module
2500
// NOTE: "smbios" module makes some non-AI Linux segfault, only include for IA platforms.
@@ -2513,19 +2517,15 @@ function CreateMeshCentralServer(config, args) {
2517
}
2518
2519
// Merge this module to recovery modules if needed
2516
- if (modulesAdd['windows-recovery'] != null)
2517
- {
2518
- if ((moduleName == 'win-console') || (moduleName == 'win-message-pump') || (moduleName == 'win-terminal') || (moduleName == 'win-virtual-terminal'))
2519
- {
2520
+ if (modulesAdd['windows-recovery'] != null) {
2521
+ if ((moduleName == 'win-console') || (moduleName == 'win-message-pump') || (moduleName == 'win-terminal') || (moduleName == 'win-virtual-terminal')) {
2522
modulesAdd['windows-recovery'].push(...moduleData);
2523
}
2524
}
2525
2526
// Merge this module to agent recovery modules if needed
2525
- if (modulesAdd['windows-agentrecovery'] != null)
2526
- {
2527
- if ((moduleName == 'win-console') || (moduleName == 'win-message-pump') || (moduleName == 'win-terminal') || (moduleName == 'win-virtual-terminal'))
2528
- {
2527
+ if (modulesAdd['windows-agentrecovery'] != null) {
2528
+ if ((moduleName == 'win-console') || (moduleName == 'win-message-pump') || (moduleName == 'win-terminal') || (moduleName == 'win-virtual-terminal')) {
2529
modulesAdd['windows-agentrecovery'].push(...moduleData);
2530
}
2531
}
@@ -2551,11 +2551,12 @@ function CreateMeshCentralServer(config, args) {
2551
obj.defaultMeshCoresHash[i] = obj.crypto.createHash('sha384').update(obj.defaultMeshCores[i]).digest('binary');
2552
obj.debug('main', 'Core module ' + i + ' is ' + obj.defaultMeshCores[i].length + ' bytes.');
2553
2554
+ // These lines will write all modules to files. Great for debugging.
2555
//console.log('Core module ' + i + ' is ' + obj.defaultMeshCores[i].length + ' bytes.'); // DEBUG, Print the core size
2556
//obj.fs.writeFile("C:\\temp\\" + i + ".js", obj.defaultMeshCores[i].slice(4), function () { }); // DEBUG, Write the core to file
2557
2558
// Compress the mesh cores with DEFLATE
2558
- var callback = function MeshCoreDeflateCb(err, buffer) { if (err == null) { obj.defaultMeshCoresDeflate[MeshCoreDeflateCb.i] = buffer; } }
2559
+ const callback = function MeshCoreDeflateCb(err, buffer) { if (err == null) { obj.defaultMeshCoresDeflate[MeshCoreDeflateCb.i] = buffer; } }
2560
callback.i = i;
2561
require('zlib').deflate(obj.defaultMeshCores[i], { level: require('zlib').Z_BEST_COMPRESSION }, callback);
2562
}