Date: Mon, 20 Dec 1999 15:39:49 +0100
From: Andreas Weller <aw6@informatik.uni-ulm.de>
Short: Functions with more than 255 Arguments not detected
Type: Bug
State: Done - fixed in 3.2.8-dev.176
Hallo Lars,
Der Aufruf von Funktionen mit mehr als 255 Argumenten ergibt
unvorhersehbare bis katastrophale Ergebnisse:
z.B s="%s"*300;
a=map(allocate(300),lambda(0,"text"));
apply(#'sprintf, s, a);
oder auch einfach
printf("%s"*300, "0", "1", ... "300"); )
Das klappt auch mit Lfuns:
void foo(varargs mixed a) {}
foo(1,2,3, ... 300);
Ursache ist wohl, dass die Anzahl der Argumente anz immer in
einem Byte codiert wird, und die Funktion dann arbeitet, als
ob es (anz mod 256) Argumente waeren. Auf den Stack wurden aber
wirklich alle Argumente gepusht, die Funktion arbeitet also mit
falschen Argumenten. Wenn dies zu keinem Laufzeitfehler fuehrt
ist nach der Ausfuehrung der Stack nicht ordentlich aufgeraeumt:
1999.12.20 15:10:10 Bad stack at F_RETURN, 256 values too high
1999.12.20 15:10:10 Current object was test_master#0
Gruesse, Andreas (zwirch)