aboutsummaryrefslogtreecommitdiffstats
path: root/execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'execute.c')
-rw-r--r--execute.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/execute.c b/execute.c
index 9a4cfcd..e361663 100644
--- a/execute.c
+++ b/execute.c
@@ -2121,18 +2121,19 @@ run_interpreter(char raise, enum error e,
if (ret == OUTCOME_ABORTED && handler_verb_name) {
db_verb_handle h;
+ enum outcome hret;
Var args, handled, traceback;
int i;
args = handler_verb_args;
h = db_find_callable_verb(SYSTEM_OBJECT, handler_verb_name);
if (do_db_tracebacks && h.ptr) {
- ret = do_server_verb_task(SYSTEM_OBJECT, handler_verb_name,
- var_ref(handler_verb_args), h,
- activ_stack[0].player, "", &handled,
- 0/*no-traceback*/);
- if ((ret == OUTCOME_DONE && is_true(handled))
- || ret == OUTCOME_BLOCKED) {
+ hret = do_server_verb_task(SYSTEM_OBJECT, handler_verb_name,
+ var_ref(handler_verb_args), h,
+ activ_stack[0].player, "", &handled,
+ 0/*no-traceback*/);
+ if ((hret == OUTCOME_DONE && is_true(handled))
+ || hret == OUTCOME_BLOCKED) {
/* Assume the in-DB code handled it */
free_var(args);
return OUTCOME_ABORTED; /* original ret value */
@@ -2874,6 +2875,19 @@ char rcsid_execute[] = "$Id$";
/*
* $Log$
+ * Revision 1.18 2006/09/26 02:03:59 pschwan
+ * b=1552816
+ * r=ben
+ *
+ * execute.c:run_interpreter() sometimes clobbers the real return code with that
+ * of the traceback handler. If |result| is non-NULL, this can lead to it being
+ * used later on without ever having been initialized, causing "Unknown Var type"
+ * errors.
+ *
+ * In practice -- because |result| is almost always NULL or (in one case)
+ * initialized before calling run_interpreter() -- this situation wasn't
+ * encountered execept in Emergency Mode.
+ *
* Revision 1.17 2006/09/07 00:55:02 bjj
* Add new MEMO_STRLEN option which uses the refcounting mechanism to
* store strlen with strings. This is basically free, since most string