summaryrefslogtreecommitdiff
path: root/lib/gnutls_record.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2007-11-14 07:47:51 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2007-11-14 07:47:51 +0200
commitf3a6c12fb06c0b7f3e54b210cafae79ca3476c08 (patch)
tree66b3d7f7be934df7e529462cc7a65b5610559588 /lib/gnutls_record.c
parent5e4e5de01c2260095a6ab89fe1ebcb3e05f20b11 (diff)
downloadgnutls-f3a6c12fb06c0b7f3e54b210cafae79ca3476c08.tar.gz
Corrected bug in decompression of expanded compression data.
Diffstat (limited to 'lib/gnutls_record.c')
-rw-r--r--lib/gnutls_record.c12
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;