aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Build/Step/ConfigHeader.zig
diff options
context:
space:
mode:
authorMrDmitry <aidenhaledev@gmail.com>2024-01-25 22:03:01 -0500
committerMrDmitry <aidenhaledev@gmail.com>2024-01-26 13:33:17 -0500
commit3e6f07e617707ddebab138d9d3208b69b43065eb (patch)
tree0e4997db640794013e08fbae89662963e33a2049 /lib/std/Build/Step/ConfigHeader.zig
parent0307f8771537e01627faa34352b9b4abc3bd073c (diff)
downloadzig-3e6f07e617707ddebab138d9d3208b69b43065eb.tar.gz
zig-3e6f07e617707ddebab138d9d3208b69b43065eb.zip
Add escaped character processing
Diffstat (limited to 'lib/std/Build/Step/ConfigHeader.zig')
-rw-r--r--lib/std/Build/Step/ConfigHeader.zig24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/std/Build/Step/ConfigHeader.zig b/lib/std/Build/Step/ConfigHeader.zig
index 438805508f..f1d03d2361 100644
--- a/lib/std/Build/Step/ConfigHeader.zig
+++ b/lib/std/Build/Step/ConfigHeader.zig
@@ -633,6 +633,10 @@ fn expand_variables_cmake(
continue :loop;
},
+ '\\' => {
+ // backslash is not considered a special character
+ continue :loop;
+ },
else => {},
}
@@ -811,3 +815,23 @@ test "expand_variables_cmake edge cases" {
try std.testing.expectError(error.InvalidCharacter, testReplaceVariables(allocator, "${str$ing}", "", values));
try std.testing.expectError(error.InvalidCharacter, testReplaceVariables(allocator, "${str@ing}", "", values));
}
+
+test "expand_variables_cmake escaped characters" {
+ const allocator = std.testing.allocator;
+ var values = std.StringArrayHashMap(Value).init(allocator);
+ defer values.deinit();
+
+ try values.putNoClobber("string", Value{ .string = "text" });
+
+ // backslash is an invalid character for @ lookup
+ try testReplaceVariables(allocator, "\\@string\\@", "\\@string\\@", values);
+
+ // backslash is preserved, but doesn't affect ${} variable expansion
+ try testReplaceVariables(allocator, "\\${string}", "\\text", values);
+
+ // backslash breaks ${} opening bracket identification
+ try testReplaceVariables(allocator, "$\\{string}", "$\\{string}", values);
+
+ // backslash is skipped when checking for invalid characters, yet it mangles the key
+ try testReplaceVariables(allocator, "${string\\}", "", values);
+}