summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2016-12-09 18:57:08 +0200
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2016-12-09 18:57:08 +0200
commit58af4d1fb733c5348b68dd3980f2a230d95400b4 (patch)
tree2d70ebb12e34a4e55fbc369344d98c4e7dc4958f
parent66a5f06c985537a7e45969c52260b083ec04e82b (diff)
Enable clang integer sanitizer and clean up a few warnings.
Changed to use simple indexing instead of while (count--) in buf_read()/buf_write(), because the count overflowed from 0 to max on the last iteration. While the unsigned integer overflow is defined and behaviour was correct, making this simple change allowed enabling the sanitizer which might catch true errors elsewhere in the code.
-rw-r--r--pb_decode.c5
-rw-r--r--pb_encode.c5
-rw-r--r--tests/SConstruct2
3 files changed, 7 insertions, 5 deletions
diff --git a/pb_decode.c b/pb_decode.c
index 1f6aeae0..b2a3a310 100644
--- a/pb_decode.c
+++ b/pb_decode.c
@@ -75,13 +75,14 @@ static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = {
static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
{
+ size_t i;
const pb_byte_t *source = (const pb_byte_t*)stream->state;
stream->state = (pb_byte_t*)stream->state + count;
if (buf != NULL)
{
- while (count--)
- *buf++ = *source++;
+ for (i = 0; i < count; i++)
+ buf[i] = source[i];
}
return true;
diff --git a/pb_encode.c b/pb_encode.c
index 13bda22c..cafe853c 100644
--- a/pb_encode.c
+++ b/pb_encode.c
@@ -59,11 +59,12 @@ static const pb_encoder_t PB_ENCODERS[PB_LTYPES_COUNT] = {
static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count)
{
+ size_t i;
pb_byte_t *dest = (pb_byte_t*)stream->state;
stream->state = dest + count;
- while (count--)
- *dest++ = *buf++;
+ for (i = 0; i < count; i++)
+ dest[i] = buf[i];
return true;
}
diff --git a/tests/SConstruct b/tests/SConstruct
index f2abe042..ae79f710 100644
--- a/tests/SConstruct
+++ b/tests/SConstruct
@@ -95,7 +95,7 @@ if not env.GetOption('clean'):
# Check if we can use undefined behaviour sanitizer (only with clang)
# TODO: Fuzz test triggers the bool sanitizer, figure out whether to
# modify the fuzz test or to keep ignoring the check.
- extra = '-fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-recover=bool '
+ extra = '-fsanitize=undefined,integer -fno-sanitize-recover=undefined,integer -fsanitize-recover=bool '
if 'clang' in env['CC']:
if conf.CheckCCFLAGS(extra, linkflags = extra):
conf.env.Append(CORECFLAGS = extra)