From: drh <> Date: Thu, 20 Nov 2025 11:06:58 +0000 (+0000) Subject: Use sqlite3MPrintf() instead of sqlite3_mprintf() internally in alter.c, X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Falter-table-constraints;p=thirdparty%2Fsqlite.git Use sqlite3MPrintf() instead of sqlite3_mprintf() internally in alter.c, for improved OOM reporting. FossilOrigin-Name: 57555d75daa2ee8345f8329749841a322b3e57679e5c4899ef749c8bc814812d --- diff --git a/manifest b/manifest index a26e7d89c6..2c1aa727a7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Additional\schecks\sfor\sOOM\sconditions. -D 2025-11-20T02:03:57.963 +C Use\ssqlite3MPrintf()\sinstead\sof\ssqlite3_mprintf()\sinternally\sin\salter.c,\nfor\simproved\sOOM\sreporting. +D 2025-11-20T11:06:58.496 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -666,7 +666,7 @@ F mptest/multiwrite01.test dab5c5f8f9534971efce679152c5146da265222d F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 1b9c24374a85dfc7eb8fa7c4266ee0db4f9609cceecfc5481cd8307e5af04366 F sqlite3.pc.in e6dee284fba59ef500092fdc1843df3be8433323a3733c91da96690a50a5b398 -F src/alter.c d7151775cf5d32d0eef917f5058791c571417fd2852f4ad4e7a29748098c6503 +F src/alter.c f31437552c733957f19351cdfae8fad8e8f0c7d11041e5b7966aae57206ad91f F src/analyze.c 03bcfc083fc0cccaa9ded93604e1d4244ea245c17285d463ef6a60425fcb247d F src/attach.c 9af61b63b10ee702b1594ecd24fb8cea0839cfdb6addee52fba26fa879f5db9d F src/auth.c 54ab9c6c5803b47c0d45b76ce27eff22a03b4b1f767c5945a3a4eb13aa4c78dc @@ -2177,8 +2177,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P df2259a32fd65986eafceb2c551e6e1661927f1f5b18dbb97c59d9627279eea0 -R f7bd098503221c71a258f97d8f310236 +P 8fafd4988bf1fa1aa799c2834dd31bebdd52e7ae8e68c0197ccb497eb9b1e5f6 +R db1904a60d74ce682aea26b215aeb826 U drh -Z 20fc64fb6a35782adf034c6413836124 +Z f97a43221f64e29debc08ffbb7442414 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 12091d76e6..d3eecd4c35 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8fafd4988bf1fa1aa799c2834dd31bebdd52e7ae8e68c0197ccb497eb9b1e5f6 +57555d75daa2ee8345f8329749841a322b3e57679e5c4899ef749c8bc814812d diff --git a/src/alter.c b/src/alter.c index 6a81decd5c..c5a64211f8 100644 --- a/src/alter.c +++ b/src/alter.c @@ -2519,6 +2519,7 @@ static void dropConstraintFunc( int iEnd = 0; char *zNew = 0; int t = 0; + sqlite3 *db; UNUSED_PARAMETER(NotUsed); if( zSql==0 ) return; @@ -2624,13 +2625,9 @@ static void dropConstraintFunc( if( zSql[iStart-1]==',' ) iStart--; } - zNew = sqlite3_mprintf("%.*s%s%s", iStart, zSql, zSpace, &zSql[iEnd]); - if( zNew==0 ){ - sqlite3_result_error_nomem(ctx); - }else{ - sqlite3_result_text(ctx, zNew, -1, SQLITE_TRANSIENT); - sqlite3_free(zNew); - } + db = sqlite3_context_db_handle(ctx); + zNew = sqlite3MPrintf(db, "%.*s%s%s", iStart, zSql, zSpace, &zSql[iEnd]); + sqlite3_result_text(ctx, zNew, -1, SQLITE_DYNAMIC); } } @@ -2655,6 +2652,7 @@ static void addConstraintFunc( int ii; char *zNew = 0; int t = 0; + sqlite3 *db; UNUSED_PARAMETER(NotUsed); if( skipCreateTable(ctx, zSql, &iOff) ) return; @@ -2674,18 +2672,13 @@ static void addConstraintFunc( iOff += getWhitespace(&zSql[iOff]); + db = sqlite3_context_db_handle(ctx); if( iCol<0 ){ - zNew = sqlite3_mprintf("%.*s, %s%s", iOff, zSql, zCons, &zSql[iOff]); - }else{ - zNew = sqlite3_mprintf("%.*s %s%s", iOff, zSql, zCons, &zSql[iOff]); - } - - if( zNew==0 ){ - sqlite3_result_error_nomem(ctx); + zNew = sqlite3MPrintf(db, "%.*s, %s%s", iOff, zSql, zCons, &zSql[iOff]); }else{ - sqlite3_result_text(ctx, zNew, -1, SQLITE_TRANSIENT); - sqlite3_free(zNew); + zNew = sqlite3MPrintf(db, "%.*s %s%s", iOff, zSql, zCons, &zSql[iOff]); } + sqlite3_result_text(ctx, zNew, -1, SQLITE_DYNAMIC); } /* @@ -2849,14 +2842,11 @@ static int alterRtrimConstraint( const char *pCons, /* Buffer containing constraint */ int nCons /* Size of pCons in bytes */ ){ - u8 *zTmp = (u8*)sqlite3_mprintf("%.*s", nCons, pCons); + u8 *zTmp = (u8*)sqlite3MPrintf(db, "%.*s", nCons, pCons); int iOff = 0; int iEnd = 0; - if( zTmp==0 ){ - sqlite3OomFault(db); - return 0; - } + if( zTmp==0 ) return 0; while( 1 ){ int t = 0; @@ -2868,7 +2858,7 @@ static int alterRtrimConstraint( iOff += nToken; } - sqlite3_free(zTmp); + sqlite3DbFree(db, zTmp); return iEnd; }