From 1ab163ec071130aef814c262f109b1ac4721d054 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 14 May 2012 15:44:41 +0200 Subject: maint: add assertions to placate static analysis tools A static analysis tool (http://labs.oracle.com/projects/parfait/) produced some false positive diagnostics. Add assertions to help it understand that the code is correct. * src/stty.c: Include . (display_changed): Add an assertion to placate parfait. (display_all): Likewise. * src/sort.c: Include . (main): Add an assertion to placate parfait. * src/fmt.c: Include . (get_paragraph): Add an assertion to placate parfait. --- src/fmt.c | 6 ++++++ src/sort.c | 5 +++++ src/stty.c | 8 ++++++++ 3 files changed, 19 insertions(+) diff --git a/src/fmt.c b/src/fmt.c index 308b64555..3da198e16 100644 --- a/src/fmt.c +++ b/src/fmt.c @@ -20,6 +20,7 @@ #include #include #include +#include /* Redefine. Otherwise, systems (Unicos for one) with headers that define it to be a type get syntax errors for the variable declaration below. */ @@ -610,6 +611,11 @@ get_paragraph (FILE *f) while (same_para (c) && in_column == other_indent) c = get_line (f, c); } + + /* Tell static analysis tools that using word_limit[-1] is ok. + word_limit is guaranteed to have been incremented by get_line. */ + assert (word < word_limit); + (word_limit - 1)->period = (word_limit - 1)->final = true; next_char = c; return true; diff --git a/src/sort.c b/src/sort.c index 493e7f173..2593a2a6e 100644 --- a/src/sort.c +++ b/src/sort.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "system.h" #include "argmatch.h" #include "error.h" @@ -4243,6 +4244,10 @@ main (int argc, char **argv) char const *optarg1 = argv[optind++]; s = parse_field_count (optarg1 + 1, &key->eword, N_("invalid number after '-'")); + /* When called with a non-NULL message ID, + parse_field_count cannot return NULL. Tell static + analysis tools that dereferencing S is safe. */ + assert (s); if (*s == '.') s = parse_field_count (s + 1, &key->echar, N_("invalid number after '.'")); diff --git a/src/stty.c b/src/stty.c index eb07f853f..a3fc3dd39 100644 --- a/src/stty.c +++ b/src/stty.c @@ -52,6 +52,7 @@ #endif #include #include +#include #include "system.h" #include "error.h" @@ -1538,6 +1539,12 @@ display_changed (struct termios *mode) bitsp = mode_type_flag (mode_info[i].type, mode); mask = mode_info[i].mask ? mode_info[i].mask : mode_info[i].bits; + + /* bitsp would be NULL only for "combination" modes, yet those + are filtered out above via the OMIT flag. Tell static analysis + tools that it's ok to dereference bitsp here. */ + assert (bitsp); + if ((*bitsp & mask) == mode_info[i].bits) { if (mode_info[i].flags & SANE_UNSET) @@ -1615,6 +1622,7 @@ display_all (struct termios *mode, char const *device_name) bitsp = mode_type_flag (mode_info[i].type, mode); mask = mode_info[i].mask ? mode_info[i].mask : mode_info[i].bits; + assert (bitsp); /* See the identical assertion and comment above. */ if ((*bitsp & mask) == mode_info[i].bits) wrapf ("%s", mode_info[i].name); else if (mode_info[i].flags & REV) -- cgit v1.2.3-70-g09d2