Short: Evermore crashes on not-found includes
Date: Sat, 13 May 2000 14:17:05 +0200
From: Lothar Ludwig <lludwig@informatik.uni-tuebingen.de>
Type: Bug
State: Done - fixed in 3.2.8-dev.213
in Evermore schmiert mir der Driver ab, wenn ich
mit #include "../xxx.h" ein file include, das nicht existiert.
Plattform: Solaris2.7, Compat driver, die Settings hast du ja da.
< > -includes zeigen dieses Problem nicht.
Hier die Ausschnitte aus dem Master:
set_driver_hook(H_INCLUDE_DIRS, #'get_include_dir );
private string *include_dirs = ({ "sys/", "include/", "~/" });
string get_include_dir(string included, string includer) {
string path;
for (int i = sizeof(include_dirs); i; i--) {
path = include_dirs[<i] + included;
if (path[0] == '~') {
// included by a file with an owner?
if ((includer[0..7] == "players/") || (includer[0..7] == "domains/")) {
path[0..0] = implode(explode(includer, "/")[0..1], "/");
}
else {
// included by a mudlib file
continue;
}
}
// is this file existent?
if (file_size("/" + path) >= 0) {
// we return the file
return path;
}
}
return null;
}
Der Fehler tritt zum Beispiel auf, wenn ich unter
/players/fangorn/work/bla.c ein #include "../blubber.h" mache, wenn das
blubber.h dort nicht existiert. Dann dumped der driver.
-- Analysis --
Create a file /players/fangorn/work/bla.c containing just the include
statement, and let it load e.g. from the town square. On BeOS you'll get the
error message 'Cannot #include '../blubber.h' line 1 near <garbage>'.
The lex_error_context() was not guarded against end-of-buffer or -file
conditions here, which might have causes the crash on Solaris.
Other than that, the problem was not reproducible.