diff --git a/src/resource_handle.c b/src/resource_handle.c
index 0685d61798716f5968f5d897b937b3d0c9a3d17e..a34144657c873646a00f185af843e123c865bd06 100644
--- a/src/resource_handle.c
+++ b/src/resource_handle.c
@@ -684,18 +684,21 @@ int reshGetStatus ( cdiResH resH, const resOps * ops )
   nspT = namespaceResHDecode ( resH );
 
   xassert ( nspT.nsp == nsp &&
-            nspT.idx >= 0 &&
-            nspT.idx < resHList[nsp].size );
-
-  listElem_t *listElem = resHList[nsp].resources + nspT.idx;
-
-  const resOps *elemOps = listElem->res.v.ops;
-
+            nspT.idx >= 0 );
+  int status;
+  if (nspT.idx < resHList[nsp].size) {
+    listElem_t *listElem = resHList[nsp].resources + nspT.idx;
+
+    const resOps *elemOps = listElem->res.v.ops;
+    xassert(listElem && (!(listElem->status & RESH_IN_USE_BIT) || elemOps == ops));
+    status = listElem->status;
+  } else {
+    status = RESH_UNUSED;
+  }
   LIST_UNLOCK();
 
-  xassert(listElem && (!(listElem->status & RESH_IN_USE_BIT) || elemOps == ops));
 
-  return listElem->status;
+  return status;
 }
 
 /**************************************************************/