Beware overlap when rebuildImports

Based on a hint from a little bird.
	modified:   pefile.cpp
This commit is contained in:
John Reiser
2020-09-20 14:10:24 -07:00
parent 107cd48c93
commit 14992260c6
+5 -6
View File
@@ -76,6 +76,7 @@ static void xcheck(size_t poff, size_t plen, const void *b, size_t blen)
#define omemset(a,b,c) OCHECK(a,c), memset(a,b,c) #define omemset(a,b,c) OCHECK(a,c), memset(a,b,c)
#define imemcpy(a,b,c) ICHECK(a,c), memcpy(a,b,c) #define imemcpy(a,b,c) ICHECK(a,c), memcpy(a,b,c)
#define omemcpy(a,b,c) OCHECK(a,c), memcpy(a,b,c) #define omemcpy(a,b,c) OCHECK(a,c), memcpy(a,b,c)
#define omemmove(a,b,c) OCHECK(a,c), memmove(a,b,c)
/************************************************************************* /*************************************************************************
@@ -2814,16 +2815,14 @@ void PeFile::rebuildImports(upx_byte *& extrainfo,
if (inamespos) if (inamespos)
{ {
// now I rebuild the dll names // now I rebuild the dll names
OCHECK(dllnames, dlen + 1); omemcpy(dllnames, dname, dlen + 1);
strcpy(dllnames, dname);
im->dllname = ptr_diff(dllnames,Obuf); im->dllname = ptr_diff(dllnames,Obuf);
//;;;printf("\ndll: %s:",dllnames); //;;;printf("\ndll: %s:",dllnames);
dllnames += dlen + 1; dllnames += dlen + 1;
} }
else else
{ {
OCHECK(Obuf + im->dllname, dlen + 1); omemcpy(Obuf + im->dllname, dname, dlen + 1);
strcpy(Obuf + im->dllname, dname);
} }
im->iat = iatoffs; im->iat = iatoffs;
if (set_oft) if (set_oft)
@@ -2847,8 +2846,8 @@ void PeFile::rebuildImports(upx_byte *& extrainfo,
} }
else else
{ {
OCHECK(Obuf + (*newiat + 2), ilen + 1); // Beware overlap!
strcpy(Obuf + (*newiat + 2), p); omemmove(Obuf + (*newiat + 2), p, ilen + 1);
} }
p += ilen; p += ilen;
} }