diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index 7599aaca..f5c056c3 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -173,7 +173,6 @@ const Categories = [ "Tail", "Count occurrences", "Expand alphabet range", - "Parse escaped string", "Drop bytes", "Take bytes", "Pad lines", diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 417dea3a..fb076bd1 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -3206,13 +3206,6 @@ const OperationConfig = { } ] }, - "Parse escaped string": { - description: "Replaces escaped characters with the bytes they represent.

e.g.Hello\\nWorld becomes Hello
World
", - run: StrUtils.runParseEscapedString, - inputType: "string", - outputType: "string", - args: [] - }, "TCP/IP Checksum": { description: "Calculates the checksum for a TCP (Transport Control Protocol) or IP (Internet Protocol) header from an input of raw bytes.", run: Checksum.runTCPIP, diff --git a/src/core/operations/StrUtils.js b/src/core/operations/StrUtils.js index 58b7e7a7..5d0c0a43 100755 --- a/src/core/operations/StrUtils.js +++ b/src/core/operations/StrUtils.js @@ -458,6 +458,9 @@ const StrUtils = { {"escaped": "\\\"", "unescaped": "\""}, {"escaped": "\\n", "unescaped": "\n"}, {"escaped": "\\r", "unescaped": "\r"}, + {"escaped": "\\t", "unescaped": "\t"}, + {"escaped": "\\b", "unescaped": "\b"}, + {"escaped": "\\f", "unescaped": "\f"}, ], /** @@ -497,7 +500,7 @@ const StrUtils = { * World` */ runUnescape: function(input, args) { - return StrUtils._replaceByKeys(Utils.parseEscapedChars(input), "escaped", "unescaped"); + return StrUtils._replaceByKeys(input, "escaped", "unescaped"); }, /** @@ -514,6 +517,7 @@ const StrUtils = { */ _replaceByKeys: function(input, patternKey, replacementKey) { let output = input; + if (patternKey === "escaped") output = Utils.parseEscapedChars(input); // I've wrapped this to catch the \\x encoded characters StrUtils.ESCAPE_REPLACEMENTS.forEach(replacement => { output = output.split(replacement[patternKey]).join(replacement[replacementKey]); }); diff --git a/test/tests/operations/StrUtils.js b/test/tests/operations/StrUtils.js index 478ab1f3..159916c7 100644 --- a/test/tests/operations/StrUtils.js +++ b/test/tests/operations/StrUtils.js @@ -232,4 +232,48 @@ TestRegister.addTests([ } ], }, + { + name: "Escape String: quotes", + input: "Hello \"World\"! Escape 'these' quotes.", + expectedOutput: "Hello \\\"World\\\"! Escape \\'these\\' quotes.", + recipeConfig: [ + { + "op": "Escape String", + "args": [] + } + ], + }, + { + name: "Escape String: special characters", + input: "Fizz & buzz\n\ttabbed newline\rcarriage returned line\nbackspace character: \"\" form feed character: \" \"", + expectedOutput: "Fizz & buzz\\n\\ttabbed newline\\rcarriage returned line\\nbackspace character: \\\"\\b\\\" form feed character: \\\"\\f\\\"", + recipeConfig: [ + { + "op": "Escape String", + "args": [] + } + ], + }, + { + name: "Unescape String: quotes", + input: "Hello \\\"World\\\"! Escape \\'these\\' quotes.", + expectedOutput: "Hello \"World\"! Escape 'these' quotes.", + recipeConfig: [ + { + "op": "Unescape String", + "args": [] + } + ], + }, + { + name: "Unescape String: special characters", + input: "Fizz \x26 buzz\\n\\ttabbed newline\\rcarriage returned line\\nbackspace character: \\\"\\b\\\" form feed character: \\\"\\f\\\"", + expectedOutput: "Fizz & buzz\n\ttabbed newline\rcarriage returned line\nbackspace character: \"\" form feed character: \" \"", + recipeConfig: [ + { + "op": "Unescape String", + "args": [] + } + ], + }, ]);