From: Bernd Petrovitsch <bernd@firmix.at>
To: Keith Owens <kaos@ocs.com.au>
Cc: Robert Love <rml@ximian.com>, Dan Aloni <da-x@gmx.net>,
akpm@osdl.org, linux-kernel@vger.kernel.org
Subject: Re: [patch] kernel events layer
Date: Sat, 24 Jul 2004 13:37:41 +0200 [thread overview]
Message-ID: <1090669060.9040.10.camel@gimli.at.home> (raw)
In-Reply-To: <4956.1090644161@ocs3.ocs.com.au>
On Sat, 2004-07-24 at 06:42, Keith Owens wrote:
> On Fri, 23 Jul 2004 22:47:06 -0400,
> Robert Love <rml@ximian.com> wrote:
> >On Sat, 2004-07-24 at 00:32 +0300, Dan Aloni wrote:
> >
> >> IMHO you either should not assume anything about the length of the object
> >> string, _or_ do the complete safe string assembly e.g:
> >>
> >> len += snprintf(buffer, PAGE_SIZE, "From: %s\nSignal: %s\n",
> >> object, signal);
> >>
> >
> >Fair enough. I guess what we want, exactly, is:
> >
> > len = snprintf(buffer, PAGE_SIZE, "From: %s\n", object);
> > len += snprintf(&buffer[len], PAGE_SIZE - len "Signal: %s\n", signal);
> >
> >I will add that to the next revision.
>
> man snprintf
>
> "If the output was truncated due to this limit then the return value
> is the number of characters (not including the trailing '\0') which
> would have been written to the final string if enough space had been
> available. Thus, a return value of size or more means that the output
> was truncated".
>
> Never use the return value from snprintf to work out the next buffer
> position, it is not reliable when the data is truncated. The example
> above uses a second call to snprintf which will generate a warning for
> truncated data and fail safe, but not all code is that trustworthy. I
The kernel snprintf() is (and the shown warning is actually debatable.
Actually snprintf()s interface is not that optimal for easy handling,
since the size parameter is unsigned and not signed. But it is specified
in SUSv3 that way.).
> always use strlen to get the real buffer length.
>
> snprintf(buffer, PAGE_SIZE, "From: %s\n", object);
> len = strlen(buffer);
> snprintf(buffer+len, PAGE_SIZE - len, "Signal: %s\n", signal);
Since "overflows" only occur if the destination buffer is full, one
could avoid the following snppritnf()s completely. Let alone the call of
strlen()
---- snip ----
len = snprintf(buffer, PAGE_SIZE, "From: %s\n", object);
if (len < PAGE_SIZE) {
len += snprintf(buffer+len, PAGE_SIZE - len,
"Signal: %s\n", signal);
}
---- snip ----
Bernd
--
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and Services
next prev parent reply other threads:[~2004-07-24 11:38 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-23 17:41 Robert Love
2004-07-23 18:25 ` Tim Hockin
2004-07-23 18:31 ` Muli Ben-Yehuda
2004-07-23 18:35 ` Robert Love
2004-07-23 21:32 ` Dan Aloni
2004-07-24 2:47 ` Robert Love
2004-07-24 4:42 ` Keith Owens
2004-07-24 5:00 ` Robert Love
2004-07-24 8:11 ` Andrew Morton
2004-07-24 5:37 ` Robert Love
2004-07-24 6:02 ` Robert Love
2004-07-24 9:43 ` Wichert Akkerman
2004-07-24 20:21 ` James Morris
2004-07-25 2:12 ` Robert Love
2004-07-24 6:53 ` Paul Jackson
2004-07-24 11:37 ` Bernd Petrovitsch [this message]
2004-07-24 3:02 ` Michael Clark
2004-07-24 3:14 ` Robert Love
2004-07-24 9:15 ` Michael Clark
2004-07-24 15:08 ` Deepak Saxena
2004-07-24 15:45 ` Robert Love
2004-07-24 17:33 ` Ryan Anderson
2004-07-24 17:46 ` Tim Hockin
2004-07-24 18:19 ` Robert Love
2004-07-25 18:11 ` Tim Hockin
2004-07-25 19:08 ` Robert Love
2004-07-27 5:09 ` Daniel Stekloff
2004-07-24 17:54 ` Deepak Saxena
2004-07-24 18:13 ` Robert Love
2004-07-26 20:08 ` Rutger Nijlunsing
2004-07-26 20:10 ` Robert Love
2004-08-09 13:29 ` Pavel Machek
2004-08-09 19:47 ` Robert Love
2004-07-24 3:03 ` Andrew Morton
2004-07-24 2:14 ` Robert Love
2004-07-24 5:15 ` Chris Wedgwood
2004-07-24 5:41 ` Robert Love
2004-07-24 5:45 ` Chris Wedgwood
2004-07-24 3:11 ` [patch] kernel events layer, updated Robert Love
2004-07-24 7:58 ` Deepak Saxena
2004-07-24 8:23 ` Deepak Saxena
2004-07-26 6:04 [patch] kernel events layer Perez-Gonzalez, Inaky
2004-07-26 6:09 ` Andrew Morton
2004-07-26 23:00 ` Matt Mackall
2004-07-26 7:31 Perez-Gonzalez, Inaky
2004-07-26 14:50 ` Robert Love
2004-07-26 16:12 ` Greg KH
2004-07-26 18:13 ` Oliver Neukum
2004-07-26 18:15 ` Robert Love
2004-07-26 19:03 ` Greg KH
2004-07-26 20:44 ` Tim Hockin
2004-07-27 18:15 ` Mike Waychison
2004-07-27 18:35 ` Oliver Neukum
2004-07-27 18:37 ` Tim Hockin
2004-07-26 22:58 Perez-Gonzalez, Inaky
2004-07-27 7:08 ` Deepak Saxena
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=1090669060.9040.10.camel@gimli.at.home \
--to=bernd@firmix.at \
--cc=akpm@osdl.org \
--cc=da-x@gmx.net \
--cc=kaos@ocs.com.au \
--cc=linux-kernel@vger.kernel.org \
--cc=rml@ximian.com \
/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®