--- a/src/iterator.c +++ b/src/iterator.c @@ -29,6 +29,8 @@ */ #include +#include +#include #include "config.h" @@ -53,6 +55,10 @@ int iterator_next(iterator *iter, bitmap *bitmap) { + if (iter->skipmod == 0) { + fprintf(stderr, "AUDIT_INVALID_ITERATOR skipmod=0 offset=%d usable_bits=%d\n", iter->off, bitmap->bits); + exit(2); + } iter->off += (arc4_getword(&iter->as) % iter->skipmod) + 1; return iter->off; --- a/src/outguess.c +++ b/src/outguess.c @@ -344,6 +344,10 @@ u_int32_t tmp = 0; for (where = 0; where < bits; where++) { + if (i >= (u_int32_t)bitmap->bits) { + fprintf(stderr, "AUDIT_INVALID_READ offset=%u usable_bits=%d\n", i, bitmap->bits); + exit(2); + } tmp |= (TEST_BIT(bitmap->bitmap, i) ? 1 : 0) << where; i = iterator_next(iter, bitmap); @@ -372,6 +376,9 @@ for (i = 0; i < datalen; i++) tmpbuf[i] = steg_retrbyte(bitmap, 8, iter); + fprintf(stderr, "AUDIT_RAW_HEADER "); + for (i = 0; i < datalen; i++) fprintf(stderr, "%02x", tmpbuf[i]); + fprintf(stderr, "\n"); buf = decode_data (tmpbuf, &datalen, as, flags); if (datalen != 4) { @@ -402,6 +409,8 @@ n = 0; while (datalen > 0) { iterator_adapt(iter, bitmap, datalen); + if (iter->skipmod == 0) + fprintf(stderr, "AUDIT_REMAINING bytes=%u completed=%u\n", datalen, n); buf[n++] = steg_retrbyte(bitmap, 8, iter); datalen --; }