]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the SQLITE_FTS3_MAX_EXPR_DEPTH compile time option.
authordan <dan@noemail.net>
Tue, 11 Jun 2013 14:22:11 +0000 (14:22 +0000)
committerdan <dan@noemail.net>
Tue, 11 Jun 2013 14:22:11 +0000 (14:22 +0000)
FossilOrigin-Name: 24fc9d4438a5615dd20af5419456166df83a72ea

ext/fts3/fts3Int.h
ext/fts3/fts3_expr.c
manifest
manifest.uuid

index b19064cd3ba6968a358230c162ed823237fd1f00..5d1706c927961555dd12b14a9ef946c1663d73e2 100644 (file)
@@ -39,6 +39,18 @@ extern const sqlite3_api_routines *sqlite3_api;
 #include "fts3_tokenizer.h"
 #include "fts3_hash.h"
 
+/*
+** This constant determines the maximum depth of an FTS expression tree
+** that the library will create and use. FTS uses recursion to perform 
+** various operations on the query tree, so the disadvantage of a large
+** limit is that it may allow very large queries to use large amounts
+** of stack space (perhaps causing a stack overflow).
+*/
+#ifndef SQLITE_FTS3_MAX_EXPR_DEPTH
+# define SQLITE_FTS3_MAX_EXPR_DEPTH 12
+#endif
+
+
 /*
 ** This constant controls how often segments are merged. Once there are
 ** FTS3_MERGE_COUNT segments of level N, they are merged into a single
index c046d7d5ffca561e40de78daecbb7964bf324e09..29fb2887dab3a3cde63004b1eb6efee7fe839a02 100644 (file)
@@ -1000,17 +1000,16 @@ int sqlite3Fts3ExprParse(
   Fts3Expr **ppExpr,                  /* OUT: Parsed query structure */
   char **pzErr                        /* OUT: Error message (sqlite3_malloc) */
 ){
-  static const int MAX_EXPR_DEPTH = 12;
   int rc = fts3ExprParseUnbalanced(
       pTokenizer, iLangid, azCol, bFts4, nCol, iDefaultCol, z, n, ppExpr
   );
   
   /* Rebalance the expression. And check that its depth does not exceed
-  ** MAX_EXPR_DEPTH.  */
+  ** SQLITE_FTS3_MAX_EXPR_DEPTH.  */
   if( rc==SQLITE_OK && *ppExpr ){
-    rc = fts3ExprBalance(ppExpr, MAX_EXPR_DEPTH);
+    rc = fts3ExprBalance(ppExpr, SQLITE_FTS3_MAX_EXPR_DEPTH);
     if( rc==SQLITE_OK ){
-      rc = fts3ExprCheckDepth(*ppExpr, MAX_EXPR_DEPTH);
+      rc = fts3ExprCheckDepth(*ppExpr, SQLITE_FTS3_MAX_EXPR_DEPTH);
     }
   }
 
@@ -1019,7 +1018,8 @@ int sqlite3Fts3ExprParse(
     *ppExpr = 0;
     if( rc==SQLITE_TOOBIG ){
       *pzErr = sqlite3_mprintf(
-          "FTS expression tree is too large (maximum depth %d)", MAX_EXPR_DEPTH
+          "FTS expression tree is too large (maximum depth %d)", 
+          SQLITE_FTS3_MAX_EXPR_DEPTH
       );
       rc = SQLITE_ERROR;
     }else if( rc==SQLITE_ERROR ){
index 69da1f7a962e74b5e1f2e7398a9a2d26dc012cb4..dbb20a50de271635f11993f8a4735df21d28984b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\smemory\sleak\sin\sCREATE\sTABLE\sthat\soccurs\sif\sthere\sare\stwo\sor\smore\nCOLLATE\sclauses\son\sthe\ssame\scolumn.
-D 2013-06-09T20:22:41.259
+C Add\sthe\sSQLITE_FTS3_MAX_EXPR_DEPTH\scompile\stime\soption.
+D 2013-06-11T14:22:11.456
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -80,9 +80,9 @@ F ext/fts3/README.tokenizers e0a8b81383ea60d0334d274fadf305ea14a8c314
 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
 F ext/fts3/fts3.c 931b3c83abdd1ab3bb389b2130431c2a9ff73b91
 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
-F ext/fts3/fts3Int.h 0b167bed9e63151635620a4f639bc62ac6012cba
+F ext/fts3/fts3Int.h cb4df04cf886d9920a71df9e8faaa5aae2fa48c6
 F ext/fts3/fts3_aux.c b02632f6dd0e375ce97870206d914ea6d8df5ccd
-F ext/fts3/fts3_expr.c 193d6fc156d744ab548a2ed06c31869e54dac739
+F ext/fts3/fts3_expr.c f8eb1046063ba342c7114eba175cabb31c4a64e7
 F ext/fts3/fts3_hash.c 8dd2d06b66c72c628c2732555a32bc0943114914
 F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
 F ext/fts3/fts3_icu.c e319e108661147bcca8dd511cd562f33a1ba81b5
@@ -1093,7 +1093,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P d5bc1fe1c461bdb3d889ab2e50feb944881822a4 0a60212c9c8404ee079985a58094ed2b2b554d48
-R 866dc59c759cbc65061f28ee32001d2c
-U drh
-Z 8263ab0aca3a813bb75c33a7d2fdca4d
+P 7e3820e5b989426c64af46f6bf862b91366ae954
+R 5f94a46cd24d5603b852ca86ea7eaf5a
+U dan
+Z 30f6897d1a48f4a9b1a79c1749e033ce
index c82f3e71cd3e549d57eb47a57752acb79d2b97df..87e2685a1649eb3930945e3d9c82e2889abcdeb5 100644 (file)
@@ -1 +1 @@
-7e3820e5b989426c64af46f6bf862b91366ae954
\ No newline at end of file
+24fc9d4438a5615dd20af5419456166df83a72ea
\ No newline at end of file