Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1440079 > unrolled thread

[PATCH 10/10] perf script python: Fix string vs byte array resolving

Started byJiri Olsa <jolsa@kernel.org>
First post2016-07-10 13:10 +0200
Last post2016-07-13 11:10 +0200
Articles 11 — 4 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 10/10] perf script python: Fix string vs byte array resolving Jiri Olsa <jolsa@kernel.org> - 2016-07-10 13:10 +0200
    Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-11 18:00 +0200
      Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-12 10:20 +0200
        Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 14:40 +0200
          Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-12 15:00 +0200
            Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 15:10 +0200
              Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-12 15:40 +0200
                Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 15:50 +0200
                  Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-07-12 21:30 +0200
                    Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Steven Rostedt <rostedt@goodmis.org> - 2016-07-12 21:50 +0200
                      Re: [PATCH 10/10] perf script python: Fix string vs byte array  resolving Jiri Olsa <jolsa@redhat.com> - 2016-07-13 11:10 +0200

#1440079 — [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromJiri Olsa <jolsa@kernel.org>
Date2016-07-10 13:10 +0200
Subject[PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rTkMy-8fe-35@gated-at.bofh.it>
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) <rostedt@goodmis.org>
Reported-and-tested-by: Jiri Pirko <jiri@mellanox.com>
Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 .../util/scripting-engines/trace-event-python.c    | 34 ++++++++++++++++++----
 1 file changed, 28 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 ff134700bf30..75e9790ebb96 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -386,6 +386,16 @@ exit:
 	return pylist;
 }
 
