| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 'use strict';// See http://www.robvanderwoude.com/escapechars.phpconst metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;function escapeCommand(arg) {    // Escape meta chars    arg = arg.replace(metaCharsRegExp, '^$1');    return arg;}function escapeArgument(arg, doubleEscapeMetaChars) {    // Convert to string    arg = `${arg}`;    // Algorithm below is based on https://qntm.org/cmd    // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input    // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information    // Sequence of backslashes followed by a double quote:    // double up all the backslashes and escape the double quote    arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"');    // Sequence of backslashes followed by the end of the string    // (which will become a double quote later):    // double up all the backslashes    arg = arg.replace(/(?=(\\+?)?)\1$/, '$1$1');    // All other backslashes occur literally    // Quote the whole thing:    arg = `"${arg}"`;    // Escape meta chars    arg = arg.replace(metaCharsRegExp, '^$1');    // Double escape meta chars if necessary    if (doubleEscapeMetaChars) {        arg = arg.replace(metaCharsRegExp, '^$1');    }    return arg;}module.exports.command = escapeCommand;module.exports.argument = escapeArgument;
 |