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": []
+ }
+ ],
+ },
]);