diff --git a/src/common/pack.h b/src/common/pack.h
index 8f76eff43228a426448c4586f70deb5a39084ec1..e47ca31b9825d904fbd956625c8745594aef4fda 100644
--- a/src/common/pack.h
+++ b/src/common/pack.h
@@ -367,12 +367,19 @@ int	unpackmem_array(char *valp, uint32_t size_valp, Buf buffer);
 } while (0)
 
 #define safe_xcalloc(p, cnt, sz) do {			\
-	if (!(p = try_xcalloc(cnt, sz)) && cnt && sz)	\
+	size_t _cnt = cnt;				\
+	size_t _sz = sz;				\
+	if (!_cnt || !_sz)				\
+		p = NULL;				\
+	else if (!(p = try_xcalloc(_cnt, _sz)))		\
 		goto unpack_error;			\
 } while (0)
 
 #define safe_xmalloc(p, sz) do {			\
-	if (!(p = try_xmalloc(sz)) && sz)		\
+	size_t _sz = sz;				\
+	if (!_sz)					\
+		p = NULL;				\
+	else if (!(p = try_xmalloc(_sz)))		\
 		goto unpack_error;			\
 } while (0)