From 792103a0f2f805d5682ae443d50d6f731a9e3bfc Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 2 Nov 2023 22:11:35 +0000 Subject: [PATCH] In the previous check-in, use a u32 instead of an int, to make it easier to prove that the integer will never overflow. FossilOrigin-Name: 51002079e0b499e116415189a913a238e95ed9766a8af9d042928f4263861a87 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/resolve.c | 4 +++- src/sqliteInt.h | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index d29835ad88..b820b0b5e0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sspurious\s"misuse\sof\saggregate\sfunction"\serror\sthat\scould\soccur\swhen\san\saggregate\sfunction\swas\sused\swithin\sthe\sFROM\sclause\sof\sa\ssub-select\sof\sthe\sselect\sthat\sowns\sthe\saggregate.\se.g.\s"SELECT\s(SELECT\sx\sFROM\s(SELECT\ssum(t1.a)\sAS\sx))\sFROM\st1".\s[forum:/forumpost/c9970a37ed\s|\sForum\spost\sc9970a37ed]. -D 2023-11-02T21:02:53.455 +C In\sthe\sprevious\scheck-in,\suse\sa\su32\sinstead\sof\san\sint,\sto\smake\sit\seasier\sto\nprove\sthat\sthe\sinteger\swill\snever\soverflow. +D 2023-11-02T22:11:35.443 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -721,14 +721,14 @@ F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7 F src/prepare.c bde74add20fc0e8ce0c4e937a1f70a36d17413afe4f71d3e103f5cb74b17c8d9 F src/printf.c 9da63b9ae1c14789bcae12840f5d800fd9302500cd2d62733fac77f0041b4750 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c -F src/resolve.c c74f10e6adf35e2b60e63cba7306a07f976cf119fc29a57845a1ddf3c35ddc68 +F src/resolve.c d017bad7ba8e778617701a0e986fdeb393d67d6afa84fb28ef4e8b8ad2acf916 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c a19daa26e95f7245106a31f288b2f50c72d1f2cc156703f04c8c91450e111515 F src/shell.c.in aebfbedaa7706d2c73ab7366a19fc8bc40ea68b70d2529f7feef54e6eb077ea2 F src/sqlite.h.in ef0e41e83ad1ac0dcc9ec9939bf541a44b1c5de821bee2d6c61754c3252f3276 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 -F src/sqliteInt.h f0185af5bbc434fd047c01e8ddd81c9b093fd304b5abb08547301fca70788b8b +F src/sqliteInt.h 707095a0591e02f4866ed9798cbdd97a8ae8cf4d98f061808944c2cd1c95d1a9 F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee1fb6 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@ -2141,8 +2141,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0d50172477064dce3f7c61641d88aa15d8a1edea9872adaffcc1a7a1c9ab0e93 -R b1c591059f07d73b87055d331d542a79 -U dan -Z b418469e6326d7ed346db9d2f8a70c19 +P 4470f657d2069972d02a00983252dec1f814d90c0d8d0906e320e955111e8c11 +R 79c60d9c26c18e4bd3eb97f7d6131505 +U drh +Z b5e2ca2c6ff3e7234971fa445deb54ad # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 652d910b8f..1eec801737 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4470f657d2069972d02a00983252dec1f814d90c0d8d0906e320e955111e8c11 \ No newline at end of file +51002079e0b499e116415189a913a238e95ed9766a8af9d042928f4263861a87 \ No newline at end of file diff --git a/src/resolve.c b/src/resolve.c index a0134fd57c..5f675c1d2d 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1838,7 +1838,9 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ } } } - if( pOuterNC ) pOuterNC->nNestedSelect--; + if( pOuterNC && ALWAYS(pOuterNC->nNestedSelect>0) ){ + pOuterNC->nNestedSelect--; + } /* Set up the local name-context to pass to sqlite3ResolveExprNames() to ** resolve the result-set expression list. diff --git a/src/sqliteInt.h b/src/sqliteInt.h index c8288736b3..23beb48de3 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3397,7 +3397,7 @@ struct NameContext { int nRef; /* Number of names resolved by this context */ int nNcErr; /* Number of errors encountered while resolving names */ int ncFlags; /* Zero or more NC_* flags defined below */ - int nNestedSelect; /* Number of nested selects using this NC */ + u32 nNestedSelect; /* Number of nested selects using this NC */ Select *pWinSelect; /* SELECT statement for any window functions */ }; -- 2.47.2