diff --git a/src/pefile.cpp b/src/pefile.cpp index ed781b1b..f3b89147 100644 --- a/src/pefile.cpp +++ b/src/pefile.cpp @@ -2247,10 +2247,26 @@ void PeFile::pack0(OutputFile *fo, ht &ih, ht &oh, if (ih.dllflags & IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY) { - if (opt->force) - ih.dllflags &= ~IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY; - else + if (opt->force) { +#if defined(_MSVC_LANG) //{ +#pragma warning( push ) +#pragma warning( suppress: 4245 ) +// MSVC bug +// pefile.cpp(3114): note: see reference to function template instantiation 'void PeFile::pack0(OutputFile *,ht &,ht &,unsigned int,upx_uint64_t,bool)' being compiled +// with +// [ +// ht=PeFile32::pe_header_t +// ] +// pefile.cpp(2251): warning C4245: 'argument': conversion from 'int' to 'unsigned int', signed/unsigned mismatch +#endif //} + ih.dllflags &= ~IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY; +#if defined(_MSVC_LANG) //{ +#pragma warning( pop ) +#endif //} + } + else { throwCantPack("image forces integrity check (use --force to remove)"); + } } checkHeaderValues(ih.subsystem, subsystem_mask, ih.entry, ih.filealign); @@ -3110,9 +3126,7 @@ void PeFile32::pack0(OutputFile *fo, unsigned subsystem_mask, upx_uint64_t default_imagebase, bool last_section_rsrc_only) { - // Redundant cast of subsystem_mask tries to workaround - // MSVC complaint C4245 signed/unsigned mismatch - super::pack0(fo, ih, oh, (unsigned)subsystem_mask, + super::pack0(fo, ih, oh, subsystem_mask, default_imagebase, last_section_rsrc_only); }