diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2016-01-01 21:51:15 +0100 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2017-06-08 10:45:54 +0200 |
commit | 249f047feff1fbbf64049b99055b1969ff6d0f0e (patch) | |
tree | 3a790e301b4b9028569684f9f5e26f905e15fb88 | |
parent | c9e7037f0a3ed9d3fb7dbe7796a0636348d5a359 (diff) | |
download | libssh-249f047feff1fbbf64049b99055b1969ff6d0f0e.tar.gz libssh-249f047feff1fbbf64049b99055b1969ff6d0f0e.tar.xz libssh-249f047feff1fbbf64049b99055b1969ff6d0f0e.zip |
buffer_unpack: support bignums
Conflicts:
src/buffer.c
-rw-r--r-- | src/buffer.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c index 2da6758a..b0bb3213 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -852,9 +852,11 @@ int ssh_buffer_unpack_va(struct ssh_buffer_struct *buffer, uint64_t *qword; ssh_string *string; char **cstring; + bignum *bignum; void **data; } o; size_t len, rlen, max_len; + ssh_string tmp_string; va_list ap_copy; int count; @@ -894,6 +896,18 @@ int ssh_buffer_unpack_va(struct ssh_buffer_struct *buffer, *o.qword = ntohll(*o.qword); rc = rlen==8 ? SSH_OK : SSH_ERROR; break; + case 'B': + o.bignum = va_arg(ap, bignum *); + *o.bignum = NULL; + tmp_string = ssh_buffer_get_ssh_string(buffer); + if (tmp_string == NULL){ + rc = SSH_ERROR; + break; + } + *o.bignum = ssh_make_string_bn(tmp_string); + ssh_string_free(tmp_string); + rc = (*o.bignum != NULL)? SSH_OK : SSH_ERROR; + break; case 'S': o.string = va_arg(ap, ssh_string *); *o.string = ssh_buffer_get_ssh_string(buffer); @@ -1039,6 +1053,7 @@ int ssh_buffer_unpack_va(struct ssh_buffer_struct *buffer, * 's': char ** (C string, pulled as SSH string) * 'P': size_t, void ** (len of data, pointer to data) * only pulls data. + * 'B': bignum * (pulled as SSH string) * @returns SSH_OK on success * SSH_ERROR on error * @warning when using 'P' with a constant size (e.g. 8), do not |