task->cfg->lua_state, task->classifier,
st, &stat_error)) {
+ if (stat_error == NULL) {
+ g_set_error (&stat_error,
+ g_quark_from_static_string ("stat"), 500,
+ "Unknown statistics error");
+ }
+
+ msg_err_task ("learn error: %e", stat_error);
+
if (!(task->flags & RSPAMD_TASK_FLAG_LEARN_AUTO)) {
task->err = stat_error;
}
g_error_free (stat_error);
}
- msg_err_task ("learn error: %e", stat_error);
task->processed_stages |= RSPAMD_TASK_STAGE_DONE;
}
}
GError **err)
{
rspamd_learn_t learn_res = RSPAMD_LEARN_OK;
- struct rspamd_classifier *cl;
+ struct rspamd_classifier *cl, *sel = NULL;
gpointer rt;
guint i;
continue;
}
- if (cl->cache && cl->cachecf) {
- rt = cl->cache->runtime (task, cl->cachecf, FALSE);
+ sel = cl;
+
+ if (sel->cache && sel->cachecf) {
+ rt = cl->cache->runtime (task, sel->cachecf, FALSE);
learn_res = cl->cache->check (task, spam, rt);
}
}
}
+ if (sel == NULL) {
+ if (classifier) {
+ g_set_error (err, rspamd_stat_quark (), 404, "cannot find classifier "
+ "with name %s", classifier);
+ }
+ else {
+ g_set_error (err, rspamd_stat_quark (), 404, "no classifiers defined");
+ }
+
+ return FALSE;
+ }
+
return TRUE;
}
gboolean spam,
GError **err)
{
- struct rspamd_classifier *cl;
+ struct rspamd_classifier *cl, *sel = NULL;
guint i;
gboolean learned = FALSE, too_small = FALSE, too_large = FALSE,
conditionally_skipped = FALSE;
continue;
}
+ sel = cl;
+
/* Now check max and min tokens */
if (cl->cfg->min_tokens > 0 && task->tokens->len < cl->cfg->min_tokens) {
msg_info_task (
}
}
+ if (sel == NULL) {
+ if (classifier) {
+ g_set_error (err, rspamd_stat_quark (), 404, "cannot find classifier "
+ "with name %s", classifier);
+ }
+ else {
+ g_set_error (err, rspamd_stat_quark (), 404, "no classifiers defined");
+ }
+
+ return FALSE;
+ }
+
if (!learned && err && *err == NULL) {
if (too_large) {
g_set_error (err, rspamd_stat_quark (), 400,
gboolean spam,
GError **err)
{
- struct rspamd_classifier *cl;
+ struct rspamd_classifier *cl, *sel = NULL;
struct rspamd_statfile *st;
gpointer bk_run;
guint i, j;
continue;
}
+ sel = cl;
+
for (j = 0; j < cl->statfiles_ids->len; j ++) {
id = g_array_index (cl->statfiles_ids, gint, j);
st = g_ptr_array_index (st_ctx->statfiles, id);
}
}
+ if (sel == NULL) {
+ if (classifier) {
+ g_set_error (err, rspamd_stat_quark (), 404, "cannot find classifier "
+ "with name %s", classifier);
+ }
+ else {
+ g_set_error (err, rspamd_stat_quark (), 404, "no classifiers defined");
+ }
+
+ return FALSE;
+ }
+
return res;
}