nix develop and print-dev-env crash if derivation variables contain ASCII control characters #991

Closed
opened 2025-09-11 16:20:31 +00:00 by qyriad · 1 comment
Owner

Describe the bug

When Lix produces the JSON file for print-dev-env/develop, it escapes a lot of things in Bash variable values, but not ASCII control characters. Since ASCII control characters aren't valid JSON (apparently), parsing that JSON file errors:

$ nix print-dev-env --impure -E $'with import <nixpkgs> { }; hello.overrideAttrs { ANSI_BOLD = "\x1b[1m"; }'

errors with:

error:
       … while parsing a build environment file

       error: failed to parse JSON: [json.exception.parse_error.101] parse error at line 104, column 49: syntax error while parsing value - invalid string: control character U+001B (ESC) must be escaped to \u001B; last read: '"<U+001B>'

nix --version output

nix (Lix, like Nix) 2.94.0-dev-pre20250829-f4bdddf
System type: x86_64-linux
Additional system types: i686-linux, x86_64-v1-linux, x86_64-v2-linux, x86_64-v3-linux, x86_64-v4-linux
Features: gc, signed-caches
System configuration file: /etc/nix/nix.conf
User configuration files: /home/qyriad/.config/nix/nix.conf:/nix/store/h7v2v40kqbwyp2dcf30pgx4byqlw71fa-plasma-workspace-6.4.4/etc/xdg/nix/nix.conf:/nix/store/llr1xgc0jxd51b1gynwwa7a31nsc50z3-kglobalacceld-6.4.4/etc/xdg/nix/nix.conf:/nix/store/wr467h6mhsalyq2niwgvbcggfx03xab2-baloo-6.17.0/etc/xdg/nix/nix.conf:/home/qyriad/.config/kdedefaults/nix/nix.conf:/nix/store/h7v2v40kqbwyp2dcf30pgx4byqlw71fa-plasma-workspace-6.4.4/etc/xdg/nix/nix.conf:/nix/store/llr1xgc0jxd51b1gynwwa7a31nsc50z3-kglobalacceld-6.4.4/etc/xdg/nix/nix.conf:/nix/store/wr467h6mhsalyq2niwgvbcggfx03xab2-baloo-6.17.0/etc/xdg/nix/nix.conf:/home/qyriad/.config/kdedefaults/nix/nix.conf:/etc/xdg/nix/nix.conf:/home/qyriad/.nix-profile/etc/xdg/nix/nix.conf:/nix/profile/etc/xdg/nix/nix.conf:/home/qyriad/.local/state/nix/profile/etc/xdg/nix/nix.conf:/etc/profiles/per-user/qyriad/etc/xdg/nix/nix.conf:/nix/var/nix/profiles/default/etc/xdg/nix/nix.conf:/run/current-system/sw/etc/xdg/nix/nix.conf
Store directory: /nix/store
State directory: /nix/var/nix
Data directory: /nix/store/vnkbnsf3k616j7ck0k6vr267mjif4yj4-lix-2.94.0-dev-pre20250829-f4bdddf/share

Additional context

Fix incoming.

## Describe the bug When Lix produces the JSON file for `print-dev-env`/`develop`, it escapes a lot of things in Bash variable values, but not ASCII control characters. Since ASCII control characters aren't valid JSON (apparently), parsing that JSON file errors: ```bash $ nix print-dev-env --impure -E $'with import <nixpkgs> { }; hello.overrideAttrs { ANSI_BOLD = "\x1b[1m"; }' ``` errors with: ``` error: … while parsing a build environment file error: failed to parse JSON: [json.exception.parse_error.101] parse error at line 104, column 49: syntax error while parsing value - invalid string: control character U+001B (ESC) must be escaped to \u001B; last read: '"<U+001B>' ``` ## `nix --version` output ``` nix (Lix, like Nix) 2.94.0-dev-pre20250829-f4bdddf System type: x86_64-linux Additional system types: i686-linux, x86_64-v1-linux, x86_64-v2-linux, x86_64-v3-linux, x86_64-v4-linux Features: gc, signed-caches System configuration file: /etc/nix/nix.conf User configuration files: /home/qyriad/.config/nix/nix.conf:/nix/store/h7v2v40kqbwyp2dcf30pgx4byqlw71fa-plasma-workspace-6.4.4/etc/xdg/nix/nix.conf:/nix/store/llr1xgc0jxd51b1gynwwa7a31nsc50z3-kglobalacceld-6.4.4/etc/xdg/nix/nix.conf:/nix/store/wr467h6mhsalyq2niwgvbcggfx03xab2-baloo-6.17.0/etc/xdg/nix/nix.conf:/home/qyriad/.config/kdedefaults/nix/nix.conf:/nix/store/h7v2v40kqbwyp2dcf30pgx4byqlw71fa-plasma-workspace-6.4.4/etc/xdg/nix/nix.conf:/nix/store/llr1xgc0jxd51b1gynwwa7a31nsc50z3-kglobalacceld-6.4.4/etc/xdg/nix/nix.conf:/nix/store/wr467h6mhsalyq2niwgvbcggfx03xab2-baloo-6.17.0/etc/xdg/nix/nix.conf:/home/qyriad/.config/kdedefaults/nix/nix.conf:/etc/xdg/nix/nix.conf:/home/qyriad/.nix-profile/etc/xdg/nix/nix.conf:/nix/profile/etc/xdg/nix/nix.conf:/home/qyriad/.local/state/nix/profile/etc/xdg/nix/nix.conf:/etc/profiles/per-user/qyriad/etc/xdg/nix/nix.conf:/nix/var/nix/profiles/default/etc/xdg/nix/nix.conf:/run/current-system/sw/etc/xdg/nix/nix.conf Store directory: /nix/store State directory: /nix/var/nix Data directory: /nix/store/vnkbnsf3k616j7ck0k6vr267mjif4yj4-lix-2.94.0-dev-pre20250829-f4bdddf/share ``` ## Additional context Fix incoming.
qyriad self-assigned this 2025-09-11 16:20:31 +00:00
Member

This issue was mentioned on Gerrit on the following CLs:

  • commit message in cl/4155 ("nix3-develop: correctly escape ASCII control characters for JSON")
  • commit message in cl/4580 ("nix3-develop: correctly escape ASCII control characters for JSON")
<!-- GERRIT_LINKBOT: {"cls": [{"backlink": "https://gerrit.lix.systems/c/lix/+/4155", "number": 4155, "kind": "commit message"}, {"backlink": "https://gerrit.lix.systems/c/lix/+/4580", "number": 4580, "kind": "commit message"}], "cl_meta": {"4155": {"change_title": "nix3-develop: correctly escape ASCII control characters for JSON"}, "4580": {"change_title": "nix3-develop: correctly escape ASCII control characters for JSON"}}} --> This issue was mentioned on Gerrit on the following CLs: * commit message in [cl/4155](https://gerrit.lix.systems/c/lix/+/4155) ("nix3-develop: correctly escape ASCII control characters for JSON") * commit message in [cl/4580](https://gerrit.lix.systems/c/lix/+/4580) ("nix3-develop: correctly escape ASCII control characters for JSON")
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lix-project/lix#991
No description provided.