process_string: typpruefung gefixt

Fallunterscheidung nach Typen verbessert, es wurde zu spaet
auf string|closure geprueft.

Change-Id: Ibc4588c4cef83ea2ac1852b0d278c8701e7214ff
diff --git a/secure/simul_efun/simul_efun.c b/secure/simul_efun/simul_efun.c
index acb73db..d4a6428 100644
--- a/secure/simul_efun/simul_efun.c
+++ b/secure/simul_efun/simul_efun.c
@@ -839,25 +839,22 @@
     }
   }
   // Kein Aufruf von Funktionen in Objekten anderer Magier erlaubt.
-  foreach(string s: explode(str, "@@"))
+  if (stringp(str))
   {
-    if (sizeof(s) && _illegal_ps_call(s))
+    foreach(string s: explode(str, "@@"))
     {
-      set_this_object(previous_object());
-      raise_error("Illegale Benutzung von process_string(). Aufruf in "
-          "in fremder UID nicht erlaubt.\n");
+      if (sizeof(s) && _illegal_ps_call(s))
+      {
+        set_this_object(previous_object());
+        raise_error("Illegale Benutzung von process_string(). Aufruf in "
+            "in fremder UID nicht erlaubt.\n");
+      }
     }
   }
-
-  if ( closurep(str) ) {
+  else if ( closurep(str) ) {
       set_this_object( previous_object() );
       return funcall(str);
   }
-  else if (str==0)
-      return(str);
-  else if ( !stringp(str) ) {
-      return to_string(str);
-  }
 
   if ( !(flag = process_flag > time() - 60))                     
       process_flag=time();
diff --git a/secure/simul_efun/spare/simul_efun.c b/secure/simul_efun/spare/simul_efun.c
index acb73db..d4a6428 100644
--- a/secure/simul_efun/spare/simul_efun.c
+++ b/secure/simul_efun/spare/simul_efun.c
@@ -839,25 +839,22 @@
     }
   }
   // Kein Aufruf von Funktionen in Objekten anderer Magier erlaubt.
-  foreach(string s: explode(str, "@@"))
+  if (stringp(str))
   {
-    if (sizeof(s) && _illegal_ps_call(s))
+    foreach(string s: explode(str, "@@"))
     {
-      set_this_object(previous_object());
-      raise_error("Illegale Benutzung von process_string(). Aufruf in "
-          "in fremder UID nicht erlaubt.\n");
+      if (sizeof(s) && _illegal_ps_call(s))
+      {
+        set_this_object(previous_object());
+        raise_error("Illegale Benutzung von process_string(). Aufruf in "
+            "in fremder UID nicht erlaubt.\n");
+      }
     }
   }
-
-  if ( closurep(str) ) {
+  else if ( closurep(str) ) {
       set_this_object( previous_object() );
       return funcall(str);
   }
-  else if (str==0)
-      return(str);
-  else if ( !stringp(str) ) {
-      return to_string(str);
-  }
 
   if ( !(flag = process_flag > time() - 60))                     
       process_flag=time();