Em Mon, Sep 28, 2020 at 10:11:35PM +0200, Jiri Olsa escreveu:
Hagen reported broken strings in python3 tracepoint scripts:
make PYTHON=python3 ./perf record -e sched:sched_switch -a -- sleep 5 ./perf script --gen-script py ./perf script -s ./perf-script.py
[..] sched__sched_switch 7 563231.759525792 0 swapper \ prev_comm=bytearray(b'swapper/7\x00\x00\x00\x00\x00\x00\x00'), \ prev_pid=0, prev_prio=120, prev_state=, next_comm=bytearray(b'mutex-thread-co\x00'),
The problem is in is_printable_array function that does not take zero byte into account and claim such string as not printable, so the code will create byte array instead of string.
Thanks, tested and applied.
- Arnaldo
Cc: stable@vger.kernel.org Fixes: 249de6e07458 ("perf script python: Fix string vs byte array resolving") Tested-by: Hagen Paul Pfeifer hagen@jauu.net Signed-off-by: Jiri Olsa jolsa@kernel.org
tools/perf/util/print_binary.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/print_binary.c b/tools/perf/util/print_binary.c index 599a1543871d..13fdc51c61d9 100644 --- a/tools/perf/util/print_binary.c +++ b/tools/perf/util/print_binary.c @@ -50,7 +50,7 @@ int is_printable_array(char *p, unsigned int len) len--;
- for (i = 0; i < len; i++) {
- for (i = 0; i < len && p[i]; i++) { if (!isprint(p[i]) && !isspace(p[i])) return 0; }
-- 2.26.2