aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2019-02-21 14:17:45 +0100
committerAndreas Schneider <asn@cryptomilk.org>2019-02-22 11:42:26 +0100
commit47014eb2732c93781ad91128820b5def49c0903e (patch)
treebb3226e17e3b42c827e35468c07b9e9c9b589f59
parent22231061131b0b10805899e5b180212854bc7827 (diff)
downloadlibssh-47014eb2732c93781ad91128820b5def49c0903e.tar.gz
libssh-47014eb2732c93781ad91128820b5def49c0903e.tar.xz
libssh-47014eb2732c93781ad91128820b5def49c0903e.zip
pki: Fix size type for len in privatekey_string_to_buffer()
src/pki_gcrypt.c:485:10: error: assuming signed overflow does not occur when simplifying conditional to constant [-Werror=strict-overflow] Fixes T132 Signed-off-by: Andreas Schneider <asn@cryptomilk.org> (cherry picked from commit 7a8ed6d02b48ca8de19a25906abc5a6c11f23297)
-rw-r--r--src/pki_gcrypt.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/pki_gcrypt.c b/src/pki_gcrypt.c
index c0cf5926..1362229d 100644
--- a/src/pki_gcrypt.c
+++ b/src/pki_gcrypt.c
@@ -389,7 +389,7 @@ static int privatekey_dek_header(const char *header, unsigned int header_len,
while(p[len] == '\n' || p[len] == '\r') /* skip empty lines */ \
len++; \
if(p[len] == '\0') /* EOL */ \
- len = -1; \
+ eol = true; \
else /* calculate length */ \
for(p += len, len = 0; p[len] && p[len] != '\n' \
&& p[len] != '\r'; len++); \
@@ -409,7 +409,8 @@ static ssh_buffer privatekey_string_to_buffer(const char *pkey, int type,
unsigned int iv_len = 0;
int algo = 0;
int mode = 0;
- int len;
+ bool eol = false;
+ size_t len;
buffer = ssh_buffer_new();
if (buffer == NULL) {
@@ -441,25 +442,38 @@ static ssh_buffer privatekey_string_to_buffer(const char *pkey, int type,
len = 0;
get_next_line(p, len);
- while(len > 0 && strncmp(p, header_begin, header_begin_size)) {
+ while(!eol && strncmp(p, header_begin, header_begin_size)) {
/* skip line */
get_next_line(p, len);
}
- if(len < 0) {
- /* no header found */
+ if (eol) {
+ ssh_buffer_free(buffer);
return NULL;
}
+
/* skip header line */
get_next_line(p, len);
+ if (eol) {
+ ssh_buffer_free(buffer);
+ return NULL;
+ }
if (len > 11 && strncmp("Proc-Type: 4,ENCRYPTED", p, 11) == 0) {
/* skip line */
get_next_line(p, len);
+ if (eol) {
+ ssh_buffer_free(buffer);
+ return NULL;
+ }
if (len > 10 && strncmp("DEK-Info: ", p, 10) == 0) {
p += 10;
len = 0;
get_next_line(p, len);
+ if (eol) {
+ ssh_buffer_free(buffer);
+ return NULL;
+ }
if (privatekey_dek_header(p, len, &algo, &mode, &key_len,
&iv, &iv_len) < 0) {
ssh_buffer_free(buffer);
@@ -482,7 +496,7 @@ static ssh_buffer privatekey_string_to_buffer(const char *pkey, int type,
}
get_next_line(p, len);
- while(len > 0 && strncmp(p, header_end, header_end_size) != 0) {
+ while(!eol && strncmp(p, header_end, header_end_size) != 0) {
if (ssh_buffer_add_data(buffer, p, len) < 0) {
ssh_buffer_free(buffer);
SAFE_FREE(iv);
@@ -491,7 +505,7 @@ static ssh_buffer privatekey_string_to_buffer(const char *pkey, int type,
get_next_line(p, len);
}
- if (len == -1 || strncmp(p, header_end, header_end_size) != 0) {
+ if (eol || strncmp(p, header_end, header_end_size) != 0) {
ssh_buffer_free(buffer);
SAFE_FREE(iv);
return NULL;