gint hdr_cnt = 0;
bool use_idx = false, is_sign = ctx->is_sign;
+ /*
+ * TODO:
+ * Temporary hack to prevent linked list being misused until refactored
+ */
+ const guint max_list_iters = 1000;
+
if (count < 0) {
use_idx = true;
count = -(count); /* use i= in header content as it is arc stuff */
hdr_cnt++;
- if (cur == rh) {
+ if (cur == rh || hdr_cnt >= max_list_iters) {
/* Cycle */
break;
}
}
}
else {
+ /*
+ * This branch is used for ARC headers, and it orders them based on
+ * i=<number> string and not their real order in the list of headers
+ */
gchar idx_buf[16];
- gint id_len;
+ gint id_len, i;
id_len = rspamd_snprintf (idx_buf, sizeof (idx_buf), "i=%d;",
count);
- for (cur = rh->prev; ; cur = cur->prev) {
+ for (cur = rh->prev, i = 0; i < max_list_iters; cur = cur->prev, i ++) {
if (cur->decoded &&
rspamd_substring_search (cur->decoded, strlen (cur->decoded),
idx_buf, id_len) != -1) {