@@ -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