const char *err;
int i;
int en;
- size_t n;
+ size_t n, chsz;
dstr d = DSTR_INIT;
octet *tag, *ct;
buf b;
assert(GC_CLASS(c)->blksz <= sizeof(bb));
dstr_ensure(&d, sizeof(bb) + GM_CLASS(m)->hashsz);
seq = 0;
+ chsz = MASK16 - GM_CLASS(m)->hashsz;
for (;;) {
h = GM_INIT(m);
GH_HASHU32(h, seq);
GC_ENCRYPT(cx, 0, bb, GC_CLASS(c)->blksz);
GC_SETIV(c, bb);
}
- n = fread(bb, 1, sizeof(bb), fp);
+ n = fread(bb, 1, chsz, fp);
if (!n) break;
buf_init(&b, d.buf, d.sz);
tag = buf_get(&b, GM_CLASS(m)->hashsz);
static size_t binreadembed(msgcanon *m, void *bp)
{ return (chunk_read(m->e, bp)); }
static size_t binreaddetach(msgcanon *m, void *bp)
- { return (fread(bp, 1, MSGBUFSZ, m->fp)); }
+ { return (fread(bp, 1, MSGBUFSZ - 1, m->fp)); }
static void binwriteembed(msgcanon *m, const void *bp, size_t n)
{ chunk_write(m->e, bp, n); }