From cdaf07d30bd440cf3ee2f6615d044634734047bd Mon Sep 17 00:00:00 2001 From: Paul Selkirk Date: Mon, 21 Mar 2016 22:35:48 -0400 Subject: stupid fixes --- .gitignore | 1 + GNUmakefile | 4 ++-- rpc_server.c | 5 ++--- tests/GNUmakefile | 2 +- tests/test-rpc_get_version.c | 20 ++++++++++++++++++++ xdr.c | 22 ++++++++++++---------- 6 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 tests/test-rpc_get_version.c diff --git a/.gitignore b/.gitignore index aa56703..b5ca513 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,6 @@ tests/test-rpc_server tests/test-rsa tests/test-rsa-*.der tests/test-trng +tests/test-rpc_get_version utils/cores utils/eim_peek_poke diff --git a/GNUmakefile b/GNUmakefile index 66f04cb..75bcf44 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -78,7 +78,7 @@ endif # loopback: communicate over loopback socket on Novena # serial: communicate over USB in serial pass-through mode -RPC_CORE_OBJ = rpc_api.o rpc_hash.o rpc_misc.o rpc_pkey.o +RPC_CORE_OBJ = rpc_hash.o rpc_misc.o rpc_pkey.o ifdef RPC_SERVER RPC_SERVER_OBJ = rpc_server.o ${RPC_CORE_OBJ} @@ -86,7 +86,7 @@ ifdef RPC_SERVER endif ifdef RPC_CLIENT - RPC_CLIENT_OBJ = rpc_client.o + RPC_CLIENT_OBJ = rpc_client.o rpc_api.o ifeq (${RPC_CLIENT},local) RPC_CLIENT_OBJ += ${RPC_CORE_OBJ} else diff --git a/rpc_server.c b/rpc_server.c index d57fc57..6b3514c 100644 --- a/rpc_server.c +++ b/rpc_server.c @@ -50,8 +50,6 @@ static hal_error_t get_version(uint8_t **iptr, const uint8_t * const ilimit, uint32_t version; hal_error_t ret; - check(hal_xdr_encode_int(optr, olimit, RPC_VERSION)); - /* call the local function */ ret = hal_rpc_local_misc_dispatch.get_version(&version); if (ret == HAL_OK) @@ -605,7 +603,8 @@ void hal_rpc_server_main(void) while (!interrupt) { ilen = sizeof(inbuf); - if (hal_rpc_recvfrom(inbuf, &ilen, &opaque) == HAL_OK) { + ret = hal_rpc_recvfrom(inbuf, &ilen, &opaque); + if (ret == HAL_OK) { iptr = inbuf; ilimit = inbuf + ilen; optr = outbuf + 4; /* reserve 4 bytes for return code */ diff --git a/tests/GNUmakefile b/tests/GNUmakefile index b4d006d..0fa6281 100644 --- a/tests/GNUmakefile +++ b/tests/GNUmakefile @@ -40,7 +40,7 @@ ifndef RPC_SERVER endif endif ifdef RPC_CLIENT - BIN += test-rpc_hash + BIN += test-rpc_hash test-rpc_get_version endif ifdef RPC_SERVER BIN += test-rpc_server diff --git a/tests/test-rpc_get_version.c b/tests/test-rpc_get_version.c new file mode 100644 index 0000000..84869c3 --- /dev/null +++ b/tests/test-rpc_get_version.c @@ -0,0 +1,20 @@ +#include +#include +#include +#include + +#include +#include + +int main (int argc, char *argv[]) +{ + uint32_t version; + +#define check(op) { hal_error_t err; if ((err = (op)) != HAL_OK) { printf("%s: %s\n", #op, hal_error_string(err)); return 1; } } + + check(hal_rpc_client_init()); + check(hal_rpc_get_version(&version)); + printf("%08x\n", version); + + return 0; +} diff --git a/xdr.c b/xdr.c index 2741752..42f0793 100644 --- a/xdr.c +++ b/xdr.c @@ -157,15 +157,6 @@ hal_error_t hal_xdr_decode_buffer_in_place(uint8_t **inbuf, const uint8_t * cons return HAL_ERROR_IO_BAD_COUNT; } - /* user buffer is too small, update *len - */ - if (*len < xdr_len) { - *len = xdr_len; - /* undo read of length */ - *inbuf = orig_inbuf; - return HAL_ERROR_IO_BAD_COUNT; - } - /* return a pointer to the string or opaque data */ *value = *inbuf; *len = xdr_len; @@ -183,9 +174,20 @@ hal_error_t hal_xdr_decode_buffer(uint8_t **inbuf, const uint8_t * const limit, { hal_error_t ret; uint8_t *vptr; + uint8_t *orig_inbuf = *inbuf; + uint32_t xdr_len; + + if ((ret = hal_xdr_decode_buffer_in_place(inbuf, limit, &vptr, &xdr_len)) == HAL_OK) { + if (*len < xdr_len) { + /* user buffer is too small, update *len */ + *len = xdr_len; + /* undo read of length */ + *inbuf = orig_inbuf; + return HAL_ERROR_IO_BAD_COUNT; + } - if ((ret = hal_xdr_decode_buffer_in_place(inbuf, limit, &vptr, len)) == HAL_OK) memcpy(value, vptr, *len); + } return ret; } -- cgit v1.2.3