diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index 62e3abc37051f9fc921f8d4d7c61d671a7e1ccc4..ab2b1390c8a588f6fa5f440bd99521d769822876 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: builtin_functions.c,v 1.201 1999/11/04 17:21:42 grubba Exp $");
+RCSID("$Id: builtin_functions.c,v 1.202 1999/11/07 23:09:26 grubba Exp $");
 #include "interpret.h"
 #include "svalue.h"
 #include "pike_macros.h"
@@ -429,6 +429,10 @@ void f_search(INT32 args)
 	SIMPLE_BAD_ARG_ERROR("search", 3, "int");
 
       start=sp[2-args].u.integer;
+      if(start<0) {
+	bad_arg_error("search", sp-args, args, 3, "int(0..)", sp+2-args,
+		   "Start must be greater or equal to zero.\n");
+      }
     }
     start=array_search(sp[-args].u.array,sp+1-args,start);
     pop_n_elems(args);
@@ -436,10 +440,11 @@ void f_search(INT32 args)
     break;
 
   case T_MAPPING:
-    if(args > 2)
+    if(args > 2) {
       mapping_search_no_free(sp,sp[-args].u.mapping,sp+1-args,sp+2-args);
-    else
+    } else {
       mapping_search_no_free(sp,sp[-args].u.mapping,sp+1-args,0);
+    }
     free_svalue(sp-args);
     sp[-args]=*sp;
     dmalloc_touch_svalue(sp);