diff --git a/daemon/network.c b/daemon/network.c
index ee2bb1bfc8b35fc799f9b59879b4131ad548d3cf..10a8d6ad0412b4c9e22b5c0e6fe899dc9709f232 100644
--- a/daemon/network.c
+++ b/daemon/network.c
@@ -86,7 +86,10 @@ static int insert_endpoint(struct network *net, const char *addr, struct endpoin
 		array_init(*ep_array);
 	}
 
-	return array_push(*ep_array, ep);
+	if (array_push(*ep_array, ep) < 0) {
+		return kr_error(ENOMEM);
+	}
+	return kr_ok();
 }
 
 /** Open endpoint protocols. */
diff --git a/lib/generic/array.h b/lib/generic/array.h
index 5655396f15a19110790b1e0ec6102acdd98790bd..a9316482b5d146c90f868e975f9017ec8995e1c2 100644
--- a/lib/generic/array.h
+++ b/lib/generic/array.h
@@ -127,9 +127,9 @@ static inline void array_std_free(void *baton, void *p)
  * @return element index on success, <0 on failure
  */
 #define array_push(array, val) \
-	(array).len < (array).cap ? ((array).at[(array).len] = val, (array).len++) \
+	(int)((array).len < (array).cap ? ((array).at[(array).len] = val, (array).len++) \
 		: (array_reserve(array, ((array).cap + 1)) < 0 ? -1 \
-			: ((array).at[(array).len] = val, (array).len++))
+			: ((array).at[(array).len] = val, (array).len++)))
 
 /**
  * Pop value from the end of the array.
@@ -143,7 +143,7 @@ static inline void array_std_free(void *baton, void *p)
  * @return 0 on success, <0 on failure
  */
 #define array_del(array, i) \
-	(i) < (array).len ? ((array).len -= 1,(array).at[i] = (array).at[(array).len], 0) : -1
+	(int)((i) < (array).len ? ((array).len -= 1,(array).at[i] = (array).at[(array).len], 0) : -1)
 
 /**
  * Return last element of the array.