diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2007-11-14 07:47:51 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2007-11-14 07:47:51 +0200 |
commit | f3a6c12fb06c0b7f3e54b210cafae79ca3476c08 (patch) | |
tree | 66b3d7f7be934df7e529462cc7a65b5610559588 /lib/gnutls_record.c | |
parent | 5e4e5de01c2260095a6ab89fe1ebcb3e05f20b11 (diff) | |
download | gnutls-f3a6c12fb06c0b7f3e54b210cafae79ca3476c08.tar.gz |
Corrected bug in decompression of expanded compression data.
Diffstat (limited to 'lib/gnutls_record.c')
-rw-r--r-- | lib/gnutls_record.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/gnutls_record.c b/lib/gnutls_record.c index cf904f492d..4648618746 100644 --- a/lib/gnutls_record.c +++ b/lib/gnutls_record.c @@ -788,13 +788,19 @@ record_check_type (gnutls_session_t session, inline static int get_temp_recv_buffer (gnutls_session_t session, gnutls_datum_t * tmp) { +size_t max_record_size; + + if (gnutls_compression_get(session) != GNUTLS_COMP_NULL) + max_record_size = MAX_RECORD_RECV_SIZE + EXTRA_COMP_SIZE; + else + max_record_size = MAX_RECORD_RECV_SIZE; /* We allocate MAX_RECORD_RECV_SIZE length * because we cannot predict the output data by the record * packet length (due to compression). */ - if (MAX_RECORD_RECV_SIZE > session->internals.recv_buffer.size || + if (max_record_size > session->internals.recv_buffer.size || session->internals.recv_buffer.data == NULL) { @@ -802,7 +808,7 @@ get_temp_recv_buffer (gnutls_session_t session, gnutls_datum_t * tmp) */ session->internals.recv_buffer.data = gnutls_realloc (session->internals.recv_buffer.data, - MAX_RECORD_RECV_SIZE); + max_record_size); if (session->internals.recv_buffer.data == NULL) { @@ -810,7 +816,7 @@ get_temp_recv_buffer (gnutls_session_t session, gnutls_datum_t * tmp) return GNUTLS_E_MEMORY_ERROR; } - session->internals.recv_buffer.size = MAX_RECORD_RECV_SIZE; + session->internals.recv_buffer.size = max_record_size; } tmp->data = session->internals.recv_buffer.data; |