Skip to content

Commit 1499226

Browse files
committed
Beware overlap when rebuildImports
Based on a hint from a little bird. modified: pefile.cpp
1 parent 107cd48 commit 1499226

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

src/pefile.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ static void xcheck(size_t poff, size_t plen, const void *b, size_t blen)
7676
#define omemset(a,b,c) OCHECK(a,c), memset(a,b,c)
7777
#define imemcpy(a,b,c) ICHECK(a,c), memcpy(a,b,c)
7878
#define omemcpy(a,b,c) OCHECK(a,c), memcpy(a,b,c)
79+
#define omemmove(a,b,c) OCHECK(a,c), memmove(a,b,c)
7980

8081

8182
/*************************************************************************
@@ -2814,16 +2815,14 @@ void PeFile::rebuildImports(upx_byte *& extrainfo,
28142815
if (inamespos)
28152816
{
28162817
// now I rebuild the dll names
2817-
OCHECK(dllnames, dlen + 1);
2818-
strcpy(dllnames, dname);
2818+
omemcpy(dllnames, dname, dlen + 1);
28192819
im->dllname = ptr_diff(dllnames,Obuf);
28202820
//;;;printf("\ndll: %s:",dllnames);
28212821
dllnames += dlen + 1;
28222822
}
28232823
else
28242824
{
2825-
OCHECK(Obuf + im->dllname, dlen + 1);
2826-
strcpy(Obuf + im->dllname, dname);
2825+
omemcpy(Obuf + im->dllname, dname, dlen + 1);
28272826
}
28282827
im->iat = iatoffs;
28292828
if (set_oft)
@@ -2847,8 +2846,8 @@ void PeFile::rebuildImports(upx_byte *& extrainfo,
28472846
}
28482847
else
28492848
{
2850-
OCHECK(Obuf + (*newiat + 2), ilen + 1);
2851-
strcpy(Obuf + (*newiat + 2), p);
2849+
// Beware overlap!
2850+
omemmove(Obuf + (*newiat + 2), p, ilen + 1);
28522851
}
28532852
p += ilen;
28542853
}

0 commit comments

Comments
 (0)