mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-11 01:42:22 +03:00
Add more code to enforce the limits specified in limits.h. (CVS 3946)
FossilOrigin-Name: c59d436095b5258d7132a432c0cb6cd5a7990d85
This commit is contained in:
24
manifest
24
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Avoid\sevaluating\s(INT_MIN/-1)\swith\s32\sbit\ssigned\snumbers.\sIt\scan\scause\sSIGFPE.\s(CVS\s3945)
|
C Add\smore\scode\sto\senforce\sthe\slimits\sspecified\sin\slimits.h.\s(CVS\s3946)
|
||||||
D 2007-05-08T13:57:34
|
D 2007-05-08T13:58:27
|
||||||
F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
|
F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
|
||||||
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
|
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@@ -64,7 +64,7 @@ F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f
|
|||||||
F src/btree.c 6d3db6416c71f678a4dd4719ce6d754ad5927c46
|
F src/btree.c 6d3db6416c71f678a4dd4719ce6d754ad5927c46
|
||||||
F src/btree.h 845543b5a53d5d8a80ea14aeeb521276602317b7
|
F src/btree.h 845543b5a53d5d8a80ea14aeeb521276602317b7
|
||||||
F src/btreeInt.h cb3c0e9eb842d06079a62cdf3492c90c5db7ba75
|
F src/btreeInt.h cb3c0e9eb842d06079a62cdf3492c90c5db7ba75
|
||||||
F src/build.c 94022eb081e10aa00149762ca5e0ed639673cedf
|
F src/build.c 5a60e2e4a21fa8cbdf9e01a95e6d5ca44ff4a2b9
|
||||||
F src/callback.c 9c12535669a638f90a67e10440b99c7b93c0fbf4
|
F src/callback.c 9c12535669a638f90a67e10440b99c7b93c0fbf4
|
||||||
F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675
|
F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675
|
||||||
F src/date.c c34a9c86ffd6da4cb3903ea038d977ec539d07e2
|
F src/date.c c34a9c86ffd6da4cb3903ea038d977ec539d07e2
|
||||||
@@ -76,7 +76,7 @@ F src/hash.c 67b23e14f0257b69a3e8aa663e4eeadc1a2b6fd5
|
|||||||
F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564
|
F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564
|
||||||
F src/insert.c e595ca26805dfb3a9ebaabc28e7947c479f3b14d
|
F src/insert.c e595ca26805dfb3a9ebaabc28e7947c479f3b14d
|
||||||
F src/legacy.c 388c71ad7fbcd898ba1bcbfc98a3ac954bfa5d01
|
F src/legacy.c 388c71ad7fbcd898ba1bcbfc98a3ac954bfa5d01
|
||||||
F src/limits.h 74b7f201cf75d0cffcfc40757de0e4caeeb1fca1
|
F src/limits.h 7275e16d02c0164177e466a1438e174cc1936f8d
|
||||||
F src/loadext.c afe4f4755dc49c36ef505748bbdddecb9f1d02a2
|
F src/loadext.c afe4f4755dc49c36ef505748bbdddecb9f1d02a2
|
||||||
F src/main.c 35b340716319e88817493172aa63abe8be13b543
|
F src/main.c 35b340716319e88817493172aa63abe8be13b543
|
||||||
F src/malloc.c b89e31258a85158d15795bf87ae3ba007e56329b
|
F src/malloc.c b89e31258a85158d15795bf87ae3ba007e56329b
|
||||||
@@ -94,12 +94,12 @@ F src/os_win.c 3b6169038101d06c54b4f04662bfd44b6cf2f289
|
|||||||
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
|
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
|
||||||
F src/pager.c 9c9a9df78636f4b9c8e18f90e93337a1231aaef7
|
F src/pager.c 9c9a9df78636f4b9c8e18f90e93337a1231aaef7
|
||||||
F src/pager.h 236e4065b3ca066e8e3edd43fbdd00e2c71a55d5
|
F src/pager.h 236e4065b3ca066e8e3edd43fbdd00e2c71a55d5
|
||||||
F src/parse.y a5bdc301e970ceb3826b56a84898b8966d5353f8
|
F src/parse.y efbca804082366871a11f5f272c17672186961d2
|
||||||
F src/pragma.c f426fef6b045dec23b1cf2f28397122a50fde109
|
F src/pragma.c f426fef6b045dec23b1cf2f28397122a50fde109
|
||||||
F src/prepare.c b35a6f23608264f1f0c4a5339b15d3b9361f0b85
|
F src/prepare.c c932f4398c3bf66fa366ad676c6f7e8ac5eaf7f6
|
||||||
F src/printf.c 67de0dcb40ef3297f4a047b434b81585c0f7062d
|
F src/printf.c 67de0dcb40ef3297f4a047b434b81585c0f7062d
|
||||||
F src/random.c 6119474a6f6917f708c1dee25b9a8e519a620e88
|
F src/random.c 6119474a6f6917f708c1dee25b9a8e519a620e88
|
||||||
F src/select.c a306d03fc7d8365055bef70c3563e8fca897460f
|
F src/select.c 114e7ebaa2e41d83687f0c7c5f53daa7e7af8d3a
|
||||||
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
|
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
|
||||||
F src/shell.c d07ae326b3815d80f71c69b3c7584382e47f6447
|
F src/shell.c d07ae326b3815d80f71c69b3c7584382e47f6447
|
||||||
F src/sqlite.h.in 8e00b44bf4e049df5b1520230c311bd39e264a49
|
F src/sqlite.h.in 8e00b44bf4e049df5b1520230c311bd39e264a49
|
||||||
@@ -126,7 +126,7 @@ F src/test_md5.c 6c42bc0a3c0b54be34623ff77a0eec32b2fa96e3
|
|||||||
F src/test_schema.c ced72140a3a25c148975428e170ec1850d3c3a7d
|
F src/test_schema.c ced72140a3a25c148975428e170ec1850d3c3a7d
|
||||||
F src/test_server.c a6460daed0b92ecbc2531b6dc73717470e7a648c
|
F src/test_server.c a6460daed0b92ecbc2531b6dc73717470e7a648c
|
||||||
F src/test_tclvar.c 315e77c17f128ff8c06b38c08617fd07c825a95b
|
F src/test_tclvar.c 315e77c17f128ff8c06b38c08617fd07c825a95b
|
||||||
F src/tokenize.c 7d611fc942ca0b12514eea2e1fbb148a65af23f2
|
F src/tokenize.c be3524e7f626340032108f40eecd6f6eb39b4b73
|
||||||
F src/trigger.c 420192efe3e6f03addf7897c60c3c8bf913d3493
|
F src/trigger.c 420192efe3e6f03addf7897c60c3c8bf913d3493
|
||||||
F src/update.c 3359041db390a8f856d67272f299600e2104f350
|
F src/update.c 3359041db390a8f856d67272f299600e2104f350
|
||||||
F src/utf.c e64a48bc21aa973eb622dd47da87d56a4cdcf528
|
F src/utf.c e64a48bc21aa973eb622dd47da87d56a4cdcf528
|
||||||
@@ -485,7 +485,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
||||||
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
||||||
P c2f90b465e37ea49c9e44415f6461e4f636bb64f
|
P 2f186e916c982cde557e0bc1b925b10e6d58f8a1
|
||||||
R 8a94e2639bae1ad4438acf25d1621598
|
R 66a21423994186eccfb2c3232e9829a5
|
||||||
U danielk1977
|
U drh
|
||||||
Z 56e204849a8e4b3c180ad14c5310ff41
|
Z b93bfcd0453e2fb25e098403e201422f
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2f186e916c982cde557e0bc1b925b10e6d58f8a1
|
c59d436095b5258d7132a432c0cb6cd5a7990d85
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
** COMMIT
|
** COMMIT
|
||||||
** ROLLBACK
|
** ROLLBACK
|
||||||
**
|
**
|
||||||
** $Id: build.c,v 1.426 2007/05/08 01:08:49 drh Exp $
|
** $Id: build.c,v 1.427 2007/05/08 13:58:27 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -910,6 +910,10 @@ void sqlite3AddColumn(Parse *pParse, Token *pName){
|
|||||||
char *z;
|
char *z;
|
||||||
Column *pCol;
|
Column *pCol;
|
||||||
if( (p = pParse->pNewTable)==0 ) return;
|
if( (p = pParse->pNewTable)==0 ) return;
|
||||||
|
if( p->nCol+1>SQLITE_MAX_COLUMN ){
|
||||||
|
sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
z = sqlite3NameFromToken(pName);
|
z = sqlite3NameFromToken(pName);
|
||||||
if( z==0 ) return;
|
if( z==0 ) return;
|
||||||
for(i=0; i<p->nCol; i++){
|
for(i=0; i<p->nCol; i++){
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
**
|
**
|
||||||
** This file defines various limits of what SQLite can process.
|
** This file defines various limits of what SQLite can process.
|
||||||
**
|
**
|
||||||
** @(#) $Id: limits.h,v 1.1 2007/05/08 01:08:49 drh Exp $
|
** @(#) $Id: limits.h,v 1.2 2007/05/08 13:58:28 drh Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
** dozen values in any of the other situations described above.
|
** dozen values in any of the other situations described above.
|
||||||
*/
|
*/
|
||||||
#ifndef SQLITE_MAX_COLUMN
|
#ifndef SQLITE_MAX_COLUMN
|
||||||
# define SQLITE_MAX_COLUMN 1000
|
# define SQLITE_MAX_COLUMN 2000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
** the parser. Lemon will also generate a header file containing
|
** the parser. Lemon will also generate a header file containing
|
||||||
** numeric codes for all of the tokens.
|
** numeric codes for all of the tokens.
|
||||||
**
|
**
|
||||||
** @(#) $Id: parse.y,v 1.222 2007/05/04 18:30:41 drh Exp $
|
** @(#) $Id: parse.y,v 1.223 2007/05/08 13:58:28 drh Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// All token codes are small integers with #defines that begin with "TK_"
|
// All token codes are small integers with #defines that begin with "TK_"
|
||||||
@@ -657,11 +657,17 @@ expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). {
|
|||||||
}
|
}
|
||||||
%endif SQLITE_OMIT_CAST
|
%endif SQLITE_OMIT_CAST
|
||||||
expr(A) ::= ID(X) LP distinct(D) exprlist(Y) RP(E). {
|
expr(A) ::= ID(X) LP distinct(D) exprlist(Y) RP(E). {
|
||||||
|
if( Y->nExpr>SQLITE_MAX_FUNCTION_ARG ){
|
||||||
|
sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
|
||||||
|
sqlite3ExprListDelete(Y);
|
||||||
|
A = 0;
|
||||||
|
}else{
|
||||||
A = sqlite3ExprFunction(Y, &X);
|
A = sqlite3ExprFunction(Y, &X);
|
||||||
sqlite3ExprSpan(A,&X,&E);
|
sqlite3ExprSpan(A,&X,&E);
|
||||||
if( D && A ){
|
if( D && A ){
|
||||||
A->flags |= EP_Distinct;
|
A->flags |= EP_Distinct;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expr(A) ::= ID(X) LP STAR RP(E). {
|
expr(A) ::= ID(X) LP STAR RP(E). {
|
||||||
A = sqlite3ExprFunction(0, &X);
|
A = sqlite3ExprFunction(0, &X);
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
** interface, and routines that contribute to loading the database schema
|
** interface, and routines that contribute to loading the database schema
|
||||||
** from disk.
|
** from disk.
|
||||||
**
|
**
|
||||||
** $Id: prepare.c,v 1.48 2007/05/08 01:08:49 drh Exp $
|
** $Id: prepare.c,v 1.49 2007/05/08 13:58:28 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
@@ -490,7 +490,11 @@ int sqlite3Prepare(
|
|||||||
memset(&sParse, 0, sizeof(sParse));
|
memset(&sParse, 0, sizeof(sParse));
|
||||||
sParse.db = db;
|
sParse.db = db;
|
||||||
if( nBytes>=0 && zSql[nBytes]!=0 ){
|
if( nBytes>=0 && zSql[nBytes]!=0 ){
|
||||||
char *zSqlCopy = sqlite3StrNDup(zSql, nBytes);
|
char *zSqlCopy;
|
||||||
|
if( nBytes>SQLITE_MAX_SQL_LENGTH ){
|
||||||
|
return SQLITE_TOOBIG;
|
||||||
|
}
|
||||||
|
zSqlCopy = sqlite3StrNDup(zSql, nBytes);
|
||||||
if( zSqlCopy ){
|
if( zSqlCopy ){
|
||||||
sqlite3RunParser(&sParse, zSqlCopy, &zErrMsg);
|
sqlite3RunParser(&sParse, zSqlCopy, &zErrMsg);
|
||||||
sqliteFree(zSqlCopy);
|
sqliteFree(zSqlCopy);
|
||||||
|
|||||||
10
src/select.c
10
src/select.c
@@ -12,7 +12,7 @@
|
|||||||
** This file contains C code routines that are called by the parser
|
** This file contains C code routines that are called by the parser
|
||||||
** to handle SELECT statements in SQLite.
|
** to handle SELECT statements in SQLite.
|
||||||
**
|
**
|
||||||
** $Id: select.c,v 1.341 2007/05/06 20:04:25 drh Exp $
|
** $Id: select.c,v 1.342 2007/05/08 13:58:28 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
|
|
||||||
@@ -1359,6 +1359,10 @@ static int prepSelectStmt(Parse *pParse, Select *p){
|
|||||||
sqlite3ExprListDelete(pEList);
|
sqlite3ExprListDelete(pEList);
|
||||||
p->pEList = pNew;
|
p->pEList = pNew;
|
||||||
}
|
}
|
||||||
|
if( p->pEList && p->pEList->nExpr>SQLITE_MAX_COLUMN ){
|
||||||
|
sqlite3ErrorMsg(pParse, "too many columns in result set");
|
||||||
|
rc = SQLITE_ERROR;
|
||||||
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2500,6 +2504,10 @@ static int processOrderGroupBy(
|
|||||||
assert( pEList );
|
assert( pEList );
|
||||||
|
|
||||||
if( pOrderBy==0 ) return 0;
|
if( pOrderBy==0 ) return 0;
|
||||||
|
if( pOrderBy->nExpr>SQLITE_MAX_COLUMN ){
|
||||||
|
sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
for(i=0; i<pOrderBy->nExpr; i++){
|
for(i=0; i<pOrderBy->nExpr; i++){
|
||||||
int iCol;
|
int iCol;
|
||||||
Expr *pE = pOrderBy->a[i].pExpr;
|
Expr *pE = pOrderBy->a[i].pExpr;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
** individual tokens and sends those tokens one-by-one over to the
|
** individual tokens and sends those tokens one-by-one over to the
|
||||||
** parser for analysis.
|
** parser for analysis.
|
||||||
**
|
**
|
||||||
** $Id: tokenize.c,v 1.126 2007/04/16 15:06:25 danielk1977 Exp $
|
** $Id: tokenize.c,v 1.127 2007/05/08 13:58:28 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
@@ -421,6 +421,10 @@ int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
|
|||||||
assert( pParse->sLastToken.dyn==0 );
|
assert( pParse->sLastToken.dyn==0 );
|
||||||
pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);
|
pParse->sLastToken.n = getToken((unsigned char*)&zSql[i],&tokenType);
|
||||||
i += pParse->sLastToken.n;
|
i += pParse->sLastToken.n;
|
||||||
|
if( i>SQLITE_MAX_SQL_LENGTH ){
|
||||||
|
pParse->rc = SQLITE_TOOBIG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
switch( tokenType ){
|
switch( tokenType ){
|
||||||
case TK_SPACE:
|
case TK_SPACE:
|
||||||
case TK_COMMENT: {
|
case TK_COMMENT: {
|
||||||
|
|||||||
Reference in New Issue
Block a user