diff --git a/gck-rpc-dispatch.c b/gck-rpc-dispatch.c index 0b7aa0d22844d61fc43d063a2e7dab2a61eec266..67ea0aabf0514a976ac50b177d670f5227aa8c06 100644 --- a/gck-rpc-dispatch.c +++ b/gck-rpc-dispatch.c @@ -257,11 +257,12 @@ proto_read_byte_array(CallState * cs, CK_BYTE_PTR * array, CK_ULONG * n_array) return PARSE_ERROR; if (!valid) { + uint32_t n_size; /* No array, no data, just length */ if (!egg_buffer_get_uint32 - (&msg->buffer, msg->parsed, &msg->parsed, &n_data)) + (&msg->buffer, msg->parsed, &msg->parsed, &n_size)) return PARSE_ERROR; - *n_array = n_data; + *n_array = (size_t) n_size; *array = NULL; return CKR_OK; } diff --git a/gck-rpc-module.c b/gck-rpc-module.c index a7a522e692cec76ba95f27a6ac46352c64732246..27b4145edbfd8842f5c8a13aa1cdf85d37d6fa8f 100644 --- a/gck-rpc-module.c +++ b/gck-rpc-module.c @@ -826,12 +826,14 @@ proto_read_byte_array(GckRpcMessage * msg, CK_BYTE_PTR arr, /* If not valid, then just the length is encoded, this can signify CKR_BUFFER_TOO_SMALL */ if (!valid) { + uint32_t t_len; + if (!egg_buffer_get_uint32 (&msg->buffer, msg->parsed, &msg->parsed, - (uint32_t *) & vlen)) + & t_len)) return PARSE_ERROR; - *len = vlen; + *len = t_len; if (arr) return CKR_BUFFER_TOO_SMALL;