1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-06-09 17:46:29 +09:00

lib/strings: Zero‐pad hex digits in escapeC

lib.strings.escapeC produces single‐digit hexadecimal strings for
character values ≤ 15, which results in an ambiguity. If the following
character is a hex digit, it will be interpreted as being part of the
escape sequence.

systemd, which also relies on C‐style escape sequences, does not
decode single‐digit sequences at all, even if unambiguous.

Padding the hexadecimal string with "0" avoids this problem.
This commit is contained in:
Mikael Voss 2025-04-18 13:41:53 +02:00
parent 76614a7c50
commit 487a002c63
No known key found for this signature in database
2 changed files with 7 additions and 3 deletions

View file

@ -998,7 +998,11 @@ rec {
:::
*/
escapeC = list: replaceStrings list (map (c: "\\x${toLower (lib.toHexString (charToInt c))}") list);
escapeC =
list:
replaceStrings list (
map (c: "\\x${fixedWidthString 2 "0" (toLower (lib.toHexString (charToInt c)))}") list
);
/**
Escape the `string` so it can be safely placed inside a URL

View file

@ -851,8 +851,8 @@ runTests {
};
testEscapeC = {
expr = strings.escapeC [ " " ] "Hello World";
expected = "Hello\\x20World";
expr = strings.escapeC [ "\n" " " ] "Hello World\n";
expected = "Hello\\x20World\\x0a";
};
testEscapeURL = testAllTrue [