if (cb->func == func) {
rec->callbacks =
g_slist_remove(rec->callbacks, cb);
+ g_free(cb);
return rec;
}
}
}
(*data)++;
- if (**data == '-' && i_isspace((*data)[1])) {
+ if (**data == '-' && (*data)[1] == ' ') {
/* -- option means end of options even
if next word starts with - */
(*data)++;
- while (i_isspace(**data)) (*data)++;
+ while (**data == ' ') (*data)++;
break;
}
if (**data == '\0')
option = "-";
- else if (!i_isspace(**data))
+ else if (**data != ' ')
option = cmd_get_param(data);
else {
option = "-";
*optlist[pos] == '!')
option = NULL;
- while (i_isspace(**data)) (*data)++;
+ while (**data == ' ') (*data)++;
continue;
}
}
option = NULL;
- while (i_isspace(**data)) (*data)++;
+ while (**data == ' ') (*data)++;
}
return 0;
parse_command(line, expand_aliases, server, item);
}
+static int eval_recursion_depth=0;
/* SYNTAX: EVAL <command(s)> */
static void cmd_eval(const char *data, SERVER_REC *server, void *item)
{
g_return_if_fail(data != NULL);
+ if (eval_recursion_depth > 100)
+ cmd_return_error(CMDERR_EVAL_MAX_RECURSE);
+
+ eval_recursion_depth++;
eval_special_string(data, "", server, item);
+ eval_recursion_depth--;
}
/* SYNTAX: CD <directory> */