diff --git a/src/array.c b/src/array.c
index be6a437049f4c1207146e11bed66dd5c4e3a1157..04f53fcf7e8f248bafacf2f2f8d7ef7b7214927a 100644
--- a/src/array.c
+++ b/src/array.c
@@ -646,7 +646,8 @@ PMOD_EXPORT struct array *array_remove(struct array *v,INT32 index)
   }
 }
 
-static ptrdiff_t fast_array_search( struct array *v, struct svalue *s, ptrdiff_t start )
+static ptrdiff_t fast_array_search( struct array *v, const struct svalue *s,
+                                    ptrdiff_t start )
 {
   ptrdiff_t e;
   struct svalue *ip = ITEM(v);
@@ -663,7 +664,7 @@ static ptrdiff_t fast_array_search( struct array *v, struct svalue *s, ptrdiff_t
  * @param start the index to start search at
  * @return the index if found, -1 otherwise
  */
-PMOD_EXPORT ptrdiff_t array_search(struct array *v, struct svalue *s,
+PMOD_EXPORT ptrdiff_t array_search(struct array *v, const struct svalue *s,
 				   ptrdiff_t start)
 {
 #ifdef PIKE_DEBUG
@@ -673,7 +674,7 @@ PMOD_EXPORT ptrdiff_t array_search(struct array *v, struct svalue *s,
 #ifdef PIKE_DEBUG
   if(d_flag > 1)  array_check_type_field(v);
 #endif
-  check_destructed(s);
+  safe_check_destructed(s);
 
   /* Why search for something that is not there?
    * however, we must explicitly check for searches
diff --git a/src/array.h b/src/array.h
index 6e820bc3d229c39bb7920ad2ecb817fe14049e81..94fd8e153867e56829bdd4320b4c15cf14d17da6 100644
--- a/src/array.h
+++ b/src/array.h
@@ -125,7 +125,7 @@ void o_append_array(INT32 args);
 PMOD_EXPORT struct array *resize_array(struct array *a, INT32 size);
 PMOD_EXPORT struct array *array_shrink(struct array *v, ptrdiff_t size);
 PMOD_EXPORT struct array *array_remove(struct array *v,INT32 ind);
-PMOD_EXPORT ptrdiff_t array_search(struct array *v, struct svalue *s,
+PMOD_EXPORT ptrdiff_t array_search(struct array *v, const struct svalue *s,
 				   ptrdiff_t start);
 PMOD_EXPORT struct array *slice_array(struct array *v, ptrdiff_t start,
 				      ptrdiff_t end);