Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Shao Miller <sha0.miller@gmail.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: passing uninitialised data |
| Date | 2012-12-17 19:45 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <kaoeb7$7sg$1@dont-email.me> (permalink) |
| References | <k2vhbd$fhj$1@speranza.aioe.org> <505351CA.4010204@verizon.net> <v0q658pi0s1dvhsasgvcr252s1tineu8bb@4ax.com> <kfnpq28h2we.fsf@x-alumni2.alumni.caltech.edu> |
On 12/17/2012 14:52, Tim Rentsch wrote: > Barry Schwarz <schwarzb@dqel.com> writes: > >> On Fri, 14 Sep 2012 11:48:26 -0400, James Kuyper >> <jameskuyper@verizon.net> wrote: >> >>> On 09/14/2012 11:09 AM, Mark wrote: >>>> Hello, >>>> >>>> I have quite a generic question. Suppose we work with fwrite(), or sendto() >>>> (not C standard function, but I'll assume everyone knows it) or any other >>>> API that takes a pointer to a buffer to trasnmit. When such a buffer is >>>> unititialised, does it in some ways impose undefined behaviour? >>> >>> >>>> I'm asking this, because when such code is run under 'valgrind' it reports a >>>> lot about uninitiased memory or 'unaddressable values in syscalls' -- does >>>> it imply such will act undefined due to uninit storages used as buffers? >>>> >>>> Would appreciate the comments on it. Thanks. >>> >>> "If an object that has automatic storage duration is not initialized >>> explicitly, its value is indeterminate." (6.7.9p10) >>> >>> An indeterminate value is defined as "either an unspecified value or a >>> trap representation" (3.19.2) >>> >>> "Certain object representations need not represent a value of the object >>> type. If the stored value of an object has such a representation and is >>> read by an lvalue expression that does not have character type, the >>> behavior is undefined. ... Such a representation is called a trap >>> representation." (6.2.6.1p5) >>> >>> So far, this looks bad. However, let's go a little further: >>> The description of fwrite() says "... For each object, size calls are >>> made to the fputc function, taking the values (in order) from an array >>> of unsigned char exactly overlaying the object. ..." (7.21.8.2p1). In >>> other words, it accesses the data using only lvalues of type unsigned >>> char, a character type. Therefore, the undefined behavior mentioned in >>> 6.2.6.1p5 doesn't apply. >> >> While an unsigned char cannot contain a trap value, I believe J.2, >> even though it is not normative, gives the clearest statement of the >> intent: >> >> "The behavior is undefined in the following circumstances: ... The >> value of an object with automatic storage duration is used while it is >> indeterminate." > > Accessing an uninitialized variable of type unsigned char is (as > of C11) undefined behavior in some circumstances, but only some. > This result obtains by virtue of 6.3.2.1 p2, in particular the > last sentence. > > Obviously, accessing an uninitialized variable is not /always/ > undefined behavior, because if it were then there would be > no point in adding the new proviso to 6.3.2.1 p2; undoubtedly > the committee would simply have added some non-normative text > instead. > And since the question is about a pointer into a buffer being passed, then it'd seem that there're no trap representations for the 'unsigned char' values in that buffer, right? This goes back to Defect Report 260, doesn't it? http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_260.htm - Shao Miller
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
passing uninitialised data "Mark" <mark_cruzNOTFORSPAM@hotmail.com> - 2012-09-14 11:09 -0400
Re: passing uninitialised data Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-09-14 11:45 -0400
Re: passing uninitialised data James Kuyper <jameskuyper@verizon.net> - 2012-09-14 11:48 -0400
Re: passing uninitialised data Barry Schwarz <schwarzb@dqel.com> - 2012-09-14 10:34 -0700
Re: passing uninitialised data James Kuyper <jameskuyper@verizon.net> - 2012-09-14 14:34 -0400
Re: passing uninitialised data Barry Schwarz <schwarzb@dqel.com> - 2012-09-14 15:26 -0700
Re: passing uninitialised data James Kuyper <jameskuyper@verizon.net> - 2012-09-17 12:18 -0400
Re: passing uninitialised data Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-17 11:52 -0800
Re: passing uninitialised data pete <pfiland@mindspring.com> - 2012-12-17 16:21 -0500
Re: passing uninitialised data Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 10:23 -0800
Re: passing uninitialised data pete <pfiland@mindspring.com> - 2012-12-20 21:17 -0500
Re: passing uninitialised data Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-21 09:20 -0800
Re: passing uninitialised data pete <pfiland@mindspring.com> - 2012-12-21 14:52 -0500
Re: passing uninitialised data glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2012-12-21 21:19 +0000
Re: passing uninitialised data Shao Miller <sha0.miller@gmail.com> - 2012-12-17 19:45 -0500
Re: passing uninitialised data Angel <angel+news@spamcop.net> - 2012-09-14 19:03 +0000
Re: passing uninitialised data James Kuyper <jameskuyper@verizon.net> - 2012-09-14 15:15 -0400
Re: passing uninitialised data Angel <angel+news@spamcop.net> - 2012-09-14 20:26 +0000
Re: passing uninitialised data James Kuyper <jameskuyper@verizon.net> - 2012-09-14 16:45 -0400
Re: passing uninitialised data Kaz Kylheku <kaz@kylheku.com> - 2012-09-14 21:19 +0000
csiph-web