From d9f1c639d5162617ab0aeec23865771dc4fbcbcd Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 28 May 2015 16:36:51 +0100 Subject: [PATCH] Change return type of the new accessors The new accessors SSL_get_client_random, SSL_get_server_random and SSL_SESSION_get_master_key should return a size_t to match the type of the |outlen| parameter. Reviewed-by: Richard Levitte --- doc/ssl/SSL_get_client_random.pod | 14 +++++++------- include/openssl/ssl.h | 12 ++++++------ ssl/ssl_lib.c | 16 ++++++++-------- util/ssleay.num | 4 ++++ 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/doc/ssl/SSL_get_client_random.pod b/doc/ssl/SSL_get_client_random.pod index 75a5c33d22..2cddf73797 100644 --- a/doc/ssl/SSL_get_client_random.pod +++ b/doc/ssl/SSL_get_client_random.pod @@ -8,9 +8,9 @@ SSL_get_client_random, SSL_get_server_random, SSL_SESSION_get_master_key - retri #include - int SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen); - int SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen); - int SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen); + size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen); + size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen); + size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen); =head1 DESCRIPTION @@ -18,8 +18,8 @@ SSL_get_client_random() extracts the random value sent from the client to the server during the initial SSL/TLS handshake. It copies as many bytes as it can of this value into the buffer provided in B, which must have at least B bytes available. It returns the -total number of bytes that were actually copied. If B is less -than zero, SSL_get_client_random() copies nothing, and returns the +total number of bytes that were actually copied. If B is +zero, SSL_get_client_random() copies nothing, and returns the total size of the client_random value. SSL_get_server_random() behaves the same, but extracts the random value @@ -63,10 +63,10 @@ values based on their view of the current time. =head1 RETURN VALUES -If B is at least 0, these functions return the number of bytes +If B is greater than 0, these functions return the number of bytes actually copied, which will be less than or equal to B. -If B is less than 0, these functions return the maximum number +If B is 0, these functions return the maximum number of bytes they would copy--that is, the length of the underlying field. =head1 SEE ALSO diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h index 261e399640..3e2dac6746 100644 --- a/include/openssl/ssl.h +++ b/include/openssl/ssl.h @@ -1652,12 +1652,12 @@ void SSL_set_state(SSL *ssl, int state); void SSL_set_verify_result(SSL *ssl, long v); __owur long SSL_get_verify_result(const SSL *ssl); -__owur int SSL_get_client_random(const SSL *ssl, unsigned char *out, - size_t outlen); -__owur int SSL_get_server_random(const SSL *ssl, unsigned char *out, - size_t outlen); -__owur int SSL_SESSION_get_master_key(const SSL_SESSION *ssl, - unsigned char *out, size_t outlen); +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *ssl, + unsigned char *out, size_t outlen); __owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); void *SSL_get_ex_data(const SSL *ssl, int idx); diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index f046770756..1ce4f36cc9 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -2897,39 +2897,39 @@ long SSL_get_verify_result(const SSL *ssl) return (ssl->verify_result); } -int SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen) +size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen) { if (outlen == 0) return sizeof(ssl->s3->client_random); if (outlen > sizeof(ssl->s3->client_random)) outlen = sizeof(ssl->s3->client_random); memcpy(out, ssl->s3->client_random, outlen); - return (outlen); + return outlen; } -int SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen) +size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen) { if (outlen == 0) return sizeof(ssl->s3->server_random); if (outlen > sizeof(ssl->s3->server_random)) outlen = sizeof(ssl->s3->server_random); memcpy(out, ssl->s3->server_random, outlen); - return (outlen); + return outlen; } -int SSL_SESSION_get_master_key(const SSL_SESSION *session, +size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen) { - if (outlen == 0) - return session->master_key_length; if (session->master_key_length < 0) { /* Should never happen */ return 0; } + if (outlen == 0) + return session->master_key_length; if (outlen > (size_t)session->master_key_length) outlen = session->master_key_length; memcpy(out, session->master_key, outlen); - return (outlen); + return outlen; } int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, diff --git a/util/ssleay.num b/util/ssleay.num index 1b4755cb12..1441be770b 100755 --- a/util/ssleay.num +++ b/util/ssleay.num @@ -399,3 +399,7 @@ SSL_use_certificate_chain_file 433 EXIST::FUNCTION:STDIO TLS_server_method 434 EXIST::FUNCTION: TLS_method 435 EXIST::FUNCTION: TLS_client_method 436 EXIST::FUNCTION: +SSL_get_server_random 437 EXIST::FUNCTION: +SSL_get_client_ciphers 438 EXIST::FUNCTION: +SSL_get_client_random 439 EXIST::FUNCTION: +SSL_SESSION_get_master_key 440 EXIST::FUNCTION: -- 2.25.1