From 4d5b836545cbd867732e02a656b527c8da1d9608 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 17 Jan 2004 01:16:21 +0000 Subject: [PATCH] Do not use strcpy() on overlapping buffers. (CVS 1187) FossilOrigin-Name: ed6bd2eb39a0940c4f41d365ddc81ecc7066cf4e --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/date.c | 22 +++++++++++----------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index 27f754a541..fa77bb3662 100644 --- a/manifest +++ b/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) -D 2004-01-16T20:01:31 +C Do\snot\suse\sstrcpy()\son\soverlapping\sbuffers.\s(CVS\s1187) +D 2004-01-17T01:16:21 F Makefile.in 0515ff9218ad8d5a8f6220f0494b8ef94c67013b F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -28,7 +28,7 @@ F src/btree.h 9b7c09f1e64274d7bb74a57bbfc63778f67b1048 F src/btree_rb.c 50210dfd2a5f410c8624ef8fde8e82babd376d9f F src/build.c 4b95b200515d1f6ffc4ae60d5d57380afa0b4081 F src/copy.c 9e47975ea96751c658bcf1a0c4f0bb7c6ee61e73 -F src/date.c bb89fdb9c89e367b9a728c58cb96e4823974a2c1 +F src/date.c c6b7e3fa5364d50fe19641882194f3c75364a5af F src/delete.c 0f81e6799c089487615d38e042a2de4d2d6192bc F src/encode.c 9e70ea1e4e746f23f18180949e94f1bb1c2220d3 F src/expr.c e6a05bec1ca8d80d0901e5ff59c4ce3d9553f6cc @@ -180,7 +180,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3 F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 -P a0f8b1f3cea9a0542f8d36898bf98df3c59f12e0 -R 22d0a66cb7de0b8a060be537991d2422 +P 6604e5f7d332b484e84d177f93c9d9f2ab54a32b +R 56122f9d9725d849b260b2f540e95202 U drh -Z df4ea589467fac8b0c735260f2083f34 +Z 081176abfab2dbf18cbd619ec8f258ba diff --git a/manifest.uuid b/manifest.uuid index 482372b699..b6cdd1d0d5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6604e5f7d332b484e84d177f93c9d9f2ab54a32b \ No newline at end of file +ed6bd2eb39a0940c4f41d365ddc81ecc7066cf4e \ No newline at end of file diff --git a/src/date.c b/src/date.c index 4700cde15f..062b88beb8 100644 --- a/src/date.c +++ b/src/date.c @@ -16,7 +16,7 @@ ** sqliteRegisterDateTimeFunctions() found at the bottom of the file. ** 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: ** @@ -452,8 +452,9 @@ static int parseModifier(const char *zMod, DateTime *p){ int rc = 1; int n; double r; - char z[30]; - for(n=0; nvalidHMS = 1; p->h = p->m = 0; p->s = 0.0; p->validTZ = 0; p->validJD = 0; - if( strcmp(zMod,"month")==0 ){ + if( strcmp(z,"month")==0 ){ p->D = 1; rc = 0; - }else if( strcmp(zMod,"year")==0 ){ + }else if( strcmp(z,"year")==0 ){ computeYMD(p); p->M = 1; p->D = 1; rc = 0; - }else if( strcmp(zMod,"day")==0 ){ + }else if( strcmp(z,"day")==0 ){ rc = 0; } break; @@ -560,11 +561,10 @@ static int parseModifier(const char *zMod, DateTime *p){ case '9': { n = getValue(z, &r); if( n<=0 ) break; - zMod = &z[n]; - while( isspace(zMod[0]) ) zMod++; - n = strlen(zMod); + z += n; + while( isspace(z[0]) ) z++; + n = strlen(z); if( n>10 || n<3 ) break; - strcpy(z, zMod); if( z[n-1]=='s' ){ z[n-1] = 0; n--; } computeJD(p); rc = 0;