Messages in this thread Patch in this message | | | From | Arun Kalyanasundaram <> | Subject | [PATCH 1/1] perf script python: Garbled text in tracepoint fields | Date | Fri, 11 Aug 2017 13:38:09 -0700 |
| |
Pass the exact length of the string to is_printable_array instead of the entire field size.
Signed-off-by: Arun Kalyanasundaram <arunkaly@google.com> --- tools/perf/util/scripting-engines/trace-event-python.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index c7187f067d31..45cc0c6635bb 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -601,6 +601,7 @@ static void python_process_tracepoint(struct perf_sample *sample, for (field = event->format.fields; field; field = field->next) { unsigned int offset, len; unsigned long long val; + char *end_ptr = NULL; if (field->flags & FIELD_IS_ARRAY) { offset = field->offset; @@ -612,8 +613,12 @@ static void python_process_tracepoint(struct perf_sample *sample, len = offset >> 16; offset &= 0xffff; } - if (field->flags & FIELD_IS_STRING && - is_printable_array(data + offset, len)) { + /* field may contain unused chars after the null char */ + if (field->flags & FIELD_IS_STRING) + end_ptr = memchr(data + offset, '\0', len); + if (end_ptr && + is_printable_array(data + offset, + (int)(end_ptr - ((char *)data + offset)) + 1)) { obj = PyString_FromString((char *) data + offset); } else { obj = PyByteArray_FromStringAndSize((const char *) data + offset, len); -- 2.14.0.434.g98096fd7a8-goog
| |