Fix a few gcc analyzer complaints in util-strings.*

Sprinkle a few asserts into the various string helpers for where our
arguments must not be NULL.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2023-07-19 14:16:45 +10:00
parent 2ebb6f629f
commit 35a237e24c
2 changed files with 31 additions and 0 deletions

View file

@ -39,6 +39,8 @@
static const char * static const char *
next_word(const char **state, size_t *len, const char *separators) next_word(const char **state, size_t *len, const char *separators)
{ {
assert(state != NULL);
const char *next = *state; const char *next = *state;
size_t l; size_t l;
@ -72,6 +74,7 @@ strv_from_argv(int argc, char **argv)
char **strv = NULL; char **strv = NULL;
assert(argc >= 0); assert(argc >= 0);
assert(argv != NULL);
if (argc == 0) if (argc == 0)
return NULL; return NULL;
@ -109,6 +112,8 @@ char **
strv_from_string(const char *in, const char *separators, size_t *num_elements) strv_from_string(const char *in, const char *separators, size_t *num_elements)
{ {
assert(in != NULL); assert(in != NULL);
assert(separators != NULL);
assert(num_elements != NULL);
const char *s = in; const char *s = in;
size_t l, nelems = 0; size_t l, nelems = 0;
@ -159,6 +164,8 @@ strv_from_string(const char *in, const char *separators, size_t *num_elements)
char * char *
strv_join(char **strv, const char *joiner) strv_join(char **strv, const char *joiner)
{ {
assert(strv != NULL);
char **s; char **s;
char *str; char *str;
size_t slen = 0; size_t slen = 0;
@ -200,6 +207,8 @@ strv_join(char **strv, const char *joiner)
const char * const char *
safe_basename(const char *filename) safe_basename(const char *filename)
{ {
assert(filename != NULL);
const char *basename; const char *basename;
if (*filename == '\0') if (*filename == '\0')
@ -229,6 +238,8 @@ safe_basename(const char *filename)
char * char *
trunkname(const char *filename) trunkname(const char *filename)
{ {
assert(filename != NULL);
const char *base = safe_basename(filename); const char *base = safe_basename(filename);
char *suffix; char *suffix;

View file

@ -143,6 +143,8 @@ xvasprintf(char **strp, const char *fmt, va_list args)
static inline bool static inline bool
safe_atoi_base(const char *str, int *val, int base) safe_atoi_base(const char *str, int *val, int base)
{ {
assert(str != NULL);
char *endptr; char *endptr;
long v; long v;
@ -167,12 +169,15 @@ safe_atoi_base(const char *str, int *val, int base)
static inline bool static inline bool
safe_atoi(const char *str, int *val) safe_atoi(const char *str, int *val)
{ {
assert(str != NULL);
return safe_atoi_base(str, val, 10); return safe_atoi_base(str, val, 10);
} }
static inline bool static inline bool
safe_atou_base(const char *str, unsigned int *val, int base) safe_atou_base(const char *str, unsigned int *val, int base)
{ {
assert(str != NULL);
char *endptr; char *endptr;
unsigned long v; unsigned long v;
@ -197,12 +202,15 @@ safe_atou_base(const char *str, unsigned int *val, int base)
static inline bool static inline bool
safe_atou(const char *str, unsigned int *val) safe_atou(const char *str, unsigned int *val)
{ {
assert(str != NULL);
return safe_atou_base(str, val, 10); return safe_atou_base(str, val, 10);
} }
static inline bool static inline bool
safe_atod(const char *str, double *val) safe_atod(const char *str, double *val)
{ {
assert(str != NULL);
char *endptr; char *endptr;
double v; double v;
#ifdef HAVE_LOCALE_H #ifdef HAVE_LOCALE_H
@ -288,6 +296,10 @@ double_array_from_string(const char *in,
const char *separator, const char *separator,
size_t *length) size_t *length)
{ {
assert(in != NULL);
assert(separator != NULL);
assert(length != NULL);
double *result = NULL; double *result = NULL;
*length = 0; *length = 0;
@ -386,6 +398,8 @@ error:
static inline char * static inline char *
strstrip(const char *input, const char *what) strstrip(const char *input, const char *what)
{ {
assert(input != NULL);
char *str, *last; char *str, *last;
str = safe_strdup(&input[strspn(input, what)]); str = safe_strdup(&input[strspn(input, what)]);
@ -409,6 +423,9 @@ strstrip(const char *input, const char *what)
static inline bool static inline bool
strendswith(const char *str, const char *suffix) strendswith(const char *str, const char *suffix)
{ {
if (str == NULL)
return false;
size_t slen = strlen(str); size_t slen = strlen(str);
size_t suffixlen = strlen(suffix); size_t suffixlen = strlen(suffix);
size_t offset; size_t offset;
@ -423,6 +440,9 @@ strendswith(const char *str, const char *suffix)
static inline bool static inline bool
strstartswith(const char *str, const char *prefix) strstartswith(const char *str, const char *prefix)
{ {
if (str == NULL)
return false;
size_t prefixlen = strlen(prefix); size_t prefixlen = strlen(prefix);
return prefixlen > 0 ? strneq(str, prefix, strlen(prefix)) : false; return prefixlen > 0 ? strneq(str, prefix, strlen(prefix)) : false;