All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Andrew Morton <akpm@linux-foundation.org>,
	James Bottomley <JBottomley@Odin.com>,
	linux-kernel@vger.kernel.org,
	"K. Y. Srinivasan" <kys@microsoft.com>
Subject: Re: [PATCH v3 2/2] lib/test-string_helpers.c: add string_get_size() tests
Date: Tue, 15 Sep 2015 14:10:43 +0200	[thread overview]
Message-ID: <87wpvryjb0.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <1442299382.8361.25.camel@linux.intel.com> (Andy Shevchenko's message of "Tue, 15 Sep 2015 09:43:02 +0300")

Andy Shevchenko <andriy.shevchenko@linux.intel.com> writes:

> On Tue, 2015-09-15 at 00:00 +0200, Rasmus Villemoes wrote:
>> On Mon, Sep 14 2015, Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
>> 
>
> Vitaly, thanks for the test cases. My comments below.
>
>> > +static __init void test_string_get_size_one(u64 size, u64 
>> > blk_size,
>> > +					    const enum 
>> > string_size_units units,
>> > +					    const char 
>> > *exp_result)
>> > +{
>> > +	char buf[256];
>> > +
>> > +	string_get_size(size, blk_size, units, buf, sizeof(buf));
>> > +	if (!strncmp(buf, exp_result, min(sizeof(buf), 
>> > strlen(exp_result))))
>> > +		return;
>> 
>> Nits: It probably makes sense to also test that string_get_size
>> '\0'-terminates the buffer, so I'd spell this
>> 
>>   if (!memcmp(buf, exp_result, min(sizeof(buf), 
>> strlen(exp_result)+1)))
>> 
>> With a generous stack buffer, that min() will always evaluate to the
>> strlen(exp_result)+1. On that note: Maybe 256 is a bit excessive. I
>> don't think this will run very deep in the kernel stack, but the code 
>> might
>> get copy-pasted somewhere else. 16 should be plenty.
>
> Agree with Rasmus.
>
> And just to make a side note that useless use of min() since we have
> strnlen() :-)
>
>> 
>> > +	pr_warn("Test 'test_string_get_size_one' failed!\n");
>> > +	pr_warn("string_get_size(size = %llu, blk_size = %llu, 
>> > units = %d\n",
>> > +		size, blk_size, units);
>> 
>> [There's probably no pretty way of getting from units to a text
>> representation, but it's slightly annoying to have to check the 
>> source
>> for the enum definition to figure out what units=0 or units=1 means.]
>> 
>> > +	pr_warn("expected: %s, got %s\n", exp_result, buf);
>> 
>> In case we failed to '\0'-terminate buf, we might want to print it 
>> with
>> "%.*s", (int)sizeof(buf), buf. But maybe I'm just overly paranoid.
>
> I prefer to put '\0' at the position after we expected have an actual
> '\0'. In this case we always be NULL terminated. I did this for hexdump
> test cases.

Just to check I got your suggestions right:

...
+       if (!memcmp(buf, exp_result, strnlen(exp_result, sizeof(buf) - 1) + 1))
+               return;
+
+       /* NULL terminate buf right after the expected '\0' */
+       buf[strnlen(exp_result, sizeof(buf) - 2) + 1] = '\0';
...

Alternatively, we could have avoided strnlen() by asserting
strlen(exp_result) < sizeof(buf) - 1 at the very beginning.

-- 
  Vitaly

  reply	other threads:[~2015-09-15 12:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-14 16:45 [PATCH v3 0/2] lib/string_helpers.c: fix infinite loop in string_get_size() Vitaly Kuznetsov
2015-09-14 16:45 ` [PATCH v3 1/2] " Vitaly Kuznetsov
2015-09-14 16:45 ` [PATCH v3 2/2] lib/test-string_helpers.c: add string_get_size() tests Vitaly Kuznetsov
2015-09-14 22:00   ` Rasmus Villemoes
2015-09-15  6:43     ` Andy Shevchenko
2015-09-15 12:10       ` Vitaly Kuznetsov [this message]
2015-09-15 12:19         ` Andy Shevchenko

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=87wpvryjb0.fsf@vitty.brq.redhat.com \
    --to=vkuznets@redhat.com \
    --cc=JBottomley@Odin.com \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=kys@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.