unzip.cpp的一个问题

unzip.cpp是一个老外写的代码,用于解压zip文件的一个cpp文件,最近遇到zip内部文件路径大于MAX_PATH长度时会导致程序奔溃,单步调试发现在 ZRESULT TUnzip::Get(int index,ZIPENTRY *ze) 函数里 使用了strcpy 导致奔溃。
[cpp]

unsigned char *extra = new unsigned char[extralen];
if (lufread(extra,1,(uInt)extralen,uf->file)!=extralen)
{delete[] extra; return ZR_READ;}
ze->index=uf->num_file;
TCHAR tfn[MAX_PATH];
strcpy(tfn,fn);

[/cpp]
fn长度大于tfn长度时,strcpy 把真个tfn给填满溢出了,把上面的变量 unsigned char *extra 的值给冲掉了,导致 extra 指向了不可访问的区域。
修复方法是 用更长的值代替MAX_PATH,替换strcpy为strncpy,这样至少不会奔溃。。。