From 6b86ff879b2a2d4b68b2dcc80eb96bbf1f99247f Mon Sep 17 00:00:00 2001 From: deraadt Date: Sat, 3 May 2014 12:36:45 +0000 Subject: [PATCH] Add #ifndef NO_PRINTF_PERCENT_N. Since we are fully standardized, we don't use disable %n ourselves. But Google's Android libc is based on our libc.... Giving them an easy knob to disable this dangerous feature easily make their job easier without making our job any harder. Request from Elliott @ google --- lib/libc/stdio/vfprintf.c | 6 +++++- lib/libc/stdio/vfwprintf.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/libc/stdio/vfprintf.c b/lib/libc/stdio/vfprintf.c index 86b540e92c0..7f8ff317794 100644 --- a/lib/libc/stdio/vfprintf.c +++ b/lib/libc/stdio/vfprintf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vfprintf.c,v 1.65 2014/03/19 05:17:01 guenther Exp $ */ +/* $OpenBSD: vfprintf.c,v 1.66 2014/05/03 12:36:45 deraadt Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. @@ -801,6 +801,7 @@ fp_common: } break; #endif /* FLOATING_POINT */ +#ifndef NO_PRINTF_PERCENT_N case 'n': if (flags & LLONGINT) *GETARG(long long *) = ret; @@ -819,6 +820,7 @@ fp_common: else *GETARG(int *) = ret; continue; /* no output */ +#endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; /*FALLTHROUGH*/ @@ -1317,6 +1319,7 @@ reswitch: switch (ch) { ADDTYPE(T_DOUBLE); break; #endif /* FLOATING_POINT */ +#ifndef NO_PRINTF_PERCENT_N case 'n': if (flags & LLONGINT) ADDTYPE(TP_LLONG); @@ -1333,6 +1336,7 @@ reswitch: switch (ch) { else ADDTYPE(TP_INT); continue; /* no output */ +#endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; /*FALLTHROUGH*/ diff --git a/lib/libc/stdio/vfwprintf.c b/lib/libc/stdio/vfwprintf.c index 7cb08eabb4e..745b4d93f5e 100644 --- a/lib/libc/stdio/vfwprintf.c +++ b/lib/libc/stdio/vfwprintf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vfwprintf.c,v 1.9 2014/03/19 05:17:01 guenther Exp $ */ +/* $OpenBSD: vfwprintf.c,v 1.10 2014/05/03 12:36:45 deraadt Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. @@ -784,6 +784,7 @@ fp_common: } break; #endif /* FLOATING_POINT */ +#ifndef NO_PRINTF_PERCENT_N case 'n': if (flags & LLONGINT) *GETARG(long long *) = ret; @@ -802,6 +803,7 @@ fp_common: else *GETARG(int *) = ret; continue; /* no output */ +#endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; /*FALLTHROUGH*/ @@ -1296,6 +1298,7 @@ reswitch: switch (ch) { ADDTYPE(T_DOUBLE); break; #endif /* FLOATING_POINT */ +#ifndef NO_PRINTF_PERCENT_N case 'n': if (flags & LLONGINT) ADDTYPE(TP_LLONG); @@ -1312,6 +1315,7 @@ reswitch: switch (ch) { else ADDTYPE(TP_INT); continue; /* no output */ +#endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; /*FALLTHROUGH*/ -- 2.20.1