Merge pull request #20186 from keszybz/coverity-fixes

Coverity fixes
This commit is contained in:
Luca Boccassi
2021-07-09 21:15:08 +01:00
committed by GitHub
26 changed files with 185 additions and 212 deletions
+15 -15
View File
@@ -289,10 +289,12 @@ int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit,
return r;
}
int cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret) {
char *r, *t;
ssize_t cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret) {
_cleanup_free_ char *ans = NULL;
char *t;
const char *f;
size_t pl;
int r;
assert(s);
assert(ret);
@@ -301,18 +303,17 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
pl = strlen_ptr(prefix);
r = new(char, pl+length+1);
if (!r)
ans = new(char, pl+length+1);
if (!ans)
return -ENOMEM;
if (prefix)
memcpy(r, prefix, pl);
memcpy(ans, prefix, pl);
for (f = s, t = r + pl; f < s + length; f++) {
for (f = s, t = ans + pl; f < s + length; f++) {
size_t remaining;
bool eight_bit = false;
char32_t u;
int k;
remaining = s + length - f;
assert(remaining > 0);
@@ -330,23 +331,21 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
continue;
}
free(r);
return -EINVAL;
}
k = cunescape_one(f + 1, remaining - 1, &u, &eight_bit, flags & UNESCAPE_ACCEPT_NUL);
if (k < 0) {
r = cunescape_one(f + 1, remaining - 1, &u, &eight_bit, flags & UNESCAPE_ACCEPT_NUL);
if (r < 0) {
if (flags & UNESCAPE_RELAX) {
/* Invalid escape code, let's take it literal then */
*(t++) = '\\';
continue;
}
free(r);
return k;
return r;
}
f += k;
f += r;
if (eight_bit)
/* One byte? Set directly as specified */
*(t++) = u;
@@ -357,8 +356,9 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
*t = 0;
*ret = r;
return t - r;
assert(t >= ans); /* Let static analyzers know that the answer is non-negative. */
*ret = TAKE_PTR(ans);
return t - *ret;
}
char* xescape_full(const char *s, const char *bad, size_t console_width, XEscapeFlags flags) {
+5 -4
View File
@@ -45,14 +45,15 @@ char* cescape(const char *s);
char* cescape_length(const char *s, size_t n);
int cescape_char(char c, char *buf);
int cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret);
static inline int cunescape_length(const char *s, size_t length, UnescapeFlags flags, char **ret) {
int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul);
ssize_t cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret);
static inline ssize_t cunescape_length(const char *s, size_t length, UnescapeFlags flags, char **ret) {
return cunescape_length_with_prefix(s, length, NULL, flags, ret);
}
static inline int cunescape(const char *s, UnescapeFlags flags, char **ret) {
static inline ssize_t cunescape(const char *s, UnescapeFlags flags, char **ret) {
return cunescape_length(s, strlen(s), flags, ret);
}
int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul);
typedef enum XEscapeFlags {
XESCAPE_8_BIT = 1 << 0,
+1
View File
@@ -645,6 +645,7 @@ ssize_t base64mem_full(
*z = 0;
*out = r;
assert(z >= r); /* Let static analyzers know that the answer is non-negative. */
return z - r;
}