From 659dd9bccf69f32bfdd01dc49410116ec5c1b0bb Mon Sep 17 00:00:00 2001
From: Jordan Henderson <jhenderson@hdfgroup.org>
Date: Wed, 2 Jan 2019 22:35:26 -0600
Subject: Align H5Lcreate_ud behavior with documentation for NULL udata pointer

Add test for H5Lcreate_ud fix
---
 src/H5L.c    | 2 ++
 test/links.c | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/src/H5L.c b/src/H5L.c
index 33e561a..1f45740 100644
--- a/src/H5L.c
+++ b/src/H5L.c
@@ -648,6 +648,8 @@ H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5L_type_t link_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no link name specified")
     if(link_type < H5L_TYPE_UD_MIN || link_type > H5L_TYPE_MAX)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid link class")
+    if(!udata && udata_size)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "udata cannot be NULL if udata_size is non-zero")
 
     /* Check the group access property list */
     if(H5P_DEFAULT == lcpl_id)
diff --git a/test/links.c b/test/links.c
index b09ddb1..520f784 100644
--- a/test/links.c
+++ b/test/links.c
@@ -8823,6 +8823,12 @@ ud_link_errors(hid_t fapl, hbool_t new_format)
             TEST_ERROR
     } H5E_END_TRY
 
+    /* Try to create a link with H5Lcreate_ud that has a NULL udata pointer, but a non-zero udata_size value */
+    H5E_BEGIN_TRY {
+        if(H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, NULL, 1, H5P_DEFAULT, H5P_DEFAULT) >= 0)
+            TEST_ERROR
+    } H5E_END_TRY;
+
     /* Create a user-defined link to the group. */
     strcpy(group_name, "/group");
     if(H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, &group_name, HDstrlen(group_name) + 1, H5P_DEFAULT, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
-- 
cgit v0.12