From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753788AbdHKUiW (ORCPT ); Fri, 11 Aug 2017 16:38:22 -0400 Received: from mail-pf0-f178.google.com ([209.85.192.178]:36171 "EHLO mail-pf0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753648AbdHKUiS (ORCPT ); Fri, 11 Aug 2017 16:38:18 -0400 From: Arun Kalyanasundaram To: Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Ingo Molnar , Alexander Shishkin , Arun Kalyanasundaram , Jiri Olsa , Daniel Borkmann , "David S . Miller" , SeongJae Park , davidcc@google.com, Stephane Eranian , Arun Kalyanasundaram Subject: [PATCH 1/1] perf script python: Garbled text in tracepoint fields Date: Fri, 11 Aug 2017 13:38:09 -0700 Message-Id: <20170811203809.120130-2-arunkaly@google.com> X-Mailer: git-send-email 2.14.0.434.g98096fd7a8-goog In-Reply-To: <20170811203809.120130-1-arunkaly@google.com> References: <20170811203809.120130-1-arunkaly@google.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Pass the exact length of the string to is_printable_array instead of the entire field size. Signed-off-by: Arun Kalyanasundaram --- 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