Tarantool development patches archive
 help / color / mirror / Atom feed
From: "n.pettik" <korablev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: szudin@tarantool.org
Subject: [tarantool-patches] Re: sql: assertion fault on VALUES (#3888)
Date: Tue, 22 Jan 2019 17:15:51 +0300	[thread overview]
Message-ID: <BA062CD1-3289-48F3-8A07-E93879A3DE1D@tarantool.org> (raw)
In-Reply-To: <35ac4879-5140-15ea-6db8-1e61dbe687dd@tarantool.org>


> On 22 Jan 2019, at 16:42, Stanislav Zudin <szudin@tarantool.org> wrote:
> 
> Branch: https://github.com/tarantool/tarantool/tree/2.1
> Issue: https://github.com/tarantool/tarantool/issues/3888

You should add link to branch where your patch is located,
so that reviewer can pull and test it.

For instance,
https://github.com/tarantool/tarantool/tree/np/gh-3934-IN-operator-fix

Links to branch and issue should be placed after --- delimiter:

Closes #3888
---

> From ff49a389a68488b13a0e3093fce9f51ac4c186bf Mon Sep 17 00:00:00 2001
> From: Stanislav Zudin <szudin@tarantool.org>
> Date: Tue, 22 Jan 2019 15:41:26 +0300
> Subject: [PATCH] sql: if a keyword 'blob' is used as an ID treat it as error

These headers shouldn’t appear if you send patch via git send-email.

> 
> Closes #3888
> ---
>  src/box/sql/expr.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
> index b67b22c23..3eea7f4a3 100644
> --- a/src/box/sql/expr.c
> +++ b/src/box/sql/expr.c
> @@ -3751,10 +3751,24 @@ sqlite3ExprCodeTarget(Parse * pParse, Expr * pExpr, int target)
>          }
>  #ifndef SQLITE_OMIT_BLOB_LITERAL
>      case TK_BLOB:{
> -            int n;
> -            const char *z;
> +            int n = sqlite3Strlen30(pExpr->u.zToken);
> +            const char *z = pExpr->u.zToken;
>              char *zBlob;
> +
>              assert(!ExprHasProperty(pExpr, EP_IntValue));
> +
> +            if ((n < 3) ||    /* 'X' + opening ' + closing ' == 3 */
> +                (z[0] != 'x' && z[0] != 'X') ||
> +                (z[1] != '\'') || (z[n - 1] != '\'')) {
> +                /* It's definitely not a blob, report an error. */
> +                sqlite3ErrorMsg(pParse,
> +                            "Unexpected keyword '%s' within request",
> +                            z);

If we get so far, then we have already passed through Lemon
parser and about to generate byte code. Hence it is too late to
raise an error about unexpected keywords.

Look at parse.y:

    30	// This code runs whenever there is a syntax error
    31	//
    32	%syntax_error {
    33	  UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
    34	  assert( TOKEN.z[0] );  /* The tokenizer always gives us a token */
    35	  if (yypParser->is_fallback_failed && TOKEN.isReserved) {
    36	    sqlite3ErrorMsg(pParse, "keyword \"%T\" is reserved", &TOKEN);
    37	  } else {
    38	    sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
    39	  }
    40	}

I guess we should terminate here.

> +                sqlite3MayAbort(pParse);
> +                return 0;
> +            }
> +
> +            /* ---------------------------------------------- */

We don’t use such comments as delimiters or whatever.

What about other cases which I mentioned?
For instance, SELECT FLOAT returns 0, but
must raise an error.

Yep, it may seem as a slightly different problem.
You could extend you patch and fix it right now.
Otherwise, file an issue(s), please.

>              assert(pExpr->u.zToken[0] == 'x'
>                     || pExpr->u.zToken[0] == 'X');
>              assert(pExpr->u.zToken[1] == '\'’);

Also, note that every patch should come with test verifying
that the problem has been resolved (whenever it is possible).

      reply	other threads:[~2019-01-22 14:15 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <16c923db-f9fc-1317-0468-fdb24740b1ff@tarantool.org>
2019-01-22 13:42 ` [tarantool-patches] " Stanislav Zudin
2019-01-22 14:15   ` n.pettik [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BA062CD1-3289-48F3-8A07-E93879A3DE1D@tarantool.org \
    --to=korablev@tarantool.org \
    --cc=szudin@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: sql: assertion fault on VALUES (#3888)' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox