4 ms·
Can someone who lives in the world of C fill in the blanks? If this was a major typo, I have done things along those lines.
by jared314 16y ago
Can someone who lives in the world of C fill in the blanks?
If this was a major typo, I have done things along those lines.
- justinweiss 16y agomemset sets a block of memory to a given value. It is often used to initialize an uninitialized block of memory to 0. So often, in fact, that this bug where it always initialized the memory to 0 survived so long.
- mey 16y agoWish there was a cross-link to a bug tracking system where this was initially reported.
- pufuwozu 16y agoYou can just search for the change ID: https://review.source.android.com/#change,14699 https://review.source.android.com/#change,14699
- abstractbill 16y agoSo often, in fact, that this bug where it always initialized the memory to 0 survived so long. Given that the bug went undetected for so long, I think you could almost reasonably claim that calling memset with a nonzero parameter is a "corner case" ;)
- Psyonic 16y agoIt is a "corner case," or close to it, but that's not why it wasn't caught here. I don't think this code is ever called, as explained above. It's default code in case there isn't a platform specific version, but there pretty much always is a platform specific version. Link: http://news.ycombinator.com/item?id=1379639 http://news.ycombinator.com/item?id=1379639
- fserb 16y agoon Google code search: "lang:c memset\(.+,\s[^0]+\s,.+\)" return 32k results and "lang:c memset\(.+,\s0+\s,.+\)" returns 335k.
- wlievens 16y ago10% is a lot more than I would have thought, wow. Good job looking that up.
- amock 16y agoThe function was always setting the memory to 0 instead of what was passed in. I think most uses of memset are to initialize memory to 0, but any other use would have had unexpected results.
- draebek 16y agomemset's job is to fill a block of memory with a given byte. The most common fill byte is 0, to initialize or otherwise clear a buffer. It looks like it is so common, in fact, that a programmer accidentally made Android's memset _always_ fill with 0, no matter what byte was passed in, and presumably no one noticed for a while. (I can't figure out when this patch was introduced.)
- jared314 16y agoThe "Up to change" link takes you to the summary. May 13, 2010
- fourneau 16y agoMemset (according to the c++ reference) is supposed to: "Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char)." So, give it a pointer to some memory, give it a value and the number of bytes you want to set and it'll go wild. In this case, memset was just blindly dropping in zeroes into the memory block