summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorSimon Arlott <sa.me.uk>2020-09-24 23:03:14 +0100
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2021-05-27 21:30:21 +0200
commit17218ac718eb00d616c131ad40f1875e43254d5c (patch)
tree55121d9a6a834bc8d2266e5547cc477f209732b4 /src/util
parent7411ebe05198d5365557b6c982b76ceb9e843894 (diff)
downloadexim4-17218ac718eb00d616c131ad40f1875e43254d5c.tar.gz
gen_pkcs3: Terminate string before calling BH_hex2bn()
Signed-off-by: Phil Pennock <pdp@exim.org> (cherry picked from commit 1cf66e5872d517b620c308af634e4e26e3547f06) (cherry picked from commit 48d8c54ecf9493c709d4305850877b6062f285a7)
Diffstat (limited to 'src/util')
-rw-r--r--src/util/gen_pkcs3.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/util/gen_pkcs3.c b/src/util/gen_pkcs3.c
index 6a467e07a..5c4e42993 100644
--- a/src/util/gen_pkcs3.c
+++ b/src/util/gen_pkcs3.c
@@ -54,7 +54,6 @@ void __attribute__((__noreturn__))
die_openssl_err(const char *msg)
{
char err_string[250];
- unsigned long e;
ERR_error_string_n(ERR_get_error(), err_string, sizeof(err_string));
die("%s: %s", msg, err_string);
@@ -71,9 +70,9 @@ bn_from_text(const char *text)
int rc;
len = strlen(text);
- spaceless = malloc(len);
+ spaceless = malloc(len + 1);
if (!spaceless)
- die("malloc(%zu) failed: %s", len, strerror(errno));
+ die("malloc(%zu) failed: %s", len + 1, strerror(errno));
for (p = spaceless, q = text, end = text + len;
q < end;
@@ -81,13 +80,15 @@ bn_from_text(const char *text)
if (!isspace(*q))
*p++ = *q;
}
+ len = p - spaceless;
+ *p++ = '\0';
b = NULL;
rc = BN_hex2bn(&b, spaceless);
- if (rc != p - spaceless)
+ if (rc != (int)len)
die("BN_hex2bn did not convert entire input; took %d of %zu bytes",
- rc, p - spaceless);
+ rc, len);
return b;
}