summaryrefslogtreecommitdiffstats
path: root/src/H5T.c
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2018-02-27 02:31:40 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2018-02-27 02:31:40 (GMT)
commit302053f978e38a8d4306a7c1233cdf8fd2ec28dd (patch)
tree969544258f45fab8be9a71d1b7ce367bc520c141 /src/H5T.c
parent9ea358d971ae45698dba6794583a39c4023085ad (diff)
downloadhdf5-302053f978e38a8d4306a7c1233cdf8fd2ec28dd.zip
hdf5-302053f978e38a8d4306a7c1233cdf8fd2ec28dd.tar.gz
hdf5-302053f978e38a8d4306a7c1233cdf8fd2ec28dd.tar.bz2
Fix for HDFFV-10355 (CVE-2017-17506).
Diffstat (limited to 'src/H5T.c')
-rw-r--r--src/H5T.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/H5T.c b/src/H5T.c
index eca0132..f06ac18 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -2822,8 +2822,13 @@ H5Tdecode(const void *buf)
if(buf == NULL)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "empty buffer")
- /* Create datatype by decoding buffer */
- if(NULL == (dt = H5T_decode((const unsigned char *)buf)))
+ /* Create datatype by decoding buffer
+ * There is no way to get the size of the buffer, so we pass in
+ * SIZE_MAX and assume the caller knows what they are doing.
+ * Really fixing this will require an H5Tdecode2() call that
+ * takes a size parameter.
+ */
+ if(NULL == (dt = H5T_decode(SIZE_MAX, (const unsigned char *)buf)))
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "can't decode object")
/* Register the type and return the ID */
@@ -2912,7 +2917,7 @@ done:
*-------------------------------------------------------------------------
*/
H5T_t *
-H5T_decode(const unsigned char *buf)
+H5T_decode(size_t buf_size, const unsigned char *buf)
{
H5F_t *f = NULL; /* Fake file structure*/
H5T_t *ret_value = NULL; /* Return value */
@@ -2932,7 +2937,7 @@ H5T_decode(const unsigned char *buf)
HGOTO_ERROR(H5E_DATATYPE, H5E_VERSION, NULL, "unknown version of encoded datatype")
/* Decode the serialized datatype message */
- if(NULL == (ret_value = (H5T_t *)H5O_msg_decode(f, H5AC_noio_dxpl_id, NULL, H5O_DTYPE_ID, buf)))
+ if(NULL == (ret_value = (H5T_t *)H5O_msg_decode(f, H5AC_noio_dxpl_id, NULL, H5O_DTYPE_ID, buf_size, buf)))
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, NULL, "can't decode object")
/* Mark datatype as being in memory now */