+static int is_printable_array(char *p, unsigned int len)
+{
+	unsigned int i;
+
+	for (i = 0; i < len; i++)
+		if (!isprint(p[i]) && !isspace(p[i]))
+			return 0;
+
+	return 1;
+}
 
 static void python_process_tracepoint(struct perf_sample *sample,
 				      struct perf_evsel *evsel,
@@ -457,14 +467,26 @@ static void python_process_tracepoint(struct perf_sample *sample,
 		pydict_set_item_string_decref(dict, "common_callchain", callchain);
 	}
 	for (field = event->format.fields; field; field = field->next) {
-		if (field->flags & FIELD_IS_STRING) {
-			int offset;
+		unsigned int offset, len;
+		unsigned long long val;
+
+		if (field->flags & FIELD_IS_ARRAY) {
+			offset = field->offset;
+			len    = field->size;
 			if (field->flags & FIELD_IS_DYNAMIC) {
-				offset = *(int *)(data + field->offset);
+				val     = pevent_read_number(scripting_context->pevent,
+							     data + offset, len);
+				offset  = val;
+				len     = offset >> 16;
 				offset &= 0xffff;
-			} else
-				offset = field->offset;
-			obj = PyString_FromString((char *)data + offset);
+			}
+			if (field->flags & FIELD_IS_STRING &&
+			    is_printable_array(data + offset, len)) {
+				obj = PyString_FromString((char *) data + offset);
+			} else {
+				obj = PyByteArray_FromStringAndSize((const char *) data + offset, len);
+				field->flags &= ~FIELD_IS_STRING;
+			}
 		} else { /* FIELD_IS_NUMERIC */
 			obj = get_field_numeric_entry(event, field, data);
 		}
-- 
2.4.11

[toc] | [next] | [standalone]


#1440730 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromSteven Rostedt <rostedt@goodmis.org>
Date2016-07-11 18:00 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rTLMK-CQ-29@gated-at.bofh.it>
In reply to#1440079
On Sun, 10 Jul 2016 13:08:02 +0200
Jiri Olsa <jolsa@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) <rostedt@goodmis.org>
> Reported-and-tested-by: Jiri Pirko <jiri@mellanox.com>
> Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  .../util/scripting-engines/trace-event-python.c    | 34 ++++++++++++++++++----
>  1 file changed, 28 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 ff134700bf30..75e9790ebb96 100644
> --- a/tools/perf/util/scripting-engines/trace-event-python.c
> +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> @@ -386,6 +386,16 @@ exit:
>  	return pylist;
>  }
>  
> +static int is_printable_array(char *p, unsigned int len)
> +{
> +	unsigned int i;
> +
> +	for (i = 0; i < len; i++)
> +		if (!isprint(p[i]) && !isspace(p[i]))
> +			return 0;

I believe this will return the wrong result if you pass in a string
that has '\0' in it. Try it out:

	char a[] = "hello";

	printf("a=%s is %d\n", a, is_printable_array(a, sizeof(a)));

and see what you get?

-- Steve

> +
> +	return 1;
> +}
>  
>  static void python_process_tracepoint(struct perf_sample *sample,
>  				      struct perf_evsel *evsel,
> @@ -457,14 +467,26 @@ static void python_process_tracepoint(struct perf_sample *sample,
>  		pydict_set_item_string_decref(dict, "common_callchain", callchain);
>  	}
>  	for (field = event->format.fields; field; field = field->next) {
> -		if (field->flags & FIELD_IS_STRING) {
> -			int offset;
> +		unsigned int offset, len;
> +		unsigned long long val;
> +
> +		if (field->flags & FIELD_IS_ARRAY) {
> +			offset = field->offset;
> +			len    = field->size;
>  			if (field->flags & FIELD_IS_DYNAMIC) {
> -				offset = *(int *)(data + field->offset);
> +				val     = pevent_read_number(scripting_context->pevent,
> +							     data + offset, len);
> +				offset  = val;
> +				len     = offset >> 16;
>  				offset &= 0xffff;
> -			} else
> -				offset = field->offset;
> -			obj = PyString_FromString((char *)data + offset);
> +			}
> +			if (field->flags & FIELD_IS_STRING &&
> +			    is_printable_array(data + offset, len)) {
> +				obj = PyString_FromString((char *) data + offset);
> +			} else {
> +				obj = PyByteArray_FromStringAndSize((const char *) data + offset, len);
> +				field->flags &= ~FIELD_IS_STRING;
> +			}
>  		} else { /* FIELD_IS_NUMERIC */
>  			obj = get_field_numeric_entry(event, field, data);
>  		}

[toc] | [prev] | [next] | [standalone]


#1441129 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromJiri Olsa <jolsa@redhat.com>
Date2016-07-12 10:20 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rU158-2lZ-19@gated-at.bofh.it>
In reply to#1440730
On Mon, Jul 11, 2016 at 11:54:52AM -0400, Steven Rostedt wrote:
> On Sun, 10 Jul 2016 13:08:02 +0200
> Jiri Olsa <jolsa@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) <rostedt@goodmis.org>
> > Reported-and-tested-by: Jiri Pirko <jiri@mellanox.com>
> > Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> >  .../util/scripting-engines/trace-event-python.c    | 34 ++++++++++++++++++----
> >  1 file changed, 28 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 ff134700bf30..75e9790ebb96 100644
> > --- a/tools/perf/util/scripting-engines/trace-event-python.c
> > +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> > @@ -386,6 +386,16 @@ exit:
> >  	return pylist;
> >  }
> >  
> > +static int is_printable_array(char *p, unsigned int len)
> > +{
> > +	unsigned int i;
> > +
> > +	for (i = 0; i < len; i++)
> > +		if (!isprint(p[i]) && !isspace(p[i]))
> > +			return 0;
> 
> I believe this will return the wrong result if you pass in a string
> that has '\0' in it. Try it out:
> 
> 	char a[] = "hello";
> 
> 	printf("a=%s is %d\n", a, is_printable_array(a, sizeof(a)));
> 
> and see what you get?

ugh, forgot the last 0 byte.. how about attached change?

I wonder it'd be less pain to present all arrays as
PyByteArray, it might be no difference for python
users anyway ;-)

thanks,
jirka


