Patchwork [07/11] qapi: qapi.py: allow the "'" character be escaped

login
register
mail settings
Submitter Luiz Capitulino
Date July 25, 2012, 4:54 p.m.
Message ID <1343235256-26310-8-git-send-email-lcapitulino@redhat.com>
Download mbox | patch
Permalink /patch/173224/
State New
Headers show

Comments

Luiz Capitulino - July 25, 2012, 4:54 p.m.
A future commit will add a new qapi script which escapes that character.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 scripts/qapi.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
Peter Maydell - July 25, 2012, 5:45 p.m.
On 25 July 2012 17:54, Luiz Capitulino <lcapitulino@redhat.com> wrote:

(Subject should be "to be", not "be".)

> A future commit will add a new qapi script which escapes that character.
>
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
>  scripts/qapi.py | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/qapi.py b/scripts/qapi.py
> index e062336..9aa518f 100644
> --- a/scripts/qapi.py
> +++ b/scripts/qapi.py
> @@ -21,7 +21,9 @@ def tokenize(data):
>          elif data[0] == "'":
>              data = data[1:]
>              string = ''
> -            while data[0] != "'":
> +            while True:
> +                if data[0] == "'" and string[len(string)-1] != "\\":
> +                    break
>                  string += data[0]
>                  data = data[1:]
>              data = data[1:]

Won't this cause us to look at string[-1] if
the input data has two ' characters in a row?
(also, maybe infinite loop if the input string has an
unterminated ' ?)

-- PMM
Luiz Capitulino - July 25, 2012, 7:18 p.m.
On Wed, 25 Jul 2012 18:45:21 +0100
Peter Maydell <peter.maydell@linaro.org> wrote:

> On 25 July 2012 17:54, Luiz Capitulino <lcapitulino@redhat.com> wrote:
> 
> (Subject should be "to be", not "be".)
> 
> > A future commit will add a new qapi script which escapes that character.
> >
> > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> > ---
> >  scripts/qapi.py | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/scripts/qapi.py b/scripts/qapi.py
> > index e062336..9aa518f 100644
> > --- a/scripts/qapi.py
> > +++ b/scripts/qapi.py
> > @@ -21,7 +21,9 @@ def tokenize(data):
> >          elif data[0] == "'":
> >              data = data[1:]
> >              string = ''
> > -            while data[0] != "'":
> > +            while True:
> > +                if data[0] == "'" and string[len(string)-1] != "\\":
> > +                    break
> >                  string += data[0]
> >                  data = data[1:]
> >              data = data[1:]
> 
> Won't this cause us to look at string[-1] if
> the input data has two ' characters in a row?

Non escaped? If you meant '' that's a zero length string and should work, but
if you meant 'foo '' bar' that's illegal, because ' characters should be escaped.

I don't doubt bad things will happen in that case, but in general we don't do
much error detection in the qapi scripts and improving that is beyond this
series' scope.

> (also, maybe infinite loop if the input string has an
> unterminated ' ?)

Yes, that's how I found out I needed this patch :)

PS: Peter, I get claustrophobic when reading emails from you :)

PPS: I'm joking, don't get me wrong! :)

Patch

diff --git a/scripts/qapi.py b/scripts/qapi.py
index e062336..9aa518f 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -21,7 +21,9 @@  def tokenize(data):
         elif data[0] == "'":
             data = data[1:]
             string = ''
-            while data[0] != "'":
+            while True:
+                if data[0] == "'" and string[len(string)-1] != "\\":
+                    break
                 string += data[0]
                 data = data[1:]
             data = data[1:]