summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gnutls_buffers.c4
-rw-r--r--lib/gnutls_mbuffers.c10
-rw-r--r--lib/gnutls_mbuffers.h14
-rw-r--r--lib/gnutls_record.c5
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;