From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
To: Andrew Morton <akpm@linux-foundation.org>,
Kees Cook <keescook@chromium.org>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH v3 10/14] lib/test_printf.c: test precision quirks
Date: Thu, 3 Dec 2015 21:51:09 +0100 [thread overview]
Message-ID: <1449175873-1780-11-git-send-email-linux@rasmusvillemoes.dk> (raw)
In-Reply-To: <1449175873-1780-1-git-send-email-linux@rasmusvillemoes.dk>
The kernel's printf doesn't follow the standards in a few corner cases
(which are probably mostly irrelevant). Add tests that document the
current behaviour.
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
lib/test_printf.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/lib/test_printf.c b/lib/test_printf.c
index 1ce1a1dd8faf..3393d667c6b8 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
@@ -166,14 +166,23 @@ test_string(void)
test("", "%s%.0s", "", "123");
test("ABCD|abc|123", "%s|%.3s|%.*s", "ABCD", "abcdef", 3, "123456");
test("1 | 2|3 | 4|5 ", "%-3s|%3s|%-*s|%*s|%*s", "1", "2", 3, "3", 3, "4", -3, "5");
+ test("1234 ", "%-10.4s", "123456");
+ test(" 1234", "%10.4s", "123456");
/*
- * POSIX and C99 say that a missing precision should be
- * treated as a precision of 0. However, the kernel's printf
- * implementation treats this case as if the . wasn't
- * present. Let's add a test case documenting the current
- * behaviour; should anyone ever feel the need to follow the
- * standards more closely, this can be revisited.
+ * POSIX and C99 say that a negative precision (which is only
+ * possible to pass via a * argument) should be treated as if
+ * the precision wasn't present, and that if the precision is
+ * omitted (as in %.s), the precision should be taken to be
+ * 0. However, the kernel's printf behave exactly opposite,
+ * treating a negative precision as 0 and treating an omitted
+ * precision specifier as if no precision was given.
+ *
+ * These test cases document the current behaviour; should
+ * anyone ever feel the need to follow the standards more
+ * closely, this can be revisited.
*/
+ test(" ", "%4.*s", -5, "123456");
+ test("123456", "%.s", "123456");
test("a||", "%.s|%.0s|%.*s", "a", "b", 0, "c");
test("a | | ", "%-3.s|%-3.0s|%-3.*s", "a", "b", 0, "c");
}
--
2.6.1
next prev parent reply other threads:[~2015-12-03 20:51 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-03 20:50 [PATCH v3 00/14] printf stuff for 4.5 Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 01/14] lib/vsprintf.c: pull out padding code from dentry_name() Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 02/14] lib/vsprintf.c: move string() below widen_string() Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 03/14] lib/vsprintf.c: eliminate potential race in string() Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 04/14] lib/vsprintf.c: expand field_width to 24 bits Rasmus Villemoes
2015-12-03 20:54 ` Joe Perches
2015-12-03 21:28 ` Andy Shevchenko
2015-12-03 23:34 ` Andrew Morton
2015-12-04 0:03 ` Joe Perches
2015-12-04 8:59 ` Rasmus Villemoes
2015-12-04 9:02 ` Rasmus Villemoes
2015-12-03 23:41 ` Joe Perches
2015-12-03 20:51 ` [PATCH v3 05/14] lib/vsprintf.c: help gcc make number() smaller Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 06/14] lib/vsprintf.c: warn about too large precisions and field widths Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 07/14] lib/kasprintf.c: add sanity check to kvasprintf Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 08/14] lib/test_printf.c: don't BUG Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 09/14] lib/test_printf.c: check for out-of-bound writes Rasmus Villemoes
2015-12-03 20:51 ` Rasmus Villemoes [this message]
2015-12-03 20:51 ` [PATCH v3 11/14] lib/test_printf.c: add a few number() tests Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 12/14] lib/test_printf.c: account for kvasprintf tests Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 13/14] lib/test_printf.c: add test for large bitmaps Rasmus Villemoes
2015-12-03 20:51 ` [PATCH v3 14/14] lib/test_printf.c: test dentry printing Rasmus Villemoes
2015-12-04 0:19 ` Andrew Morton
2015-12-04 8:16 ` Rasmus Villemoes
2015-12-04 8:46 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1449175873-1780-11-git-send-email-linux@rasmusvillemoes.dk \
--to=linux@rasmusvillemoes.dk \
--cc=akpm@linux-foundation.org \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®