This should fix a nasty issue with r2r, where tests never terminated.
That was caused by the jq process waiting indefinitely for input from
fd0, because the other end of the pipe was never closed.
Indeed r2r_subprocess_start forks and closes known unnecessary opened fd
in the child process, however it does not consider also all the other
file descriptors that could have been created by other threads
simultaneously. As fd are per-process and not per-thread, file
descriptors created by other threads while doing e.g. pipe to spawn a
separate jq process will clutter other threads (and following jq
processes) as well. If two jq processes happen to keep a fd to the other
end of the pipe for the fd0 of the other jq process, none of them
terminates, thus they never close those spurious file descriptors,
causing tests to hang.
This tries to fix the issue by making sure only one thread at a time can
start a subprocess. In this way no other FDs can be created while a
thread is in the middle of r2r_subprocess_start.
* Unwrap quoted strings when passing args to newer handlers ##newshell
When a user wraps an argument, it means like in SH that he wants the
command to consider the argument as one single arg, even if composed by
multiple words. The same applies for r2newshell. So far we did not
unwrap quoted strings to maintain compatibility with old shell, but
doing this unwrapping is one of the nice feature of newshell.
* Add tests for quoting/unquoting
* Adjust tests with `w` for newshell/oldshell
* Fix asm/anal IT block for ARM
* Fix indent + missing spaces
* Fix ARM asm patch breaking test
* Remove forgotten debug printf
* Moved anal patch to separate function anal_ITblock()
* Changed to RIOBind + fix code based on comments
* Fix issue with io/rasm
* Switched to HT, still need to invalidate HT
* Add routine to track and clean ITblock
Co-authored-by: Riccardo Schirone <ret2libc@users.noreply.github.com>
* Convert R_CMD_DESC_TYPE_GROUP to INNER
* Avoid confusing "group_" prefixes by splitting cmddesc ##newshell
Create "group" command descriptor and give them their own help, to avoid
dupping fields such as group_summary, group_args_str, etc. By having a
separate help structure for the grouping node we make the cmd_api code
easier because it doesn't need to distinguish between
group_summary/summary, group_args_str/args_str, etc. and we avoid few
bytes for each command descriptor help structure, since most of them
did not use group_* fields.
* Other simplification in cmd_api due to split GROUP/exec cb.
* Handle R_CMD_DESC_TYPE_GROUP in r_cmd_call_parsed_args
* Better use of the R_SOCKET_PROTO_DEFAULT and add _NONE ##http
* Fix regressions in: r2 -C and =+ ##r2pipe
Introduced in 04edfa82c1
* Implement sleep command ##shell
* Add tests for the webserver and remoting
* Implement daemon directive in rarun2, fix http test ##rarun2
* Fix socket timeout on Windows (patch by @GustavoLCR) ##socket
* Missing http.root is not a reason to not start the webserver ##http
* Fix r2 -C, =!=0, replace curl with r2 in the webserver test ##http
* Honor anal.in/from/to in aae, optimize db/formats/mach0/thumb ##anal
* Bug fixes and performance improvements
Co-authored-by: pancake <pancake@nopcode.org>
* Mark http test as broken until properly fixed
* Fix return type of `signal`
* Mark V850 pseudo test as broken
Co-authored-by: Anton Kochkov <xvilka@gmail.com>
* Add GROUP RCmdDesc type and fix where the args_str is shown
* Adjust color of `[?]`
* Differentiate between cmd<?> and cmd[?]
<?> when cmd is not valid by itself
[?] when cmd is valid but there are also other sub-commands available
* Fix usage for commands like `w` that are both commands and groups
* Do not automatically switch to detail=2 for leaf commands
* Fix test due to change in `?`/`??` behaviour
* x86 cmp/sub esil: Support bitsize of 64
* Fix pij tests
* Don't shift if bitsize is 0
* Don't esilprint anything if bitsize is invalid
* Use %u instead of %d
* Check whether bitsize is 0
Sometimes argument could be "value$", but this commits ensures that if
the argument is "value$(...)", then `$(...)` is considered as a
cmd_substitution_arg.