External function gfc_explicit_interface_required() assumes the input parameter 'errmsg' will be a zero terminated string after return, and the input parameter 'err_len' is full length of 'errmsg'.
If 'err_len' would have real effect -- truncate 'errmsg' by strncpy() which will zero pad but not be sure of zero terminated, 'errmsg' would not be zero terminated string. At present, it is not a bug -- all 'err_len' are large enough for it, But it is an extern function, according to its interface, it assumes 'errmsg' may be truncated in the future, so still need fix it. Signed-off-by: Chen Gang <gang.chen.5...@gmail.com> --- gcc/fortran/resolve.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 15d8dab..a109168 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2212,6 +2212,10 @@ gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len) { gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym); + if (--err_len < 0) + return false; + errmsg[err_len] = '\0'; + for ( ; arg; arg = arg->next) { if (!arg->sym) -- 1.7.11.7