diff options
| author | Nick Kralevich <nnk@google.com> | 2015-04-07 01:25:43 -0700 |
|---|---|---|
| committer | Nick Kralevich <nnk@google.com> | 2015-04-07 10:12:20 -0700 |
| commit | 58ba58a97c8ec56b2c2a32d6cda19a3a57e3cccf (patch) | |
| tree | 3baecc8da119c90754d6de6f6f4d63da5c7c39db /trusty/coverage/coverage_test.cpp | |
| parent | 02f1d80ae2da2436c4c2e2a4643866871f41d54f (diff) | |
logd: Don't embed a flexible array member within another struct
C (but not C++) has a concept of a flexible array member, which
is documented at https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html .
Using a flexible array member indicates that the structure is
really a header for a variable length object.
In logd's case, the variable length structure android_event_string_t
was embedded within another structure called
android_log_event_string_t. This makes gcc's __builtin_object_size()
function really confused. When compiling with C++,
__builtin_object_size(android_log_event_string_t.payload.data, 1)
would return 0, whereas if you compiled the code with C, the same
call would (properly) return -1.
Code which does automatic bounds checking, such as the proposed
patch at https://android-review.googlesource.com/145411 , will
cause problems for logd if this syntax is used.
Don't try to embed a variable length structure within another
structure. This doesn't appear to be valid C nor C++, and
while it's worked, it seems problematic.
Instead, inline the structure so it's one big happy structure.
Change-Id: I8ac02b7142a4f6560f5f80df2effcf720f9896fc
Diffstat (limited to 'trusty/coverage/coverage_test.cpp')
0 files changed, 0 insertions, 0 deletions
