On Fri, 15 Jul 2016 17:51:10 +0200
Jiri Pirko <j...@mellanox.com> wrote:

> Fri, Jul 15, 2016 at 09:29:55AM CEST, jo...@kernel.org wrote:
> >Jirka reported that python code returns all arrays as strings.
> >This makes impossible to get all items for byte array tracepoint
> >field containing 0x00 value item.
> >
> >Fixing this by scanning full length of the array and returning
> >it as PyByteArray object in case non printable byte is found.
> >
> >Cc: Steven Rostedt (Red Hat) <rost...@goodmis.org>
> >Cc: Jiri Pirko <j...@mellanox.com>
> >Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on...@git.kernel.org
> >Signed-off-by: Jiri Olsa <jo...@kernel.org>
> >---
> > .../util/scripting-engines/trace-event-python.c    | 37 
> > ++++++++++++++++++----
> > 1 file changed, 31 insertions(+), 6 deletions(-)
> >
> >diff --git a/tools/perf/util/scripting-engines/trace-event-python.c 
> >b/tools/perf/util/scripting-engines/trace-event-python.c
> >index 6ac6b7a33f42..1bc995de5a6d 100644
> >--- a/tools/perf/util/scripting-engines/trace-event-python.c
> >+++ b/tools/perf/util/scripting-engines/trace-event-python.c
> >@@ -386,6 +386,19 @@ exit:
> >     return pylist;
> > }
> > 
> >+static int is_printable_array(char *p, unsigned int len)
> >+{
> >+    unsigned int i;
> >+
> >+    if (p[len - 1] == 0)
> >+            len--;
> >+
> >+    for (i = 0; i < len - 1; i++)
> >+            if (!isprint(p[i]) && !isspace(p[i]))
> >+                    return 0;  
> 
> 
> for "AA\1\0" this returns "1" although that should return "0".
> 
> orig len 4
> decremented len 3
> for:
> 0 1
> 
> index 2 would not be inspected. Or am I missing something?
> 
> I think that the for check should be "i < len"

Yes it should be. I think we got the two solutions mixed up.

With the above len--, it should be i < len, but when we did the check
for zero at the end, we needed the i < len - 1

-- Steve

Reply via email to