Indizierungen ueber Arraygrenzen hinaus entfernt.
Change-Id: I72ed8701e8e8b7e2b81111a4c789efd8691d27fd
diff --git a/std/shells/magier/fileview.c b/std/shells/magier/fileview.c
index 6b41b71..0c08dee 100644
--- a/std/shells/magier/fileview.c
+++ b/std/shells/magier/fileview.c
@@ -675,11 +675,12 @@
rexpr=args[0];
if (catch(regexp(({""}),rexpr))||!regexp(({""}),rexpr))
return printf("grep: Ungueltiger Suchausdruck: %s\n",rexpr) ,1;
- args=args[1..];
+ args=(sizeof(args)>1 ? args[1..] : ({}) );
if (flags&GREP_M)
{
mask=args[<1];
- args=args[0..<2];
+ if (sizeof(args) > 2)
+ args = (sizeof(args) > 1 ? args[0..<2] : ({}) );
}
if (!sizeof(args))
return USAGE("grep [-" GREP_OPTS
diff --git a/std/shells/magier/parsing.c b/std/shells/magier/parsing.c
index bbf2054..37eaebd 100644
--- a/std/shells/magier/parsing.c
+++ b/std/shells/magier/parsing.c
@@ -144,7 +144,7 @@
if(!sizeof(data)) return ({});
mixed *files=({});
- while(sizeof(data))
+ while(1)
{
mixed *tmp=({});
string base=data[BASENAME];
@@ -164,7 +164,10 @@
if (sizeof(files)+sizeof(tmp)>MAX_ARRAY_SIZE)
raise_error("Zu viele Files (>3000)!! Abgebrochen!\n");
files+=tmp;
- data=data[3..];
+ if (sizeof(data) > 3)
+ data=data[3..];
+ else
+ break;
}
if(sizeof(files)>300&&!IS_ARCH(this_object()))