You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-util/dmake/files/4.12-fix-overlapping-stcpys...

234 lines
6.5 KiB

diff -ru dmake.orig/rulparse.c dmake/rulparse.c
--- dmake.orig/rulparse.c 2009-07-29 13:31:47.000000000 +0100
+++ dmake/rulparse.c 2009-07-29 13:32:09.000000000 +0100
@@ -897,7 +897,7 @@
/* Handle %-targets. */
CELLPTR cur;
CELLPTR tpq = NIL(CELL);
- CELLPTR nprq;
+ CELLPTR nprq = NULL;
#ifdef DBUG
DB_PRINT( "%", ("Handling %%-target [%s : : <prerequisites follow, maybe empty>]",
@@ -915,7 +915,8 @@
if( *name == '\'' && name[len-1]=='\'' ){
name[len-1] = '\0';
- strcpy(name,name+1);
+ len = strlen(name+1)+1;
+ memmove(name,name+1,len);
/* add indirect prerequisite */
_add_indirect_prereq( cur );
}
diff -ru dmake.orig/dag.c dmake/dag.c
--- dmake.orig/dag.c 2009-08-07 20:18:31.000000000 +0100
+++ dmake/dag.c 2009-08-07 20:30:59.000000000 +0100
@@ -369,14 +369,17 @@
/* strip out any \<nl> combinations where \ is the current
* CONTINUATION char */
for(p=q; (p=strchr(p,CONTINUATION_CHAR))!=NIL(char); )
- if( p[1] == '\n' )
- strcpy( p, p+2 );
+ if( p[1] == '\n' ) {
+ size_t len = strlen(p+2)+1;
+ memmove ( p, p+2, len );
+ }
else
p++;
p = DmStrSpn(q ," \t"); /* Strip white space before ... */
if( p != q ) {
- strcpy( q, p);
+ size_t len = strlen(p)+1;
+ memmove( q, p, len );
p = q;
}
diff -ru dmake.orig/expand.c dmake/expand.c
--- dmake.orig/expand.c 2009-08-07 20:18:34.000000000 +0100
+++ dmake/expand.c 2009-08-07 20:42:40.000000000 +0100
@@ -230,6 +230,7 @@
char *tok;
{
if( strchr( "\"\\vantbrf01234567", tok[1] ) ) {
+ size_t len;
switch( tok[1] ) {
case 'a' : *tok = 0x07; break;
case 'b' : *tok = '\b'; break;
@@ -246,13 +247,15 @@
register int j = 0;
for( ; i<2 && isdigit(tok[2]); i++ ) {
j = (j << 3) + (tok[1] - '0');
- strcpy( tok+1, tok+2 );
+ len = strlen(tok+2)+1;
+ memmove( tok+1, tok+2, len );
}
j = (j << 3) + (tok[1] - '0');
*tok = j;
}
}
- strcpy( tok+1, tok+2 );
+ len = strlen(tok+2)+1;
+ memmove( tok+1, tok+2, len );
}
}
@@ -365,7 +368,8 @@
if( (e = Basename(s)) != s) {
if( !(mod & DIRECTORY_FLAG) ) {
/* Move the basename to the start. */
- strcpy(s, e);
+ size_t len = strlen(e)+1;
+ memmove(s, e, len);
}
else
s = e;
@@ -382,7 +386,8 @@
if( !(mod & FILE_FLAG) ) {
/* Move the suffix to the start. */
- strcpy( s, e );
+ size_t len = strlen(e)+1;
+ memmove(s, e, len);
}
else
s = e;
@@ -725,8 +730,10 @@
done = !lev;
break;
} else {
+ size_t len;
s[1] = ' ';
- strcpy( s, s+1 );
+ len = strlen(s+1)+1;
+ memmove( s, s+1, len );
}
/*FALLTHRU*/
case ' ':
@@ -835,8 +842,10 @@
* converted them to a real space. Let's verify this. */
for( p=s; *p && *p != edelim && *p; p++ ) {
if( p[0] == '\\' && p[1] == '\n' ) {
+ size_t len;
p[1] = ' ';
- strcpy( p, p+1 );
+ len = strlen(p+1)+1;
+ memmove( p, p+1, len );
}
}
if( !*p )
@@ -1120,7 +1129,10 @@
*flag = 1;
res = Expand( start );
- if( (t = DmStrSpn( res, " \t" )) != res ) strcpy( res, t );
+ if( (t = DmStrSpn( res, " \t" )) != res ) {
+ size_t len = strlen(t)+1;
+ memmove( res, t, len );
+ }
}
FREE( start ); /* this is ok! start is assigned a DmSubStr above */
diff -ru dmake.orig/getinp.c dmake/getinp.c
--- dmake.orig/getinp.c 2009-08-07 20:18:31.000000000 +0100
+++ dmake/getinp.c 2009-08-07 20:27:08.000000000 +0100
@@ -169,7 +169,8 @@
* text lines on input. The maximum size of this is governened by
* Buffer_size */
if( q != p && q[-1] == CONTINUATION_CHAR ) {
- strcpy( q, q+1 );
+ size_t len = strlen(q+1)+1;
+ memmove( q, q+1, len );
q--;
cont = FALSE;
}
@@ -290,7 +291,8 @@
while( (c = strchr(c, COMMENT_CHAR)) != NIL(char) ) {
if( Comment || State == NORMAL_SCAN )
if( c != str && c[-1] == ESCAPE_CHAR ) {
- strcpy( c-1, c ); /* copy it left, due to \# */
+ size_t len = strlen(c)+1;
+ memmove( c-1, c, len ); /* copy it left, due to \# */
if( pend ) (*pend)--; /* shift tail pointer left */
}
else {
diff -ru dmake.orig/path.c dmake/path.c
--- dmake.orig/path.c 2009-08-07 20:18:31.000000000 +0100
+++ dmake/path.c 2009-08-07 20:41:30.000000000 +0100
@@ -172,6 +172,7 @@
char *tpath;
int hasdriveletter = 0;
int delentry;
+ size_t len;
DB_ENTER( "Clean_path" );
@@ -231,14 +232,16 @@
p++;
}
while( *p == *DirSepStr);
- strcpy(t+1,p);
+ len = strlen(p)+1;
+ memmove(t+1,p,len);
continue;
}
/* Remove './'. If OOODMAKEMODE is set do this only if it is not at
* the start of the path. */
if ( p-q == 1 && *q == '.' && (q != path || !STOBOOL(OOoDmMode)) ) {
- strcpy(q,p+1);
+ len = strlen(p+1)+1;
+ memmove(q,p+1,len);
q = tpath;
continue;
}
@@ -268,7 +271,8 @@
}
while( *t == *DirSepStr);
/* q points to first letter of the current directory/file. */
- strcpy(q,t);
+ len = strlen(t)+1;
+ memmove(q,t,len);
q = tpath;
}
else
--- dmake.orig/make.c 2009-08-08 09:56:10.000000000 +0100
+++ dmake/make.c 2009-08-08 10:00:04.000000000 +0100
@@ -1352,8 +1352,10 @@
* Nothing in Expand() should be able to change dynamic macros. */
cmnd = Expand( rp->st_string );
- if( new_attr && (p = DmStrSpn(cmnd," \t\n+-@%")) != cmnd )
- strcpy(cmnd,p);
+ if( new_attr && (p = DmStrSpn(cmnd," \t\n+-@%")) != cmnd ) {
+ size_t len = strlen(p)+1;
+ memmove(cmnd,p,len);
+ }
/* COMMAND macro is set to "$(CMNDNAME) $(CMNDARGS)" by default, it is
* possible for the user to reset it to, for example
@@ -1381,8 +1383,10 @@
shell = ((l_attr & A_SHELL) != 0);
/* clean up the attributes that we may have just added. */
- if( (p = DmStrSpn(cmnd," \t\n+-@%")) != cmnd )
- strcpy(cmnd,p);
+ if( (p = DmStrSpn(cmnd," \t\n+-@%")) != cmnd ) {
+ size_t len = strlen(p)+1;
+ memmove(cmnd,p,len);
+ }
}
#if defined(MSDOS)
@@ -1477,8 +1481,9 @@
for( p=cmnd; *(n = DmStrPbrk(p,tmp)) != '\0'; )
/* Remove the \<nl> sequences. */
if(*n == CONTINUATION_CHAR && n[1] == '\n') {
+ size_t len = strlen(n+2)+1;
DB_PRINT( "make", ("fixing [%s]", p) );
- strcpy( n, n+2 );
+ memmove( n, n+2, len );
p = n;
}
/* Look for an escape sequence and replace it by it's corresponding