mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-11-27 13:21:11 +03:00
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>
This commit is contained in:
@@ -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 */ \
|
while(p[len] == '\n' || p[len] == '\r') /* skip empty lines */ \
|
||||||
len++; \
|
len++; \
|
||||||
if(p[len] == '\0') /* EOL */ \
|
if(p[len] == '\0') /* EOL */ \
|
||||||
len = -1; \
|
eol = true; \
|
||||||
else /* calculate length */ \
|
else /* calculate length */ \
|
||||||
for(p += len, len = 0; p[len] && p[len] != '\n' \
|
for(p += len, len = 0; p[len] && p[len] != '\n' \
|
||||||
&& p[len] != '\r'; len++); \
|
&& 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;
|
unsigned int iv_len = 0;
|
||||||
int algo = 0;
|
int algo = 0;
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
int len;
|
bool eol = false;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
buffer = ssh_buffer_new();
|
buffer = ssh_buffer_new();
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
@@ -441,25 +442,38 @@ static ssh_buffer privatekey_string_to_buffer(const char *pkey, int type,
|
|||||||
len = 0;
|
len = 0;
|
||||||
get_next_line(p, len);
|
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 */
|
/* skip line */
|
||||||
get_next_line(p, len);
|
get_next_line(p, len);
|
||||||
}
|
}
|
||||||
if(len < 0) {
|
if (eol) {
|
||||||
/* no header found */
|
ssh_buffer_free(buffer);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* skip header line */
|
/* skip header line */
|
||||||
get_next_line(p, len);
|
get_next_line(p, len);
|
||||||
|
if (eol) {
|
||||||
|
ssh_buffer_free(buffer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (len > 11 && strncmp("Proc-Type: 4,ENCRYPTED", p, 11) == 0) {
|
if (len > 11 && strncmp("Proc-Type: 4,ENCRYPTED", p, 11) == 0) {
|
||||||
/* skip line */
|
/* skip line */
|
||||||
get_next_line(p, len);
|
get_next_line(p, len);
|
||||||
|
if (eol) {
|
||||||
|
ssh_buffer_free(buffer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (len > 10 && strncmp("DEK-Info: ", p, 10) == 0) {
|
if (len > 10 && strncmp("DEK-Info: ", p, 10) == 0) {
|
||||||
p += 10;
|
p += 10;
|
||||||
len = 0;
|
len = 0;
|
||||||
get_next_line(p, len);
|
get_next_line(p, len);
|
||||||
|
if (eol) {
|
||||||
|
ssh_buffer_free(buffer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (privatekey_dek_header(p, len, &algo, &mode, &key_len,
|
if (privatekey_dek_header(p, len, &algo, &mode, &key_len,
|
||||||
&iv, &iv_len) < 0) {
|
&iv, &iv_len) < 0) {
|
||||||
ssh_buffer_free(buffer);
|
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);
|
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) {
|
if (ssh_buffer_add_data(buffer, p, len) < 0) {
|
||||||
ssh_buffer_free(buffer);
|
ssh_buffer_free(buffer);
|
||||||
SAFE_FREE(iv);
|
SAFE_FREE(iv);
|
||||||
@@ -491,7 +505,7 @@ static ssh_buffer privatekey_string_to_buffer(const char *pkey, int type,
|
|||||||
get_next_line(p, len);
|
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);
|
ssh_buffer_free(buffer);
|
||||||
SAFE_FREE(iv);
|
SAFE_FREE(iv);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user