]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Update documentation to explain that a odd nByte parameter to
authordrh <>
Wed, 24 Jun 2026 12:22:22 +0000 (12:22 +0000)
committerdrh <>
Wed, 24 Jun 2026 12:22:22 +0000 (12:22 +0000)
sqlite3_prepare16() is undefined behavior.  In addition, always round
down the nByte parameter to an even number so that it in fact harmless
to give it an odd nByte value.
[bugs:/info/2026-06-24T11:25:24Z|Bug 2026-06-24T11:25:24Z].

FossilOrigin-Name: 7af7c501b60358cf84e843eb147e6edf9a5aaca30b1c570abe63ca68b54e3ec2

manifest
manifest.uuid
src/prepare.c
src/sqlite.h.in

index 2432b0625425a2d4407fa7fb218bd1b91a1aa8a8..213da95c313a56a34493c7ac87ad93f36b9a36a6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fixes\sfor\sSQLITE_OMIT_FLOATING_POINT.
-D 2026-06-24T11:51:35.372
+C Update\sdocumentation\sto\sexplain\sthat\sa\sodd\snByte\sparameter\sto\nsqlite3_prepare16()\sis\sundefined\sbehavior.\s\sIn\saddition,\salways\sround\ndown\sthe\snByte\sparameter\sto\san\seven\snumber\sso\sthat\sit\sin\sfact\sharmless\nto\sgive\sit\san\sodd\snByte\svalue.\n[bugs:/info/2026-06-24T11:25:24Z|Bug\s2026-06-24T11:25:24Z].
+D 2026-06-24T12:22:22.492
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -732,14 +732,14 @@ F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
 F src/pcache.h 092b758d2c5e4dabb30eae46d8dfad77c0f70b16bf3ff1943f7a232b0fe0d4ba
 F src/pcache1.c d7ee0f95992501a65379f620b3de1430b64e52e397769938668a9fd9dd1c8145
 F src/pragma.c 789ef67117b74b5be0a2db6681f7f0c55e6913791b9da309aefd280de2c8a74d
-F src/prepare.c d055c59c23b917367ed199a52888132316aa9cb9f7653ca71f0c45bd267206fd
+F src/prepare.c b1337cd601f8cb58c07a61bafdf2e501332dd1a07959c5d1c118a5adef01f4c7
 F src/printf.c 6916d50913c3271aefe96d3483701ceca8644331ec4c7b23a5aa54a9ba36230f
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c d0724113da9f5c0430d2052808ce59519f51ae7c4fbb1f5ef21fe3a832956086
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c 80ea6935f8470b97d1212bc1b759b7fadb28351797877f493d0cf598be1fef5e
 F src/shell.c.in a4e83895cfa336065ad7f7a7dea8fc2a19d050f7ce7466621c67208acaac9e44
-F src/sqlite.h.in 8c70db561507478176b942a3f88cac396e00993eafb827ed31d48c191f327408
+F src/sqlite.h.in 57e0bf0e047dca1d2257dc96e597eebac6d54cd11e9f4ef67d4490341596bc62
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 0efd4723bad9124ea1f581d9f1ea0254ac1c6f3e5fb29e4f3dcf36c72485a456
 F src/sqliteInt.h 92563b8edc673513b82d87bf6a8d7aeb554b2c7b7d5e30992fbca04010db79ac
@@ -2208,8 +2208,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 23936786e680131af644510eb50b7ad20ee39221d1fb29732dea76483aed2273
-R 14dd7d0c397010fc5fc4a1f263437795
+P 9725b513c0b9fe488289ac42db59af29b62ac7551f5d1de5064147ec3ca4a2fa
+R 4707e90a6447d96f76544382faa53c82
 U drh
-Z 65295beb3412023ecbd41cc57c827bfd
+Z fb6b9eb41dd0e794dce97e3e7aa79c9e
 # Remove this line to create a well-formed Fossil manifest.
index 6908b2dda542ddbdeb2988511b7ccb571bcb23e7..d59f1aab0345fd4dafadcf72d5f120c7f743be22 100644 (file)
@@ -1 +1 @@
-9725b513c0b9fe488289ac42db59af29b62ac7551f5d1de5064147ec3ca4a2fa
+7af7c501b60358cf84e843eb147e6edf9a5aaca30b1c570abe63ca68b54e3ec2
index 29be827cc47f7e980a36fb3f4c76e09f504519fc..cd209f2bbbab4ce58217faf23ade30ed4b018078 100644 (file)
@@ -1064,7 +1064,7 @@ int sqlite3_prepare16(
   const void **pzTail       /* OUT: End of parsed string */
 ){
   int rc;
-  rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
+  rc = sqlite3Prepare16(db,zSql,nBytes&~1,0,ppStmt,pzTail);
   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
   return rc;
 }
@@ -1076,7 +1076,7 @@ int sqlite3_prepare16_v2(
   const void **pzTail       /* OUT: End of parsed string */
 ){
   int rc;
-  rc = sqlite3Prepare16(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,ppStmt,pzTail);
+  rc = sqlite3Prepare16(db,zSql,nBytes&~1,SQLITE_PREPARE_SAVESQL,ppStmt,pzTail);
   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
   return rc;
 }
@@ -1089,7 +1089,7 @@ int sqlite3_prepare16_v3(
   const void **pzTail       /* OUT: End of parsed string */
 ){
   int rc;
-  rc = sqlite3Prepare16(db,zSql,nBytes,
+  rc = sqlite3Prepare16(db,zSql,nBytes&~1,
          SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK),
          ppStmt,pzTail);
   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
index 58e46f8493d22fd1d5d7fa59ae4d7e138ceb5c89..530aab89ea2d149ab50297546a0fcee40eaa96ae 100644 (file)
@@ -4546,6 +4546,8 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
 ** the nul-terminator.
 ** Note that nByte measures the length of the input in bytes, not
 ** characters, even for the UTF-16 interfaces.
+** For the sqlite3_prepare16() and sqlite3_prepare16_v2() interfaces,
+** the nByte value must be even or undefined behavior can result.
 **
 ** ^If pzTail is not NULL then *pzTail is made to point to the first byte
 ** past the end of the first SQL statement in zSql.  These routines only