---
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 75e9790ebb96..9f810e6c739a 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -390,11 +390,13 @@ static int is_printable_array(char *p, unsigned int len)
 {
 	unsigned int i;
 
-	for (i = 0; i < len; i++)
+	/* Exclude the last zero byte of string.. */
+	for (i = 0; i < len - 1; i++)
 		if (!isprint(p[i]) && !isspace(p[i]))
 			return 0;
 
-	return 1;
+	/* ... and check its presence in the last byte. */
+	return p[i] == 0;
 }
 
 static void python_process_tracepoint(struct perf_sample *sample,

[toc] | [prev] | [next] | [standalone]


#1441312 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromSteven Rostedt <rostedt@goodmis.org>
Date2016-07-12 14:40 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rU58K-4Sa-15@gated-at.bofh.it>
In reply to#1441129
On Tue, 12 Jul 2016 10:11:56 +0200
Jiri Olsa <jolsa@redhat.com> wrote:


> ---
> diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
> index 75e9790ebb96..9f810e6c739a 100644
> --- a/tools/perf/util/scripting-engines/trace-event-python.c
> +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> @@ -390,11 +390,13 @@ static int is_printable_array(char *p, unsigned int len)
>  {
>  	unsigned int i;
>  
> -	for (i = 0; i < len; i++)
> +	/* Exclude the last zero byte of string.. */
> +	for (i = 0; i < len - 1; i++)
>  		if (!isprint(p[i]) && !isspace(p[i]))
>  			return 0;
>  
> -	return 1;
> +	/* ... and check its presence in the last byte. */
> +	return p[i] == 0;
>  }
>  

Of course this fails on:

	is_printable_array(a, strlen(a));

because the last byte wont be 0. What about:

	for (i = 0; i < len; i++)
		if (!isprint(p[i]) && !isspace(p[i]))
			break;

	return i == len ||
		(i == len - 1 && p[i] == 0);

-- Steve

[toc] | [prev] | [next] | [standalone]


#1441325 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromJiri Olsa <jolsa@redhat.com>
Date2016-07-12 15:00 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rU5s5-51i-9@gated-at.bofh.it>
In reply to#1441312
On Tue, Jul 12, 2016 at 08:37:28AM -0400, Steven Rostedt wrote:
> On Tue, 12 Jul 2016 10:11:56 +0200
> Jiri Olsa <jolsa@redhat.com> wrote:
> 
> 
> > ---
> > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
> > index 75e9790ebb96..9f810e6c739a 100644
> > --- a/tools/perf/util/scripting-engines/trace-event-python.c
> > +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> > @@ -390,11 +390,13 @@ static int is_printable_array(char *p, unsigned int len)
> >  {
> >  	unsigned int i;
> >  
> > -	for (i = 0; i < len; i++)
> > +	/* Exclude the last zero byte of string.. */
> > +	for (i = 0; i < len - 1; i++)
> >  		if (!isprint(p[i]) && !isspace(p[i]))
> >  			return 0;
> >  
> > -	return 1;
> > +	/* ... and check its presence in the last byte. */
> > +	return p[i] == 0;
> >  }
> >  
> 
> Of course this fails on:
> 
> 	is_printable_array(a, strlen(a));

hum, so string is not passed to trace buffer with 0 at the end?

I'll check the option of passing everything as PyByteArray.
If it's the same for user, we'll have simpler code in here.

> 
> because the last byte wont be 0. What about:
> 
> 	for (i = 0; i < len; i++)
> 		if (!isprint(p[i]) && !isspace(p[i]))
> 			break;
> 
> 	return i == len ||
> 		(i == len - 1 && p[i] == 0);

thanks,
jirka

[toc] | [prev] | [next] | [standalone]


#1441336 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromSteven Rostedt <rostedt@goodmis.org>
Date2016-07-12 15:10 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rU5BM-5k0-51@gated-at.bofh.it>
In reply to#1441325
On Tue, 12 Jul 2016 14:52:45 +0200
Jiri Olsa <jolsa@redhat.com> wrote:


> hum, so string is not passed to trace buffer with 0 at the end?

strlen() returns only the length of the string (minus the \0 at the
end).

> 
> I'll check the option of passing everything as PyByteArray.
> If it's the same for user, we'll have simpler code in here.
> 
> > 
> > because the last byte wont be 0. What about:
> > 
> > 	for (i = 0; i < len; i++)
> > 		if (!isprint(p[i]) && !isspace(p[i]))
> > 			break;
> > 
> > 	return i == len ||
> > 		(i == len - 1 && p[i] == 0);  

Or you can do:

	if (p[len - 1] == 0)
		len--;

	for (i = 0; i < len; i++)
		if (!isprint(p[i]) && !isspace(p[i]))
			return 0;
	return 1;

-- Steve

[toc] | [prev] | [next] | [standalone]


#1441352 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromJiri Olsa <jolsa@redhat.com>
Date2016-07-12 15:40 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rU64N-5xF-23@gated-at.bofh.it>
In reply to#1441336
On Tue, Jul 12, 2016 at 09:00:01AM -0400, Steven Rostedt wrote:
> On Tue, 12 Jul 2016 14:52:45 +0200
> Jiri Olsa <jolsa@redhat.com> wrote:
> 
> 
> > hum, so string is not passed to trace buffer with 0 at the end?
> 
> strlen() returns only the length of the string (minus the \0 at the
> end).

yea, is_printable_array is called here on tracepoint
data that's why I asked.. is 0 part of the string data
when stored within tracepoint?

> 
> > 
> > I'll check the option of passing everything as PyByteArray.
> > If it's the same for user, we'll have simpler code in here.
> > 
> > > 
> > > because the last byte wont be 0. What about:
> > > 
> > > 	for (i = 0; i < len; i++)
> > > 		if (!isprint(p[i]) && !isspace(p[i]))
> > > 			break;
> > > 
> > > 	return i == len ||
> > > 		(i == len - 1 && p[i] == 0);  
> 
> Or you can do:
> 
> 	if (p[len - 1] == 0)
> 		len--;
> 
> 	for (i = 0; i < len; i++)
> 		if (!isprint(p[i]) && !isspace(p[i]))
> 			return 0;
> 	return 1;

yep, seems good.. thanks

jirka

[toc] | [prev] | [next] | [standalone]


#1441365 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromSteven Rostedt <rostedt@goodmis.org>
Date2016-07-12 15:50 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rU6eu-5CJ-7@gated-at.bofh.it>
In reply to#1441352
On Tue, 12 Jul 2016 15:35:52 +0200
Jiri Olsa <jolsa@redhat.com> wrote:

> On Tue, Jul 12, 2016 at 09:00:01AM -0400, Steven Rostedt wrote:
> > On Tue, 12 Jul 2016 14:52:45 +0200
> > Jiri Olsa <jolsa@redhat.com> wrote:
> > 
> >   
> > > hum, so string is not passed to trace buffer with 0 at the end?  
> > 
> > strlen() returns only the length of the string (minus the \0 at the
> > end).  
> 
> yea, is_printable_array is called here on tracepoint
> data that's why I asked.. is 0 part of the string data
> when stored within tracepoint?

Good question. It may or may not (haven't looked at the code), but we
probably want to make sure that the function is robust enough for
either case.

> 
> >   
> > > 
> > > I'll check the option of passing everything as PyByteArray.
> > > If it's the same for user, we'll have simpler code in here.
> > >   
> > > > 
> > > > because the last byte wont be 0. What about:
> > > > 
> > > > 	for (i = 0; i < len; i++)
> > > > 		if (!isprint(p[i]) && !isspace(p[i]))
> > > > 			break;
> > > > 
> > > > 	return i == len ||
> > > > 		(i == len - 1 && p[i] == 0);    
> > 
> > Or you can do:
> > 
> > 	if (p[len - 1] == 0)
> > 		len--;
> > 
> > 	for (i = 0; i < len; i++)
> > 		if (!isprint(p[i]) && !isspace(p[i]))
> > 			return 0;
> > 	return 1;  
> 
> yep, seems good.. thanks
> 

OK, great!

-- Steve

[toc] | [prev] | [next] | [standalone]


#1441673 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-07-12 21:30 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rUbxv-Oh-13@gated-at.bofh.it>
In reply to#1441365
Em Tue, Jul 12, 2016 at 09:48:36AM -0400, Steven Rostedt escreveu:
> On Tue, 12 Jul 2016 15:35:52 +0200
> Jiri Olsa <jolsa@redhat.com> wrote:
> 
> > On Tue, Jul 12, 2016 at 09:00:01AM -0400, Steven Rostedt wrote:
> > > On Tue, 12 Jul 2016 14:52:45 +0200
> > > Jiri Olsa <jolsa@redhat.com> wrote:
> > > 
> > >   
> > > > hum, so string is not passed to trace buffer with 0 at the end?  
> > > 
> > > strlen() returns only the length of the string (minus the \0 at the
> > > end).  
> > 
> > yea, is_printable_array is called here on tracepoint
> > data that's why I asked.. is 0 part of the string data
> > when stored within tracepoint?
> 
> Good question. It may or may not (haven't looked at the code), but we
> probably want to make sure that the function is robust enough for
> either case.

Ok, applied and tested up to patch 9, waiting for this discussion to
come to an end to consider 10.

- Arnaldo
 
> > 
> > >   
> > > > 
> > > > I'll check the option of passing everything as PyByteArray.
> > > > If it's the same for user, we'll have simpler code in here.
> > > >   
> > > > > 
> > > > > because the last byte wont be 0. What about:
> > > > > 
> > > > > 	for (i = 0; i < len; i++)
> > > > > 		if (!isprint(p[i]) && !isspace(p[i]))
> > > > > 			break;
> > > > > 
> > > > > 	return i == len ||
> > > > > 		(i == len - 1 && p[i] == 0);    
> > > 
> > > Or you can do:
> > > 
> > > 	if (p[len - 1] == 0)
> > > 		len--;
> > > 
> > > 	for (i = 0; i < len; i++)
> > > 		if (!isprint(p[i]) && !isspace(p[i]))
> > > 			return 0;
> > > 	return 1;  
> > 
> > yep, seems good.. thanks
> > 
> 
> OK, great!
> 
> -- Steve

[toc] | [prev] | [next] | [standalone]


#1441689 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromSteven Rostedt <rostedt@goodmis.org>
Date2016-07-12 21:50 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rUbQR-Xn-1@gated-at.bofh.it>
In reply to#1441673
On Tue, 12 Jul 2016 16:27:16 -0300
Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Em Tue, Jul 12, 2016 at 09:48:36AM -0400, Steven Rostedt escreveu:
> > On Tue, 12 Jul 2016 15:35:52 +0200
> > Jiri Olsa <jolsa@redhat.com> wrote:
> >   
> > > On Tue, Jul 12, 2016 at 09:00:01AM -0400, Steven Rostedt wrote:  
> > > > On Tue, 12 Jul 2016 14:52:45 +0200
> > > > Jiri Olsa <jolsa@redhat.com> wrote:
> > > > 
> > > >     
> > > > > hum, so string is not passed to trace buffer with 0 at the end?    
> > > > 
> > > > strlen() returns only the length of the string (minus the \0 at the
> > > > end).    
> > > 
> > > yea, is_printable_array is called here on tracepoint
> > > data that's why I asked.. is 0 part of the string data
> > > when stored within tracepoint?  
> > 
> > Good question. It may or may not (haven't looked at the code), but we
> > probably want to make sure that the function is robust enough for
> > either case.  
> 
> Ok, applied and tested up to patch 9, waiting for this discussion to
> come to an end to consider 10.
> 
> - Arnaldo
>  
>

> > > Or you can do:
> > > > 
> > > > 	if (p[len - 1] == 0)
> > > > 		len--;
> > > > 
> > > > 	for (i = 0; i < len; i++)
> > > > 		if (!isprint(p[i]) && !isspace(p[i]))
> > > > 			return 0;
> > > > 	return 1;    
> > > 
> > > yep, seems good.. thanks
> > >   
> > 
> > OK, great!

I think Jiri is going to implement the above.

-- Steve

[toc] | [prev] | [next] | [standalone]


#1442246 — Re: [PATCH 10/10] perf script python: Fix string vs byte array resolving

FromJiri Olsa <jolsa@redhat.com>
Date2016-07-13 11:10 +0200
SubjectRe: [PATCH 10/10] perf script python: Fix string vs byte array resolving
Message-ID<rUol4-VT-19@gated-at.bofh.it>
In reply to#1441689
On Tue, Jul 12, 2016 at 03:48:10PM -0400, Steven Rostedt wrote:
> On Tue, 12 Jul 2016 16:27:16 -0300
> Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> 
> > Em Tue, Jul 12, 2016 at 09:48:36AM -0400, Steven Rostedt escreveu:
> > > On Tue, 12 Jul 2016 15:35:52 +0200
> > > Jiri Olsa <jolsa@redhat.com> wrote:
> > >   
> > > > On Tue, Jul 12, 2016 at 09:00:01AM -0400, Steven Rostedt wrote:  
> > > > > On Tue, 12 Jul 2016 14:52:45 +0200
> > > > > Jiri Olsa <jolsa@redhat.com> wrote:
> > > > > 
> > > > >     
> > > > > > hum, so string is not passed to trace buffer with 0 at the end?    
> > > > > 
> > > > > strlen() returns only the length of the string (minus the \0 at the
> > > > > end).    
> > > > 
> > > > yea, is_printable_array is called here on tracepoint
> > > > data that's why I asked.. is 0 part of the string data
> > > > when stored within tracepoint?  
> > > 
> > > Good question. It may or may not (haven't looked at the code), but we
> > > probably want to make sure that the function is robust enough for
> > > either case.  
> > 
> > Ok, applied and tested up to patch 9, waiting for this discussion to
> > come to an end to consider 10.
> > 
> > - Arnaldo
> >  
> >
> 
> > > > Or you can do:
> > > > > 
> > > > > 	if (p[len - 1] == 0)
> > > > > 		len--;
> > > > > 
> > > > > 	for (i = 0; i < len; i++)
> > > > > 		if (!isprint(p[i]) && !isspace(p[i]))
> > > > > 			return 0;
> > > > > 	return 1;    
> > > > 
> > > > yep, seems good.. thanks
> > > >   
> > > 
> > > OK, great!
> 
> I think Jiri is going to implement the above.

yep ;-)

jirka

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web