diff options
-rw-r--r-- | lib/gnutls_buffers.c | 4 | ||||
-rw-r--r-- | lib/gnutls_mbuffers.c | 10 | ||||
-rw-r--r-- | lib/gnutls_mbuffers.h | 14 | ||||
-rw-r--r-- | lib/gnutls_record.c | 5 |
4 files changed, 16 insertions, 17 deletions
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index 2573e69ced..b0aa3ae5da 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -218,7 +218,7 @@ _gnutls_dgram_read(gnutls_session_t session, mbuffer_st ** bufel, gettime(&t1); } - *bufel = _mbuffer_alloc(0, max_size); + *bufel = _mbuffer_alloc(max_size); if (*bufel == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); @@ -286,7 +286,7 @@ _gnutls_stream_read(gnutls_session_t session, mbuffer_st ** bufel, session->internals.direction = 0; - *bufel = _mbuffer_alloc(0, MAX(max_size, size)); + *bufel = _mbuffer_alloc(MAX(max_size, size)); if (!*bufel) { gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; diff --git a/lib/gnutls_mbuffers.c b/lib/gnutls_mbuffers.c index 9dd486882c..7b603437e5 100644 --- a/lib/gnutls_mbuffers.c +++ b/lib/gnutls_mbuffers.c @@ -249,15 +249,12 @@ int _mbuffer_head_remove_bytes(mbuffer_head_st * buf, size_t bytes) * any buffer. * * maximum_size: Amount of data that this segment can contain. - * size: Amount of useful data that is contained in this - * buffer. Generally 0, but this is a shortcut when a fixed amount of - * data will immediately be added to this segment. * * Returns the segment or NULL on error. * * Cost: O(1) */ -mbuffer_st *_mbuffer_alloc(size_t payload_size, size_t maximum_size) +mbuffer_st *_mbuffer_alloc(size_t maximum_size) { mbuffer_st *st; @@ -272,7 +269,7 @@ mbuffer_st *_mbuffer_alloc(size_t payload_size, size_t maximum_size) /* payload points after the mbuffer_st structure */ st->msg.data = (uint8_t *) st + sizeof(mbuffer_st); - st->msg.size = payload_size; + st->msg.size = 0; st->maximum_size = maximum_size; return st; @@ -322,7 +319,7 @@ int _mbuffer_linearize(mbuffer_head_st * buf) /* Nothing to do */ return 0; - bufel = _mbuffer_alloc(buf->byte_length, buf->byte_length); + bufel = _mbuffer_alloc(buf->byte_length); if (!bufel) { gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; @@ -331,6 +328,7 @@ int _mbuffer_linearize(mbuffer_head_st * buf) for (cur = _mbuffer_head_get_first(buf, &msg); msg.data != NULL; cur = _mbuffer_head_get_next(cur, &msg)) { memcpy(&bufel->msg.data[pos], msg.data, msg.size); + bufel->msg.size += msg.size; pos += msg.size; } diff --git a/lib/gnutls_mbuffers.h b/lib/gnutls_mbuffers.h index fdb7aec4ed..72f8f6a8d7 100644 --- a/lib/gnutls_mbuffers.h +++ b/lib/gnutls_mbuffers.h @@ -31,7 +31,7 @@ void _mbuffer_head_clear(mbuffer_head_st * buf); void _mbuffer_enqueue(mbuffer_head_st * buf, mbuffer_st * bufel); mbuffer_st *_mbuffer_dequeue(mbuffer_head_st * buf, mbuffer_st * bufel); int _mbuffer_head_remove_bytes(mbuffer_head_st * buf, size_t bytes); -mbuffer_st *_mbuffer_alloc(size_t payload_size, size_t maximum_size); +mbuffer_st *_mbuffer_alloc(size_t maximum_size); mbuffer_st *_mbuffer_head_get_first(mbuffer_head_st * buf, gnutls_datum_t * msg); @@ -107,16 +107,16 @@ inline static mbuffer_st *_gnutls_handshake_alloc(gnutls_session_t session, size_t size, size_t maximum) { - mbuffer_st *ret = - _mbuffer_alloc(HANDSHAKE_HEADER_SIZE(session) + size, - HANDSHAKE_HEADER_SIZE(session) + maximum); + mbuffer_st *bufel = + _mbuffer_alloc(HANDSHAKE_HEADER_SIZE(session) + maximum); - if (!ret) + if (!bufel) return NULL; - _mbuffer_set_uhead_size(ret, HANDSHAKE_HEADER_SIZE(session)); + _mbuffer_set_udata_size(bufel, HANDSHAKE_HEADER_SIZE(session) + size); + _mbuffer_set_uhead_size(bufel, HANDSHAKE_HEADER_SIZE(session)); - return ret; + return bufel; } /* Free a segment, if the pointer is not NULL diff --git a/lib/gnutls_record.c b/lib/gnutls_record.c index 8d70505337..00c9f27f86 100644 --- a/lib/gnutls_record.c +++ b/lib/gnutls_record.c @@ -501,7 +501,7 @@ _gnutls_send_tlen_int(gnutls_session_t session, content_type_t type, /* now proceed to packet encryption */ cipher_size = MAX_RECORD_SEND_SIZE(session); - bufel = _mbuffer_alloc(0, cipher_size + CIPHER_SLACK_SIZE); + bufel = _mbuffer_alloc(cipher_size + CIPHER_SLACK_SIZE); if (bufel == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); @@ -1199,10 +1199,11 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, * they are encrypted). */ ret = max_decrypted_size(session) + MAX_PAD_SIZE + MAX_HASH_SIZE; - decrypted = _mbuffer_alloc(ret, ret); + decrypted = _mbuffer_alloc(ret); if (decrypted == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + _mbuffer_set_udata_size(decrypted, ret); ciphertext.data = (uint8_t *) _mbuffer_get_udata_ptr(bufel) + record.header_size; ciphertext.size = record.length; |