diff --git a/src/p_mach.cpp b/src/p_mach.cpp index 47bbe310..2c778d40 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -1515,7 +1515,7 @@ void PackMachBase::unpack(OutputFile *fo) || mhdri.filetype != mhdr->filetype) throwCantUnpack("file header corrupted"); unsigned const ncmds = mhdr->ncmds; - if (!ncmds || 24 < ncmds) { // arbitrary limit + if (!ncmds || 256 < ncmds) { // arbitrary limit char msg[40]; snprintf(msg, sizeof(msg), "bad Mach_header.ncmds = %d", ncmds); throwCantUnpack(msg); @@ -1946,8 +1946,8 @@ bool PackMachBase::canPack() throwCantPack(buf); } if (!sz_mhcmds - || 16384 < sz_mhcmds) { // somewhat arbitrary, but amd64-darwin.macho-upxmain.c - throwCantPack("16384 < Mach_header.sizeofcmds (or ==0)"); + || 32768 < sz_mhcmds) { // somewhat arbitrary, but *-darwin.macho-upxmain.c + throwCantPack("32768 < Mach_header.sizeofcmds (or ==0)"); } rawmseg_buf.alloc(sz_mhcmds); rawmseg = (Mach_segment_command *)(void *)rawmseg_buf; diff --git a/src/stub/src/i386-darwin.macho-upxmain.c b/src/stub/src/i386-darwin.macho-upxmain.c index f7cb92e9..14f4c5ae 100644 --- a/src/stub/src/i386-darwin.macho-upxmain.c +++ b/src/stub/src/i386-darwin.macho-upxmain.c @@ -776,7 +776,7 @@ main(int argc, char *argv[]) break; } } - char mhdr[16384]; + char mhdr[32768]; uint32_t entry = upx_main((struct l_info const *)payload, paysize, (Mach_header *)mhdr, sizeof(mhdr), f_exp, f_unf, (Mach_header **)&argv[-2]); diff --git a/src/stub/src/powerpc-darwin.macho-upxmain.c b/src/stub/src/powerpc-darwin.macho-upxmain.c index df414fbd..58385cf0 100644 --- a/src/stub/src/powerpc-darwin.macho-upxmain.c +++ b/src/stub/src/powerpc-darwin.macho-upxmain.c @@ -733,7 +733,7 @@ main(int argc, char *argv[]) break; } } - char mhdr[16384]; + char mhdr[32768]; uint32_t entry = upx_main((struct l_info const *)payload, paysize, (Mach_header *)mhdr, sizeof(mhdr), f_exp, f_unf, (Mach_header **)&argv[-2]);