summaryrefslogtreecommitdiff
path: root/lib/str.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-09-29 09:08:59 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2018-02-19 15:29:35 +0100
commit344633626c9c497a61d975f22f83f227934b4c21 (patch)
treef7b42ea918cb53141747f90103580a9ae4fd2965 /lib/str.c
parent8c107a11041c6a093dca78fd159f88dbfb307bbc (diff)
downloadgnutls-344633626c9c497a61d975f22f83f227934b4c21.tar.gz
buf: _gnutls_buffer_pop_data made easier to use
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
Diffstat (limited to 'lib/str.c')
-rw-r--r--lib/str.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/lib/str.c b/lib/str.c
index 378cedfa0c..c8d742e91e 100644
--- a/lib/str.c
+++ b/lib/str.c
@@ -280,24 +280,23 @@ int _gnutls_buffer_to_datum(gnutls_buffer_st * str, gnutls_datum_t * data, unsig
return ret;
}
-/* returns data from a string in a constant buffer.
+/* returns data from a string in a constant buffer. Will
+ * fail with GNUTLS_E_PARSING_ERROR, if the string has not enough data.
*/
-void
+int
_gnutls_buffer_pop_data(gnutls_buffer_st * str, void *data,
- size_t * req_size)
+ size_t req_size)
{
gnutls_datum_t tdata;
- _gnutls_buffer_pop_datum(str, &tdata, *req_size);
- if (tdata.data == NULL) {
- *req_size = 0;
- return;
+ _gnutls_buffer_pop_datum(str, &tdata, req_size);
+ if (tdata.data == NULL || tdata.size != req_size) {
+ return GNUTLS_E_PARSING_ERROR;
}
- *req_size = tdata.size;
memcpy(data, tdata.data, tdata.size);
- return;
+ return 0;
}
int