From: drh <> Date: Thu, 7 May 2026 14:14:05 +0000 (+0000) Subject: Bug fixes in the new %J and %j logic. X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=bfc0414b9a60af4cb9c38898cf30f4bde2a250c0;p=thirdparty%2Fsqlite.git Bug fixes in the new %J and %j logic. FossilOrigin-Name: d1b55572c76569cb1e999028e79bcf2e76069f8778f0c8e933ace606d7b6a8b2 --- diff --git a/manifest b/manifest index be3fd47d29..bdd1ded686 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\ssupport\sfor\swidth\sto\s%J\sand\s%j. -D 2026-05-07T10:46:39.530 +C Bug\sfixes\sin\sthe\snew\s%J\sand\s%j\slogic. +D 2026-05-07T14:14:05.317 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -731,7 +731,7 @@ F src/pcache.h 092b758d2c5e4dabb30eae46d8dfad77c0f70b16bf3ff1943f7a232b0fe0d4ba F src/pcache1.c 131ca0daf4e66b4608d2945ae76d6ed90de3f60539afbd5ef9ec65667a5f2fcd F src/pragma.c 789ef67117b74b5be0a2db6681f7f0c55e6913791b9da309aefd280de2c8a74d F src/prepare.c f6a6e28a281bd1d1da12f47d370a81af46159b40f73bf7fa0b276b664f9c8b7d -F src/printf.c 99eeffc41ce1feeaa646523224be0723a4123a6fa2a781fdce2b6aeaee83431e +F src/printf.c 69668d2eb82fabef57ed2d3876ce3f30056d17faf5e42aae08518fc537c08388 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c fcc406bfb055bee9954ee77c023f4a2a66a24bcdf1573516a72280811a269c20 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 @@ -1519,7 +1519,7 @@ F test/pragma5.test 7b33fc43e2e41abf17f35fb73f71b49671a380ea92a6c94b6ce530a25f8d F test/pragma6.test c5ec577ba087954b4dfa619a3cbe97b155b60a0af487527abe89b10fc17e6512 F test/pragmafault.test 275edaf3161771d37de60e5c2b412627ac94cef11739236bec12ed1258b240f8 F test/prefixes.test b524a1c44bffec225b9aec98bd728480352aa8532ac4c15771fb85e8beef65d9 -F test/printf.test eac015b2345ec40a07efb197e157dfb980fdb40ec80c76cf8214eee84d76b276 +F test/printf.test e46ac5497ce60a6518f81637bb0eb27b37a7db967ff78c5d3d918e34da52a39c F test/printf2.test 3f55c1871a5a65507416076f6eb97e738d5210aeda7595a74ee895f2224cce60 F test/progress.test ebab27f670bd0d4eb9d20d49cef96e68141d92fb F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc @@ -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 ea7c2c1a6bd32695fc3a1f2295b4c4719e3d9dd0a8f6480e7c95e17b564c3391 -R fc6faed7393cf062c8ad4d1a9c86e71c +P 0b102f2076586c08b134c78cc18acdd05555fa2b534c895535e96a0466661910 +R 7825f44823aab00b73665d1df4dc546a U drh -Z 10ba1a2ad4777c5cd6c331ae13689980 +Z c2340b07b2f8617839d6405636d77d8d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b89f0d993b..129e47ed76 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0b102f2076586c08b134c78cc18acdd05555fa2b534c895535e96a0466661910 +d1b55572c76569cb1e999028e79bcf2e76069f8778f0c8e933ace606d7b6a8b2 diff --git a/src/printf.c b/src/printf.c index 1bde7e87a8..38ab5c701e 100644 --- a/src/printf.c +++ b/src/printf.c @@ -896,10 +896,12 @@ void sqlite3_str_vappendf( for(i=0; i0 ){ + if( width>0 && sqlite3_str_errcode(pAccum)==SQLITE_OK ){ sqlite3_int64 n = sqlite3_str_length(pAccum) - iStart; sqlite3_int64 len = n; - if( flag_altform2 ){ - const char *zz = sqlite3_str_value(pAccum) + iStart; - for(i=0; zz[i]; i++){ + char *zz; + if( flag_altform2 && n>0 ){ + zz = sqlite3_str_value(pAccum); + assert( zz!=0 ); + assert( strlen(zz)==iStart + n ); + for(i=iStart; zz[i]; i++){ if( (zz[i]&0xc0)==0x80 ) len--; } } if( width>len ){ sqlite3_int64 sp = width-len; - sqlite3_str_appendchar(pAccum, sp, ' '); - if( !flag_leftjustify ){ - char *zz = sqlite3_str_value(pAccum) + iStart; + assert( sp>0 && sp<0x7fffffff ); + sqlite3_str_appendchar(pAccum, (int)sp, ' '); + if( !flag_leftjustify + && n>0 + && sqlite3_str_errcode(pAccum)==0 + ){ + zz = sqlite3_str_value(pAccum); + assert( zz!=0 ); + assert( strlen(zz)==iStart+n+sp ); + zz += iStart; memmove(zz+sp, zz, n); memset(zz, ' ', sp); } diff --git a/test/printf.test b/test/printf.test index 22d376101d..1f6af03936 100644 --- a/test/printf.test +++ b/test/printf.test @@ -3928,5 +3928,12 @@ do_execsql_test printf-20.21 { do_execsql_test printf-20.22 { SELECT format('<%!-6.2j>','いち, に, さん'); } {{<いち >}} +do_execsql_test printf-20.23 { + SELECT format('<%.7j>','abc"""def'); +} {{}} +do_execsql_test printf-20.24 { + SELECT format('<%j>','abc'||char(0x1f)||'def'); +} {{}} + finish_test