Passing enum as a first argument to variadic argument function
may lead to undefined behavior. The explanation on CERT site:
https://www.securecoding.cert.org/confluence/display/cplusplus/
EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start
The bug was found by Kirill Nedostoev (nedostoev.ka@phystech.edu)
when he tried to build GNU binutils with Clang 7.
PR 22245
* bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that
undergoes default promotion.
* bfd-in2.h: Regenerate.
+2017-10-04 Pavel I. Kryukov <kryukov@frtk.ru>
+
+ PR 22245
+ * bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that
+ undergoes default promotion.
+ * bfd-in2.h: Regenerate.
+
2017-10-02 Alan Modra <amodra@gmail.com>
* elf32-ppc.c (ppc_elf_relocate_section): Fix comment typo.
bfd_error_type bfd_get_error (void);
-void bfd_set_error (bfd_error_type error_tag, ...);
+void bfd_set_error (int error_tag, ...);
const char *bfd_errmsg (bfd_error_type error_tag);
bfd_set_error
SYNOPSIS
- void bfd_set_error (bfd_error_type error_tag, ...);
+ void bfd_set_error (int error_tag, ...);
DESCRIPTION
Set the BFD error condition to be @var{error_tag}.
*/
void
-bfd_set_error (bfd_error_type error_tag, ...)
+bfd_set_error (int error_tag, ...)
{
bfd_error = error_tag;
if (error_tag == bfd_error_on_input)