--- binutils.orig/bfd/peXXigen.c 2018-07-11 14:28:44.937231840 +0100 +++ binutils-2.29.1/bfd/peXXigen.c 2018-07-11 14:29:27.861771394 +0100 @@ -2992,6 +2992,16 @@ _bfd_XX_bfd_copy_private_bfd_data_common return FALSE; } + /* PR 23110. */ + else if (ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size < 0) + { + /* xgettext:c-format */ + _bfd_error_handler + (_("%pB: Data Directory size (%#lx) is negative"), + obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size); + return FALSE; + } + for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++) {