crypto/siphash/siphash.c:169: error: BUFFER_OVERRUN_L3
  Offset added: [1, 7] Size: [0, +oo].
Showing all 6 steps of the trace


crypto/siphash/siphash.c:120:1: <Offset trace>
118.   }
119.   
120. > void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen)
121.   {
122.       uint64_t m;

crypto/siphash/siphash.c:120:1: Parameter `inlen`
118.   }
119.   
120. > void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen)
121.   {
122.       uint64_t m;

crypto/siphash/siphash.c:156:5: Assignment
154.           v0 ^= m;
155.       }
156.       left = inlen & (SIPHASH_BLOCK_SIZE-1); /* gets put into leavings */
           ^
157.       end = in + inlen - left;
158.   

crypto/siphash/siphash.c:120:1: <Length trace>
118.   }
119.   
120. > void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen)
121.   {
122.       uint64_t m;

crypto/siphash/siphash.c:120:1: Parameter `ctx->leavings[*]`
118.   }
119.   
120. > void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen)
121.   {
122.       uint64_t m;

crypto/siphash/siphash.c:169:9: Array access: Offset added: [1, 7] Size: [0, +oo]
167.       /* save leavings and other ctx */
168.       if (left)
169.           memcpy(ctx->leavings, end, left);
               ^
170.       ctx->len = left;
171.   

void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen)
{
    uint64_t m;
    const uint8_t *end;
    int left;
    int i;
    uint64_t v0 = ctx->v0;
    uint64_t v1 = ctx->v1;
    uint64_t v2 = ctx->v2;
    uint64_t v3 = ctx->v3;
    ctx->total_inlen += inlen;
    if (ctx->len) {
        size_t available = SIPHASH_BLOCK_SIZE - ctx->len;
        if (inlen < available) {
            memcpy(&ctx->leavings[ctx->len], in, inlen);
            ctx->len += inlen;
            return;
        }
        memcpy(&ctx->leavings[ctx->len], in, available);
        inlen -= available;
        in += available;
        m = U8TO64_LE(ctx->leavings);
        v3 ^= m;
        for (i = 0; i < ctx->crounds; ++i)
            SIPROUND;
        v0 ^= m;
    }
    left = inlen & (SIPHASH_BLOCK_SIZE-1);
    end = in + inlen - left;
    for (; in != end; in += 8) {
        m = U8TO64_LE(in);
        v3 ^= m;
        for (i = 0; i < ctx->crounds; ++i)
            SIPROUND;
        v0 ^= m;
    }
    if (left)
        memcpy(ctx->leavings, end, left);
    ctx->len = left;
    ctx->v0 = v0;
    ctx->v1 = v1;
    ctx->v2 = v2;
    ctx->v3 = v3;
}
['void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen)\n{\n    uint64_t m;\n    const uint8_t *end;\n    int left;\n    int i;\n    uint64_t v0 = ctx->v0;\n    uint64_t v1 = ctx->v1;\n    uint64_t v2 = ctx->v2;\n    uint64_t v3 = ctx->v3;\n    ctx->total_inlen += inlen;\n    if (ctx->len) {\n        size_t available = SIPHASH_BLOCK_SIZE - ctx->len;\n        if (inlen < available) {\n            memcpy(&ctx->leavings[ctx->len], in, inlen);\n            ctx->len += inlen;\n            return;\n        }\n        memcpy(&ctx->leavings[ctx->len], in, available);\n        inlen -= available;\n        in += available;\n        m = U8TO64_LE(ctx->leavings);\n        v3 ^= m;\n        for (i = 0; i < ctx->crounds; ++i)\n            SIPROUND;\n        v0 ^= m;\n    }\n    left = inlen & (SIPHASH_BLOCK_SIZE-1);\n    end = in + inlen - left;\n    for (; in != end; in += 8) {\n        m = U8TO64_LE(in);\n        v3 ^= m;\n        for (i = 0; i < ctx->crounds; ++i)\n            SIPROUND;\n        v0 ^= m;\n    }\n    if (left)\n        memcpy(ctx->leavings, end, left);\n    ctx->len = left;\n    ctx->v0 = v0;\n    ctx->v1 = v1;\n    ctx->v2 = v2;\n    ctx->v3 = v3;\n}']