diff --git a/src/p_mach.cpp b/src/p_mach.cpp index 131cc45c..fa3b21d8 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -1811,8 +1811,9 @@ bool PackMachBase::canPack() char buf[32]; snprintf(buf, sizeof(buf), "bad sizeofcmds %d", sz_mhcmds); throwCantPack(buf); } - if (16384 < sz_mhcmds) { // somewhat arbitrary, but amd64-darwin.macho-upxmain.c - throwCantPack("16384 < Mach_header.sizeofcmds"); + if (!sz_mhcmds + || 16384 < sz_mhcmds) { // somewhat arbitrary, but amd64-darwin.macho-upxmain.c + throwCantPack("16384 < Mach_header.sizeofcmds (or ==0)"); } rawmseg_buf.alloc(sz_mhcmds); rawmseg = (Mach_segment_command *)(void *)rawmseg_buf;