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()))