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:
parent
76614a7c50
commit
487a002c63
2 changed files with 7 additions and 3 deletions
|
@ -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
|
||||
|
|
|
@ -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 [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue