From c2998abdd1d4c4427222e1783a54f1608a1a28ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Mon, 8 Nov 1999 00:09:26 +0100
Subject: [PATCH] Fixed fatal error in search().

Rev: src/builtin_functions.c:1.202
---
 src/builtin_functions.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index 62e3abc370..ab2b1390c8 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);
-- 
GitLab