Changeset: 645a1426ad2d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=645a1426ad2d Added Files: sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.sql sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.err sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.out Modified Files: sql/server/rel_select.c sql/server/sql_parser.y sql/test/BugTracker-2015/Tests/All Branch: default Log Message:
Merge with Jul2015 branch. diffs (199 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -4587,11 +4587,10 @@ rel_order_by_simple_column_exp(mvc *sql, sql_exp *e = NULL; dlist *l = column_r->data.lval; - if (column_r->type == type_int) + if (!r || !is_project(r->op) || column_r->type == type_int) return NULL; assert(column_r->token == SQL_COLUMN && column_r->type == type_list); - assert(is_project(r->op)); r = r->l; if (!r) return e; diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -4907,22 +4907,67 @@ name_commalist: { $$ = append_string($1, $3); } ; +wrdval: + lngval { + lng l = $1; +#if SIZEOF_WRD == SIZEOF_INT + + if (l > GDK_int_max) { + char *msg = sql_message("\b22000!constant (" LLFMT ") has wrong type (number expected)", l); + + yyerror(m, msg); + _DELETE(msg); + $$ = 0; + YYABORT; + } +#endif + $$ = (wrd) l; + } +; + lngval: - sqlINT { $$ = strtoll($1,NULL,10); } -; - -wrdval: - sqlINT { -#if SIZEOF_WRD == SIZEOF_INT - $$ = strtol($1,NULL,10); -#else /* SIZEOF_WRD == SIZEOF_LNG a*/ - $$ = strtoll($1,NULL,10); -#endif + sqlINT + { + char *end = NULL, *s = $1; + int l = _strlen(s); + + if (l <= 19) { + $$ = strtoll(s,&end,10); + } else { + $$ = 0; + } + if (s+l != end || errno == ERANGE) { + char *msg = sql_message("\b22003!integer value too large or not a number (%s)", $1); + + errno = 0; + yyerror(m, msg); + _DELETE(msg); + $$ = 0; + YYABORT; + } } -; intval: - sqlINT { $$ = strtol($1,NULL,10); } + sqlINT + { + char *end = NULL, *s = $1; + int l = _strlen(s); + + if (l <= 10) { + $$ = strtol(s,&end,10); + } else { + $$ = 0; + } + if (s+l != end || errno == ERANGE) { + char *msg = sql_message("\b22003!integer value too large or not a number (%s)", $1); + + errno = 0; + yyerror(m, msg); + _DELETE(msg); + $$ = 0; + YYABORT; + } + } | IDENT { char *name = $1; sql_subtype *tpe; diff --git a/sql/test/BugTracker-2015/Tests/All b/sql/test/BugTracker-2015/Tests/All --- a/sql/test/BugTracker-2015/Tests/All +++ b/sql/test/BugTracker-2015/Tests/All @@ -88,3 +88,4 @@ dump-DELETE.Bug-3850 missed-error.Bug-3842 constant-random.Bug-3836 limit_dbl.Bug-3847 +limit_too_large_value.Bug-3857 diff --git a/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.sql b/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.sql @@ -0,0 +1,1 @@ +select * from _tables limit 1000000000000000000000000000000000000000; diff --git a/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.err b/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.err @@ -0,0 +1,40 @@ +stderr of test 'limit_too_large_value.Bug-3857` in directory 'sql/test/BugTracker-2015` itself: + + +# 15:49:12 > +# 15:49:12 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=31933" "--set" "mapi_usock=/var/tmp/mtest-521/.s.monetdb.31933" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 15:49:12 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 31933 +# cmdline opt mapi_usock = /var/tmp/mtest-521/.s.monetdb.31933 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015 +# cmdline opt mal_listing = 0 +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 15:49:13 > +# 15:49:13 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-521" "--port=31933" +# 15:49:13 > + +MAPI = (monetdb) /var/tmp/mtest-521/.s.monetdb.31933 +QUERY = select * from _tables limit 1000000000000000000000000000000000000000; +ERROR = !integer value too large or not a number (1000000000000000000000000000000000000000) in: "select * from _tables limit 1000000000000000000000000000000000000000" + +# 15:49:13 > +# 15:49:13 > "Done." +# 15:49:13 > + diff --git a/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.out b/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/limit_too_large_value.Bug-3857.stable.out @@ -0,0 +1,36 @@ +stdout of test 'limit_too_large_value.Bug-3857` in directory 'sql/test/BugTracker-2015` itself: + + +# 15:49:12 > +# 15:49:12 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=31933" "--set" "mapi_usock=/var/tmp/mtest-521/.s.monetdb.31933" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 15:49:12 > + +# MonetDB 5 server v11.21.12 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2015', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit integers dynamically linked +# Found 7.333 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:31933/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-521/.s.monetdb.31933 +# MonetDB/GIS module loaded +# Start processing logs sql/sql_logs version 52200 +# Start reading the write-ahead log 'sql_logs/sql/log.54' +# Finished reading the write-ahead log 'sql_logs/sql/log.54' +# Finished processing logs sql/sql_logs +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. + +# 15:49:13 > +# 15:49:13 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-521" "--port=31933" +# 15:49:13 > + + +# 15:49:13 > +# 15:49:13 > "Done." +# 15:49:13 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list