]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In the experimental and unsupported amatch.c extension, raise an error master
authordrh <>
Wed, 29 Jul 2026 18:03:45 +0000 (18:03 +0000)
committerdrh <>
Wed, 29 Jul 2026 18:03:45 +0000 (18:03 +0000)
if a cost value is out of range even if the rule that the cost applies
to will never be used.
[bugs:/info/2026-07-29T06:30:13Z|Bug 2026-07-29T06:30:13Z]

FossilOrigin-Name: 86b7a62c5ccf41479a9556e705e3c43973a4033c2db42d298050dcfce121ee05

ext/misc/amatch.c
manifest
manifest.uuid
test/amatch1.test

index ad4536ec438132aedf720770a7956fdaec1de881..e06b6227759b8e9b3dfca04c5113070ef432cb7f 100644 (file)
@@ -587,6 +587,13 @@ static int amatchLoadOneRule(
   nFrom = (int)strlen(zFrom);
   nTo = (int)strlen(zTo);
 
+  if( rCost<=0 || rCost>AMATCH_MX_COST ){
+    *pzErr = sqlite3_mprintf("%s: cost must be between 1 and %d", 
+        p->zClassName, AMATCH_MX_COST
+    );
+    return SQLITE_ERROR;
+  }
+
   /* Silently ignore null transformations */
   if( strcmp(zFrom, zTo)==0 ){
     if( zFrom[0]=='?' && zFrom[1]==0 ){
@@ -596,12 +603,6 @@ static int amatchLoadOneRule(
     return SQLITE_OK;
   }
 
-  if( rCost<=0 || rCost>AMATCH_MX_COST ){
-    *pzErr = sqlite3_mprintf("%s: cost must be between 1 and %d", 
-        p->zClassName, AMATCH_MX_COST
-    );
-    rc = SQLITE_ERROR;
-  }else
   if( nFrom>AMATCH_MX_LENGTH || nTo>AMATCH_MX_LENGTH ){
     *pzErr = sqlite3_mprintf("%s: maximum string length is %d", 
         p->zClassName, AMATCH_MX_LENGTH
index fe05db45d80219c30b2e5c032105513ab3a81bff..b21b46a9b1f629bc50a66e0f5a3be1dfe912a8e0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\sallow\srecursion\sin\sextension\sfunctions\ssha1_query()\sor\ssha3_query().\n[bugs:/info/2026-07-29T06:29:33Z|Bug\s2026-07-29T06:29:33Z].
-D 2026-07-29T17:36:16.031
+C In\sthe\sexperimental\sand\sunsupported\samatch.c\sextension,\sraise\san\serror\nif\sa\scost\svalue\sis\sout\sof\srange\seven\sif\sthe\srule\sthat\sthe\scost\sapplies\nto\swill\snever\sbe\sused.\n[bugs:/info/2026-07-29T06:30:13Z|Bug\s2026-07-29T06:30:13Z]
+D 2026-07-29T18:03:45.088
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -361,7 +361,7 @@ F ext/jni/src/tests/000-000-sanity.test c3427a0e0ac84d7cbe4c95fdc1cd4b61f9ddcf43
 F ext/jni/src/tests/000-001-ignored.test e17e874c6ab3c437f1293d88093cf06286083b65bf162317f91bbfd92f961b70
 F ext/jni/src/tests/900-001-fts.test bf0ce17a8d082773450e91f2388f5bbb2dfa316d0b676c313c637a91198090f0
 F ext/misc/README.md 6243cdc4d7eb791c41ef0716f3980b8b5f6aa8c61ff76a3958cbf0031c6ebfa7
-F ext/misc/amatch.c 2bbdb0145655cfb1e6ac1c4d717a8cb2e81b7193e5eadf2b290682d7fea82ff2
+F ext/misc/amatch.c 04d0f3d0e6206adaec93369e82c45d40e8f6f42c2b3701741c1197e4327b079d
 F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
 F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824
 F ext/misc/base64.c 1445761667c16356e827fc6418294c869468be934429aaa8315035e76dd58acf
@@ -861,7 +861,7 @@ F test/altertab.test 8a2712f9076da5012a002d0b5cc0a421398a5bf61c25bab41b77c427586
 F test/altertab2.test 0889ba0700cc1cdb7bc7d25975aa61fece34f621de963d0886e2395716b38576
 F test/altertab3.test 575e771e2f02b13eb98798dc92eabacd187d6dbcf596e70f11d699b0b6b5d0b2
 F test/altertrig.test b1590647076add5a47aea0f2236c609ca0bc8a7a2462463edd3e5882c7894802
-F test/amatch1.test 8a9405f497a57705a368f242658e2aea900dd2efbc48a48024263b0df6fc1ea0
+F test/amatch1.test d276ddadc1874dacd3bb0b90c0f243455f30782c0a7d59b33362fea35b30e900
 F test/analyze.test 2fb21d7d64748636384e6cb8998dbf83968caf644c07fcb4f76c18f2e7ede94b
 F test/analyze3.test 42adfaedaddca1d93d9f4ac38465791e25a2e4b7a261a5278e92f554ac1e15f1
 F test/analyze4.test 68bd069f3ac7ac1e652ddd9f04f57d5606ddb4208450f5297005db7aa0dd707d
@@ -2218,8 +2218,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P add89fba2ffe9da5b0305182c97f8408e0dd7d2c3d81f40e0a84f6f79154c5a3
-R 4b73c8f6c7c8301ed17d2e85e6f236b9
+P 4687e04d948b787cee748279b13774ee1389bb179f8762720631a540f5cd9136
+R 96e98bc57d64fa5b3217a2a27ab03aa0
 U drh
-Z dea29c174681fe97f839f10198407f07
+Z 99a4831b3bb34b0dc96d4a989b17c514
 # Remove this line to create a well-formed Fossil manifest.
index 9a4a30ed5fac38b06d0dd95473a815a505b21d04..ea7667f2c536152a9d3f1d667e9edd74ae6d69ad 100644 (file)
@@ -1 +1 @@
-4687e04d948b787cee748279b13774ee1389bb179f8762720631a540f5cd9136
+86b7a62c5ccf41479a9556e705e3c43973a4033c2db42d298050dcfce121ee05
index 5b3edf119e8efa94202c574d72e218eb2b8906e9..b893de8e3f8364ada08eb61cb99cee76d9ce568e 100644 (file)
@@ -130,4 +130,22 @@ do_execsql_test amatch1-3.0 {
   SELECT length(word) FROM am WHERE word MATCH format('%.81c','a');
 } {81}
 
+# Bug 2026-07-29T06:30:13Z
+reset_db
+load_static_extension db amatch
+do_execsql_test amatch1-4.0 {
+  CREATE TABLE v(w TEXT, l INT);
+  INSERT INTO v VALUES('abc',0);
+  INSERT INTO v VALUES('abd',0);
+  CREATE TABLE ec(iLang, cFrom, cTo, Cost);
+  INSERT INTO ec VALUES(0,'?','a',-2000000000);
+}
+do_catchsql_test amatch1-4.1 {
+  CREATE VIRTUAL TABLE t USING approximate_match(
+    vocabulary_table=v,
+    vocabulary_word=w,
+    edit_distances=ec
+  );
+} {1 {approximate_match: cost must be between 1 and 1000}}
+
 finish_test