]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix indexes in array access, interleave loop
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 25 Dec 2016 12:42:32 +0000 (12:42 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 25 Dec 2016 12:43:06 +0000 (12:43 +0000)
src/libutil/shingles.c

index bf815c7fcee47dc062eb93c136a65fab8195ae04..5676c9c55a1a22fb168cbb4744160fce607cce5f 100644 (file)
@@ -232,17 +232,20 @@ rspamd_shingles_from_image (guchar *dct,
        }
 
        memset (res, 0, sizeof (res));
+#define INNER_CYCLE_SHINGLES(s, e) for (j = (s); j < (e); j ++) { \
+       d = dct[beg]; \
+       memcpy (&seed, keys[j], sizeof (seed)); \
+       val = rspamd_cryptobox_fast_hash_specific (ht, \
+                                       &d, sizeof (d), \
+                                       seed); \
+       hashes[j][beg] = val; \
+}
+       for (i = 0; i < RSPAMD_DCT_LEN / NBBY; i ++) {
+               INNER_CYCLE_SHINGLES (0, RSPAMD_SHINGLE_SIZE / 4);
+               INNER_CYCLE_SHINGLES (RSPAMD_SHINGLE_SIZE / 4 + 1, RSPAMD_SHINGLE_SIZE / 2);
+               INNER_CYCLE_SHINGLES (RSPAMD_SHINGLE_SIZE / 2 + 1, 3 * RSPAMD_SHINGLE_SIZE / 4);
+               INNER_CYCLE_SHINGLES (3 * RSPAMD_SHINGLE_SIZE / 4 + 1, RSPAMD_SHINGLE_SIZE);
 
-       for (i = 0; i <= RSPAMD_DCT_LEN / NBBY; i ++) {
-               for (j = 0; j < RSPAMD_SHINGLE_SIZE; j ++) {
-                       d = dct[beg];
-                       /* Insert the last element to the pipe */
-                       memcpy (&seed, keys[j], sizeof (seed));
-                       val = rspamd_cryptobox_fast_hash_specific (ht,
-                                                       &d, sizeof (d),
-                                                       seed);
-                       hashes[j][beg] = val;
-               }
                beg++;
        }