diff options
author | Matt Johnston <matt@ucc.asn.au> | 2020-10-25 21:47:42 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2020-10-25 21:47:42 +0800 |
commit | 754dc50b933c76ca39660fe2d9e65e35f9aef428 (patch) | |
tree | 117395874d97b870456a91b645a23c82a778fcfe | |
parent | c7cfa75e92c2fd00bcf1336973c51fa10d05610f (diff) | |
parent | 037d26f055e4818616ffe5c8c3597451550e59e6 (diff) |
merge from main
-rw-r--r-- | buffer.c | 17 | ||||
-rw-r--r-- | buffer.h | 3 | ||||
-rw-r--r-- | keyimport.c | 2 | ||||
-rw-r--r-- | signkey.c | 4 | ||||
-rw-r--r-- | svr-authpubkey.c | 2 |
5 files changed, 17 insertions, 11 deletions
@@ -125,18 +125,23 @@ void buf_incrwritepos(buffer* buf, unsigned int incr) { } } -/* increment the position by incr, negative values are allowed, to - * decrement the pos*/ -void buf_incrpos(buffer* buf, int incr) { +/* increment the position by incr */ +void buf_incrpos(buffer* buf, unsigned int incr) { if (incr > BUF_MAX_INCR - || incr < -BUF_MAX_INCR - || (unsigned int)((int)buf->pos + incr) > buf->len - || ((int)buf->pos + incr) < 0) { + || (buf->pos + incr) > buf->len) { dropbear_exit("Bad buf_incrpos"); } buf->pos += incr; } +/* decrement the position by decr */ +void buf_decrpos(buffer* buf, unsigned int decr) { + if (decr > buf->pos) { + dropbear_exit("Bad buf_decrpos"); + } + buf->pos -= decr; +} + /* Get a byte from the buffer and increment the pos */ unsigned char buf_getbyte(buffer* buf) { @@ -49,7 +49,8 @@ buffer* buf_newcopy(const buffer* buf); void buf_setlen(buffer* buf, unsigned int len); void buf_incrlen(buffer* buf, unsigned int incr); void buf_setpos(buffer* buf, unsigned int pos); -void buf_incrpos(buffer* buf, int incr); /* -ve is ok, to go backwards */ +void buf_incrpos(buffer* buf, unsigned int incr); +void buf_decrpos(buffer* buf, unsigned int decr); void buf_incrwritepos(buffer* buf, unsigned int incr); unsigned char buf_getbyte(buffer* buf); unsigned char buf_getbool(buffer* buf); diff --git a/keyimport.c b/keyimport.c index 2b80770..e58c52d 100644 --- a/keyimport.c +++ b/keyimport.c @@ -637,7 +637,7 @@ static sign_key *openssh_read(const char *filename, const char * UNUSED(passphra buf_incrpos(blobbuf, 8); buf_eatstring(blobbuf); buf_eatstring(blobbuf); - buf_incrpos(blobbuf, -SSH_SIGNKEY_ED25519_LEN-4); + buf_decrpos(blobbuf, SSH_SIGNKEY_ED25519_LEN+4); if (buf_get_ed25519_priv_key(blobbuf, retkey->ed25519key) == DROPBEAR_SUCCESS) { errmsg = NULL; @@ -235,7 +235,7 @@ int buf_get_pub_key(buffer *buf, sign_key *key, enum signkey_type *type) { *type = keytype; /* Rewind the buffer back before "ssh-rsa" etc */ - buf_incrpos(buf, -len - 4); + buf_decrpos(buf, len + 4); #if DROPBEAR_DSS if (keytype == DROPBEAR_SIGNKEY_DSS) { @@ -316,7 +316,7 @@ int buf_get_priv_key(buffer *buf, sign_key *key, enum signkey_type *type) { *type = keytype; /* Rewind the buffer back before "ssh-rsa" etc */ - buf_incrpos(buf, -len - 4); + buf_decrpos(buf, len + 4); #if DROPBEAR_DSS if (keytype == DROPBEAR_SIGNKEY_DSS) { diff --git a/svr-authpubkey.c b/svr-authpubkey.c index 46237b7..a33cc39 100644 --- a/svr-authpubkey.c +++ b/svr-authpubkey.c @@ -294,7 +294,7 @@ static int checkpubkey_line(buffer* line, int line_num, const char* filename, is_comment = 1; break; } - buf_incrpos(line, -1); + buf_decrpos(line, 1); break; } if (is_comment) { |