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