diff options
| author | MrDmitry <aidenhaledev@gmail.com> | 2024-01-25 22:03:01 -0500 |
|---|---|---|
| committer | MrDmitry <aidenhaledev@gmail.com> | 2024-01-26 13:33:17 -0500 |
| commit | 3e6f07e617707ddebab138d9d3208b69b43065eb (patch) | |
| tree | 0e4997db640794013e08fbae89662963e33a2049 /lib/std/Build/Step/ConfigHeader.zig | |
| parent | 0307f8771537e01627faa34352b9b4abc3bd073c (diff) | |
| download | zig-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.zig | 24 |
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); +} |
