fix: printf %b support and no-progress guard against format-recycle hangs#50
Merged
Conversation
…angs printf recycles its format while arguments remain, but a directive the format regex doesn't recognize consumes nothing — so printf "%b" "x" (or any unknown directive with an argument) looped forever, hanging the host process. %b is now a real directive sharing echo -e's escape dialect, and a recycle pass that consumes no arguments stops after one iteration instead of recursing. Unknown directives pass through literally where bash errors; the divergence is noted in the tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FpxHS5iGm9ktgpnL9QZu9x
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Found while running agents against the sandbox:
printf "%b" "A\xffB\n"— an ordinary command any agent will eventually type — hungJustBash.exec/2forever. An untrusted script could take down the host with one line.printfrecycles its format string while arguments remain, but%bwas not in the format regex, so each recycle pass consumed zero arguments and recursed with the same list. The same hang fired for any unrecognized directive with at least one argument (%q,%v,%i, …).Two changes:
%bis now a real directive, sharingecho -e's escape dialect (\n,\t,\xHH,\0NNN— exposed asEcho.interpret_escapes/1), soprintf "%b" "A\xffB\n"emits the raw bytes bash does.invalid format character; the divergence is noted in the tests.🤖 Generated with Claude Code
https://claude.ai/code/session_01FpxHS5iGm9ktgpnL9QZu9x