Jeremie Courreges-Anglas <jca@wxcvbn.org> wrote:
>
>
> exim apparently uses printf("%n"), which is currently forbidden (libc
> calls abort(3)).
>
> I don't want us to fix all the %n uses in the ports tree, but instead
> wait for user reports. Though for some software like exim it makes
> sense to help users avoid such a hard crash.
>
> The diff below doesn't pretend to fix all uses of %n in the exim source.
> There may be others that can't be flagged by the compiler (support for
> that hesn't been committed yet) because of indirections through wrapper
> functions.
> +--- src/acl.c.orig
> ++++ src/acl.c
> +@@ -2906,10 +2906,12 @@ for (; cb; cb = cb->next)
> +
> + HDEBUG(D_acl)
> + {
> +- int lhswidth = 0;
> +- debug_printf_indent("check %s%s %n",
> ++ uschar buf[256];
> ++ int lhswidth = snprintf(CS buf, sizeof buf, "check %s%s ",
> + (!conditions[cb->type].is_modifier && cb->u.negated)? "!":"",
> +- conditions[cb->type].name, &lhswidth);
> ++ conditions[cb->type].name);
> ++ if (lhswidth == -1) lhswidth = 0;
> ++ debug_printf_indent("%s");
Doesn't this %s need an argument buf?
No comments:
Post a Comment