]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Attempt to automatically insert U+0001 escape bytes before and after
authordrh <>
Sat, 2 May 2026 23:03:42 +0000 (23:03 +0000)
committerdrh <>
Sat, 2 May 2026 23:03:42 +0000 (23:03 +0000)
ANSI X3.64 escape sequences when using editline, to work around the
limitations of editline.

FossilOrigin-Name: 63050bee6e5ed46cead14bd5a02b0cb6a7dbcdcb6a56601b90c10cf1c8d84efc

manifest
manifest.uuid
src/shell.c.in

index 19af2d5843dc107cc9f1e86042ad5e4a455e0d2b..4dd0138826c51994e03b66924575712768f8a668 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sharmless\scompiler\swarning\son\ssome\sMSVC\sversions.
-D 2026-05-02T20:19:31.535
+C Attempt\sto\sautomatically\sinsert\sU+0001\sescape\sbytes\sbefore\sand\safter\nANSI\sX3.64\sescape\ssequences\swhen\susing\seditline,\sto\swork\saround\sthe\nlimitations\sof\seditline.
+D 2026-05-02T23:03:42.300
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -736,7 +736,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c fcc406bfb055bee9954ee77c023f4a2a66a24bcdf1573516a72280811a269c20
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c 4c05cde130f26991b7411d8c6809e0630625e18078742c963a047b4b9cc01d49
-F src/shell.c.in 3ed0902de2a82c92ee535c1bc627fb7cfd64cc3b81762f1c10b59c634597da10
+F src/shell.c.in d8fcd944b71df552850c5f700cca5017cdb3afa8d9f271bfe61dc267d6bf94fd
 F src/sqlite.h.in 39d2e09114d2bdb7afd998f4a469c8f8cd065f8093835a7d0422f260fc78fb4f
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 9788c301f95370fa30e808861f1d2e6f022a816ddbe2a4f67486784c1b31db2e
@@ -2203,8 +2203,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 625f78a630bbf897f945065f1b85a92fe26e426302c8f6edc4d26a817ff62358
-R 5165a1579ee394bfecd4fc543aa32f10
+P bb8f6deeff31e9cc9b5a88b17b29dc6cd4fb4515134fa8e9758e33e42bbe89b0
+R 0f275a4b9bd7e4293f045b3ef7e7c6fd
 U drh
-Z ea3911b5c75537e0cdae36727f4e6392
+Z c6adb3eb6a7746eb8a9a09f41037dc74
 # Remove this line to create a well-formed Fossil manifest.
index 0f5c7d405d81ae621c056f4c9902f0d5a49f5998..c37047b03419cb83b3b755f45981c3a819991387 100644 (file)
@@ -1 +1 @@
-bb8f6deeff31e9cc9b5a88b17b29dc6cd4fb4515134fa8e9758e33e42bbe89b0
+63050bee6e5ed46cead14bd5a02b0cb6a7dbcdcb6a56601b90c10cf1c8d84efc
index 4f008dcc01647cd7e916fae7ef544a7b488d8d18..aee9a32a6d7b6941d95504431dd05bbc54a3f1f7 100644 (file)
@@ -1129,6 +1129,7 @@ static char *expand_prompt(
     if( c>='0' && c<='7' ){
       /* /nnn becomes a single byte given by octal nnn */
       int v = c - '0';
+      i++;
       while( i<=2 && zPrompt[i+1]>='0' && zPrompt[i+1]<='7' ){
         v = v*8 + zPrompt[++i] - '0';
       }
@@ -1351,11 +1352,39 @@ static char *expand_prompt(
       }
     }
   }
-
   if( 0==sqlite3_str_length(pOut) ){
     /* Avoid a bogus OOM */
     sqlite3_str_appendchar(pOut, 1, '\0');
   }
+
+#if HAVE_EDITLINE
+  /* Editline does not recognize ANSI X3.64 escape sequences.  So we have
+  ** to find them all and enclose them inside '\1' delimiters.
+  */
+  if( strstr(sqlite3_str_value(pOut),"\033[")!=0 ){
+    char *zOrig = sqlite3_str_finish(pOut);
+    pOut = sqlite3_str_new(0);
+    for(i=0; zOrig[i]; i++){
+      if( zOrig[i]=='\033' && zOrig[i+1]=='[' ){
+        int k = i+2;
+        sqlite3_str_appendchar(pOut, 1, 1);
+        while( 1 /*exit-by-break*/ ){
+          for( ; zOrig[k]>=0x20 && zOrig[k]<=0x3f; k++){}
+          if( zOrig[k]>=0x40 ) k++;
+          if( zOrig[k]!='\033' || zOrig[k+1]!='[' || zOrig[k+2]==0 ) break;
+          k += 2;
+        }
+        sqlite3_str_append(pOut, &zOrig[i], k-i);
+        sqlite3_str_appendchar(pOut, 1, 1);
+        i = k-1;
+      }else{
+        sqlite3_str_appendchar(pOut, 1, zOrig[i]);
+      }
+    }
+    sqlite3_free(zOrig);
+  }
+#endif
+
   return sqlite3_str_finish(pOut);
 }