mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Do not use strcpy() on overlapping buffers. (CVS 1187)
FossilOrigin-Name: ed6bd2eb39a0940c4f41d365ddc81ecc7066cf4e
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Access\sto\sfree()ed\smemory\sproblem\sfixed.\s\sFound\sby\selectric\sfence.\nOnly\san\sissue\swhen\sdoing\san\sEXPLAIN\sof\sa\sCREATE\sINDEX.\s(CVS\s1186)
|
C Do\snot\suse\sstrcpy()\son\soverlapping\sbuffers.\s(CVS\s1187)
|
||||||
D 2004-01-16T20:01:31
|
D 2004-01-17T01:16:21
|
||||||
F Makefile.in 0515ff9218ad8d5a8f6220f0494b8ef94c67013b
|
F Makefile.in 0515ff9218ad8d5a8f6220f0494b8ef94c67013b
|
||||||
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
|
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
|
||||||
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
||||||
@@ -28,7 +28,7 @@ F src/btree.h 9b7c09f1e64274d7bb74a57bbfc63778f67b1048
|
|||||||
F src/btree_rb.c 50210dfd2a5f410c8624ef8fde8e82babd376d9f
|
F src/btree_rb.c 50210dfd2a5f410c8624ef8fde8e82babd376d9f
|
||||||
F src/build.c 4b95b200515d1f6ffc4ae60d5d57380afa0b4081
|
F src/build.c 4b95b200515d1f6ffc4ae60d5d57380afa0b4081
|
||||||
F src/copy.c 9e47975ea96751c658bcf1a0c4f0bb7c6ee61e73
|
F src/copy.c 9e47975ea96751c658bcf1a0c4f0bb7c6ee61e73
|
||||||
F src/date.c bb89fdb9c89e367b9a728c58cb96e4823974a2c1
|
F src/date.c c6b7e3fa5364d50fe19641882194f3c75364a5af
|
||||||
F src/delete.c 0f81e6799c089487615d38e042a2de4d2d6192bc
|
F src/delete.c 0f81e6799c089487615d38e042a2de4d2d6192bc
|
||||||
F src/encode.c 9e70ea1e4e746f23f18180949e94f1bb1c2220d3
|
F src/encode.c 9e70ea1e4e746f23f18180949e94f1bb1c2220d3
|
||||||
F src/expr.c e6a05bec1ca8d80d0901e5ff59c4ce3d9553f6cc
|
F src/expr.c e6a05bec1ca8d80d0901e5ff59c4ce3d9553f6cc
|
||||||
@@ -180,7 +180,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3
|
|||||||
F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
|
F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
|
||||||
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
|
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
|
||||||
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
|
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
|
||||||
P a0f8b1f3cea9a0542f8d36898bf98df3c59f12e0
|
P 6604e5f7d332b484e84d177f93c9d9f2ab54a32b
|
||||||
R 22d0a66cb7de0b8a060be537991d2422
|
R 56122f9d9725d849b260b2f540e95202
|
||||||
U drh
|
U drh
|
||||||
Z df4ea589467fac8b0c735260f2083f34
|
Z 081176abfab2dbf18cbd619ec8f258ba
|
||||||
|
@@ -1 +1 @@
|
|||||||
6604e5f7d332b484e84d177f93c9d9f2ab54a32b
|
ed6bd2eb39a0940c4f41d365ddc81ecc7066cf4e
|
22
src/date.c
22
src/date.c
@@ -16,7 +16,7 @@
|
|||||||
** sqliteRegisterDateTimeFunctions() found at the bottom of the file.
|
** sqliteRegisterDateTimeFunctions() found at the bottom of the file.
|
||||||
** All other code has file scope.
|
** All other code has file scope.
|
||||||
**
|
**
|
||||||
** $Id: date.c,v 1.8 2004/01/08 02:17:32 drh Exp $
|
** $Id: date.c,v 1.9 2004/01/17 01:16:21 drh Exp $
|
||||||
**
|
**
|
||||||
** NOTES:
|
** NOTES:
|
||||||
**
|
**
|
||||||
@@ -452,8 +452,9 @@ static int parseModifier(const char *zMod, DateTime *p){
|
|||||||
int rc = 1;
|
int rc = 1;
|
||||||
int n;
|
int n;
|
||||||
double r;
|
double r;
|
||||||
char z[30];
|
char *z, zBuf[30];
|
||||||
for(n=0; n<sizeof(z)-1 && zMod[n]; n++){
|
z = zBuf;
|
||||||
|
for(n=0; n<sizeof(zBuf)-1 && zMod[n]; n++){
|
||||||
z[n] = tolower(zMod[n]);
|
z[n] = tolower(zMod[n]);
|
||||||
}
|
}
|
||||||
z[n] = 0;
|
z[n] = 0;
|
||||||
@@ -526,22 +527,22 @@ static int parseModifier(const char *zMod, DateTime *p){
|
|||||||
** or month or year.
|
** or month or year.
|
||||||
*/
|
*/
|
||||||
if( strncmp(z, "start of ", 9)!=0 ) break;
|
if( strncmp(z, "start of ", 9)!=0 ) break;
|
||||||
zMod = &z[9];
|
z += 9;
|
||||||
computeYMD(p);
|
computeYMD(p);
|
||||||
p->validHMS = 1;
|
p->validHMS = 1;
|
||||||
p->h = p->m = 0;
|
p->h = p->m = 0;
|
||||||
p->s = 0.0;
|
p->s = 0.0;
|
||||||
p->validTZ = 0;
|
p->validTZ = 0;
|
||||||
p->validJD = 0;
|
p->validJD = 0;
|
||||||
if( strcmp(zMod,"month")==0 ){
|
if( strcmp(z,"month")==0 ){
|
||||||
p->D = 1;
|
p->D = 1;
|
||||||
rc = 0;
|
rc = 0;
|
||||||
}else if( strcmp(zMod,"year")==0 ){
|
}else if( strcmp(z,"year")==0 ){
|
||||||
computeYMD(p);
|
computeYMD(p);
|
||||||
p->M = 1;
|
p->M = 1;
|
||||||
p->D = 1;
|
p->D = 1;
|
||||||
rc = 0;
|
rc = 0;
|
||||||
}else if( strcmp(zMod,"day")==0 ){
|
}else if( strcmp(z,"day")==0 ){
|
||||||
rc = 0;
|
rc = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -560,11 +561,10 @@ static int parseModifier(const char *zMod, DateTime *p){
|
|||||||
case '9': {
|
case '9': {
|
||||||
n = getValue(z, &r);
|
n = getValue(z, &r);
|
||||||
if( n<=0 ) break;
|
if( n<=0 ) break;
|
||||||
zMod = &z[n];
|
z += n;
|
||||||
while( isspace(zMod[0]) ) zMod++;
|
while( isspace(z[0]) ) z++;
|
||||||
n = strlen(zMod);
|
n = strlen(z);
|
||||||
if( n>10 || n<3 ) break;
|
if( n>10 || n<3 ) break;
|
||||||
strcpy(z, zMod);
|
|
||||||
if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
|
if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
|
||||||
computeJD(p);
|
computeJD(p);
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
Reference in New Issue
Block a user