]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a segfault caused by using the RAISE function incorrectly (library now
authordan <dan@noemail.net>
Thu, 20 Dec 2018 15:04:38 +0000 (15:04 +0000)
committerdan <dan@noemail.net>
Thu, 20 Dec 2018 15:04:38 +0000 (15:04 +0000)
returns an error instead of crashing).

FossilOrigin-Name: ddf06db702761d663119d508afe21d7dfebe963d576bb42fc2f2024205ab86f8

manifest
manifest.uuid
src/expr.c
test/triggerC.test

index 244e2b32875d1ec87975f19e5b263665056d39cb..06f2d232f2c8bf81116aec69c7fc4f7f87145fbb 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C In\sdefensive\smode,\sdo\snot\sallow\sshadow\stables\sto\sbe\srenamed\susing\sALTER\sTABLE.
-D 2018-12-18T20:31:14.302
+C Fix\sa\ssegfault\scaused\sby\susing\sthe\sRAISE\sfunction\sincorrectly\s(library\snow\nreturns\san\serror\sinstead\sof\scrashing).
+D 2018-12-20T15:04:38.546
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6
@@ -459,7 +459,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957
 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 F src/dbstat.c 3c8bd4e77f0244fd2bd7cc90acf116ad2f8e82d70e536637f35ac2bc99b726f9
 F src/delete.c f7938125847e8ef485448db5fbad29acb2991381a02887dd854c1617315ab9fb
-F src/expr.c b84c41530d97e28d5c43149d23d4492e26cd4e1e93abba1302d361e71a04b614
+F src/expr.c 5bf5ccc9a1ecf8e952bd6314091e698ea85de6446e10a852c0b9058a0f5cb0cc
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812
 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f
@@ -1534,7 +1534,7 @@ F test/trigger8.test 30cb0530bd7c4728055420e3f739aa00412eafa4
 F test/trigger9.test 2226ec795a33b0460ab5cf8891e9054cc7edef41
 F test/triggerA.test 837be862d8721f903dba3f3ceff05b32e0bee5214cf6ea3da5fadf12d3650e9d
 F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe
-F test/triggerC.test 302d8995f5ffe63bbc15053abb3ef7a39cf5a092
+F test/triggerC.test c7fbc3eb241b5a7ba4b0815f76c3708483e91890f9573add12a610c45b2a6022
 F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650
 F test/triggerE.test ede2e4bce4ba802337bd69d39447fa04a938e06d84a8bfc53c76850fc36ed86d
 F test/triggerF.test 6a8c22bd058cf467f0c7d112afe87f7a8c579c0c4681b914b8f19020f48528a4
@@ -1787,7 +1787,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 d64f248da3ce7762fe2c17fbc83f7bea9ffca73723bb3ad0982a85320839da90
-R 8084815bef8ea9d641d511635bf59c2f
+P 23e200da5cfbde0798e67cd9e016e4a1cd73b67981e1af841493fcd123d8f547
+R 44eff2c3614ea3b3372ea87dffe406f1
+T +closed c9c163a60dab4258c8e410dd56086b78bc8b716ea8bf2037c015eeb34d45c86d
 U dan
-Z 7a9b2e5632511bbea0d5ecc30e94b185
+Z 90e5f7468069591ede852249e33e7f76
index cdc681e8939ccb04466ee7fbb89db3a10836216c..899cc4ee02a3b1810cd35301a1b9f7c021321fe7 100644 (file)
@@ -1 +1 @@
-23e200da5cfbde0798e67cd9e016e4a1cd73b67981e1af841493fcd123d8f547
\ No newline at end of file
+ddf06db702761d663119d508afe21d7dfebe963d576bb42fc2f2024205ab86f8
\ No newline at end of file
index 5d36502011a672e58e0ca523ff58c610468d96f8..b1a06bdae276caa9e34af7064ad01a5239cd1682 100644 (file)
@@ -4745,7 +4745,7 @@ int sqlite3ExprCompare(Parse *pParse, Expr *pA, Expr *pB, int iTab){
     }
     return 2;
   }
-  if( pA->op!=pB->op ){
+  if( pA->op!=pB->op || pA->op==TK_RAISE ){
     if( pA->op==TK_COLLATE && sqlite3ExprCompare(pParse, pA->pLeft,pB,iTab)<2 ){
       return 1;
     }
index 3e47521fd11c71ddbf63b7507addedea33082da8..49d4ecaeefb9fc06a21b1b529cbbc1aafac19b05 100644 (file)
@@ -1042,4 +1042,20 @@ do_execsql_test 15.2.1 {
 do_execsql_test 15.2.2 { SELECT * FROM x2;       } {1 2 3 4}
 do_execsql_test 15.2.3 { SELECT * FROM """x2"""; } {3 11 x y}
 
+#-------------------------------------------------------------------------
+# At one point queries such as the following were causing segfaults.
+#
+do_catchsql_test 16.1 {
+  SELECT raise(ABORT, 'msg') FROM sqlite_master 
+  UNION SELECT 1 
+  ORDER BY raise(IGNORE);
+} {1 {1st ORDER BY term does not match any column in the result set}}
+
+do_catchsql_test 16.2 {
+  SELECT count(*) FROM sqlite_master 
+  GROUP BY raise(IGNORE) 
+  HAVING raise(ABORT, 'msg');
+} {1 {RAISE() may only be used within a trigger-program}}
+
 finish_test
+