Enable clang integer sanitizer and clean up a few warnings.
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Fri, 9 Dec 2016 16:57:08 +0000 (18:57 +0200)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Fri, 9 Dec 2016 16:57:08 +0000 (18:57 +0200)
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.

pb_decode.c
pb_encode.c
tests/SConstruct

index 1f6aeae..b2a3a31 100644 (file)
@@ -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;
index 13bda22..cafe853 100644 (file)
@@ -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;
 }
index f2abe04..ae79f71 100644 (file)
@@ -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)