diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2021-02-18 11:22:41 +0200 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2021-03-22 12:04:27 +0200 |
commit | bd924775d2b4f561c36a0ca721a44e443ac898cc (patch) | |
tree | db6ead109c78345edd4b8251984bc306e731bfae | |
parent | 62eee3f9f0399bcf3280c2816ec637b68f3fa72e (diff) | |
download | rpm-bd924775d2b4f561c36a0ca721a44e443ac898cc.tar.gz |
Fix regression from commit 165330b7bf0757e30fa8a6de9998a564fb62796f
With the changed logic, the if-clause can fall through without ever
initializing s. The exit code condition is getting more complicated
now so move it to helper variable, assume failure for a safe default.
Fixes: 165330b7bf0757e30fa8a6de9998a564fb62796f
(cherry picked from commit 34f28c1492240c0a02b0abb13af7f1870197e41d)
-rw-r--r-- | lib/header.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/header.c b/lib/header.c index f6d2b0033..cf04c4535 100644 --- a/lib/header.c +++ b/lib/header.c @@ -409,7 +409,8 @@ unsigned headerSizeof(Header h, int magicp) static inline int strtaglen(const char *str, rpm_count_t c, const char *end) { const char *start = str; - const char *s; + const char *s = NULL; + int len = -1; /* assume failure */ if (end) { while (end > start && (s = memchr(start, '\0', end-start))) { @@ -424,7 +425,11 @@ static inline int strtaglen(const char *str, rpm_count_t c, const char *end) start = s + 1; } } - return (c > 0) ? -1 : (s - str + 1); + + if (s != NULL && c == 0) + len = s - str + 1; + + return len; } /** |