]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Ensure that negative numbers may not be used in frame offset clauses even if they...
authordrh <>
Wed, 31 Mar 2021 13:41:10 +0000 (13:41 +0000)
committerdrh <>
Wed, 31 Mar 2021 13:41:10 +0000 (13:41 +0000)
FossilOrigin-Name: 2d179f58bfe21454bc1b11d5a9ae4e86148180f714076047824e145add5ca522

manifest
manifest.uuid
src/window.c
test/window9.test

index 61191e533ac055049c41b51c99cde19774ae837f..7f23a541ed6f899e508c0418813527175d10b3d4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Raise\san\serror\sif\sa\sterm\sof\sthe\sform\s"TABLE.*"\sappears\sin\sthe\sRETURNING\sclause,\nas\sSQLite\sdoes\snot\s(yet)\sknow\show\sto\shandle\sthat.\nTicket\s[132994c8b1063bfb].
-D 2021-03-30T01:57:51.632
+C Ensure\sthat\snegative\snumbers\smay\snot\sbe\sused\sin\sframe\soffset\sclauses\seven\sif\sthey\sare\sinitially\stext\svalue.\se.g.\s(RANGE\sBETWEEN\s'-1'\sPRECEDING\s...).
+D 2021-03-31T13:41:10.883
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -633,7 +633,7 @@ F src/where.c 10d06b16670a1d2a992d52a9f08e49426d38a08fb0a7ae5f7f62fd023d560e1e
 F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4
 F src/wherecode.c e57a8690311a75d06e723e8d379f9831de04aba300e07174d236e32a7f9c7a13
 F src/whereexpr.c 4ba94b8ebbff97c658b212de6ccdb6d3a41847800bdf99e7a2a967c250269f2c
-F src/window.c 7e89ac4b6cd6bb9b7772234a625d19c39b530f4ac06e43688a8b7e6a1ab512a2
+F src/window.c 32b03808aff2e7263889cce0cbcb2a68efefc2a9d5187514ddb6a2a1046dc7f5
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
 F test/affinity3.test eecb0dabee4b7765a8465439d5e99429279ffba23ca74a7eae270a452799f9e7
@@ -1780,7 +1780,7 @@ F test/window7.tcl 6a1210f05d40ec89c22960213a22cd3f98d4e2f2eb20646c83c8c30d4d761
 F test/window7.test 1d31276961ae7801edc72173edaf7593e3cbc79c06d1f1f09e20d8418af403cd
 F test/window8.tcl f2711aa3571e4e6b0dad98db8d95fd6cb8d9db0c92bbdf535f153b07606a1ce2
 F test/window8.test c4331b27a6f66d69fa8f8bab10cc731db1a81d293ae108a68f7c3487fa94e65b
-F test/window9.test 4d8c875b73febdbac9b8f2b52ec132b98f48261cdafd6b08db62bc6d8ff913fc
+F test/window9.test 349c71eab4288a1ffc19e2f65872ec2c37e6cf8a1dda2ad300364b7450ae4836
 F test/windowA.test 6d63dc1260daa17141a55007600581778523a8b420629f1282d2acfc36af23be
 F test/windowB.test 6e601f8178ba8ba28b2f19e74fe613815084bb4a8d2ad942defc7d42e191e521
 F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0
@@ -1910,8 +1910,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 4375cec281fd918042441521010206f2ea531dbf6e2a5904bb6c5ceb4ebc930b
-Q +3039bcaff95bb5d096c80b5eefdaeda6abd1d1337e829f32fd28a968f663f481
-R 23f3893ad9e2956b8d62c9a367f23de5
+P 257e16f7b34e6b6f00811562adc2bb74968cedd418dc568cec30d9f7d18c5a80
+Q +8b681b274dd01c3e0f76d5bbddcbb2450c6d9475b9cfa0db961a3ab5edf51db1
+R 5c41ea238446edcd8cd54701d069e93b
 U drh
-Z f776763bb51715dd59eae4234ec728c3
+Z cdd6311afcfeb564271f71412dcdfa06
index 9ba7fdf3d03057102dd70c3974f48070434a419b..06511cbf2bcfae2668946e1691496962143d8c67 100644 (file)
@@ -1 +1 @@
-257e16f7b34e6b6f00811562adc2bb74968cedd418dc568cec30d9f7d18c5a80
\ No newline at end of file
+2d179f58bfe21454bc1b11d5a9ae4e86148180f714076047824e145add5ca522
\ No newline at end of file
index 26a82a9e33add978530c7b850ce40892c5848a4c..33e905e53fb8982f93eb54e93858c394ad76f5f0 100644 (file)
@@ -1469,6 +1469,7 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){
     VdbeCoverageIf(v, eCond==2);
   }
   sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg);
+  sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC);
   VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */
   VdbeCoverageNeverNullIf(v, eCond==1); /*   the OP_MustBeInt */
   VdbeCoverageNeverNullIf(v, eCond==2);
index c342a4d79059b026232cfa0a63d7acfbb747929a..4b8e4fa58ff7886305efd6c3bba43ccdf896c79f 100644 (file)
@@ -265,4 +265,21 @@ do_execsql_test 8.4 {
   FROM v1;
 } {0.0 0.0}
 
+#--------------------------------------------------------------------------
+reset_db
+do_execsql_test 9.0 {
+  CREATE TABLE t1(a, b, c);
+  INSERT INTO t1 VALUES(NULL,'bb',356);
+  INSERT INTO t1 VALUES('CB','aa',158);
+  INSERT INTO t1 VALUES('BB','aa',399);
+  INSERT INTO t1 VALUES('FF','bb',938);
+}
+
+do_catchsql_test 9.1 {
+  SELECT sum(c) OVER (
+    ORDER BY c RANGE BETWEEN 0 PRECEDING AND '-700' PRECEDING
+  )
+  FROM t1
+} {1 {frame ending offset must be a non-negative number}}
+
 finish_test