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@xxxxxxxxxxxxxxx > Fixes: 249de6e07458 ("perf script python: Fix string vs byte array resolving") > Tested-by: Hagen Paul Pfeifer <hagen@xxxxxxxx> > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- > 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 > -- - Arnaldo