crypto/blake2/blake2s.c:94: error: BUFFER_OVERRUN_L2
  Offset: [0, 28] Size: 1 by call to `blake2s_init_param`.
Showing all 7 steps of the trace


crypto/blake2/blake2s.c:80:1: Array declaration
78.   
79.   /* Initialize the hashing context.  Always returns 1. */
80. > int BLAKE2s_Init(BLAKE2S_CTX *c)
81.   {
82.       BLAKE2S_PARAM P[1];

crypto/blake2/blake2s.c:94:5: Call
92.       memset(P->salt,     0, sizeof(P->salt));
93.       memset(P->personal, 0, sizeof(P->personal));
94.       blake2s_init_param(c, P);
          ^
95.       return 1;
96.   }

crypto/blake2/blake2s.c:74:10: Assignment
  72.       blake2s_init0(S);
  73.       /* IV XOR ParamBlock */
  74.       for (i = 0; i < 8; ++i) {
                 ^
  75.           S->h[i] ^= load32(&p[i*4]);
  76.       }

crypto/blake2/blake2s.c:75:20: Call
  73.       /* IV XOR ParamBlock */
  74.       for (i = 0; i < 8; ++i) {
  75.           S->h[i] ^= load32(&p[i*4]);
                           ^
  76.       }
  77.   }

crypto/blake2/blake2_impl.h:21:1: <Length trace>
19.   #include "e_os.h"
20.   
21. > static ossl_inline uint32_t load32(const uint8_t *src)
22.   {
23.       const union {

crypto/blake2/blake2_impl.h:21:1: Parameter `*src`
    19.   #include "e_os.h"
    20.   
    21. > static ossl_inline uint32_t load32(const uint8_t *src)
    22.   {
    23.       const union {

crypto/blake2/blake2_impl.h:33:33: Array access: Offset: [0, 28] Size: 1 by call to `blake2s_init_param` 
    31.           return w;
    32.       } else {
    33.           uint32_t w = ((uint32_t)src[0])
                                          ^
    34.                      | ((uint32_t)src[1] <<  8)
    35.                      | ((uint32_t)src[2] << 16)

static ossl_inline uint32_t load32(const uint8_t *src)
{
    const union {
        long one;
        char little;
    } is_endian = { 1 };
    if (is_endian.little) {
        uint32_t w;
        memcpy(&w, src, sizeof(w));
        return w;
    } else {
        uint32_t w = ((uint32_t)src[0])
                   | ((uint32_t)src[1] <<  8)
                   | ((uint32_t)src[2] << 16)
                   | ((uint32_t)src[3] << 24);
        return w;
    }
}
['int BLAKE2s_Init(BLAKE2S_CTX *c)\n{\n    BLAKE2S_PARAM P[1];\n    P->digest_length = BLAKE2S_DIGEST_LENGTH;\n    P->key_length    = 0;\n    P->fanout        = 1;\n    P->depth         = 1;\n    store32(P->leaf_length, 0);\n    store48(P->node_offset, 0);\n    P->node_depth    = 0;\n    P->inner_length  = 0;\n    memset(P->salt,     0, sizeof(P->salt));\n    memset(P->personal, 0, sizeof(P->personal));\n    blake2s_init_param(c, P);\n    return 1;\n}', 'static void blake2s_init_param(BLAKE2S_CTX *S, const BLAKE2S_PARAM *P)\n{\n    const uint8_t *p = (const uint8_t *)(P);\n    size_t i;\n    assert(sizeof(BLAKE2S_PARAM) == 32);\n    blake2s_init0(S);\n    for (i = 0; i < 8; ++i) {\n        S->h[i] ^= load32(&p[i*4]);\n    }\n}', 'static ossl_inline uint32_t load32(const uint8_t *src)\n{\n    const union {\n        long one;\n        char little;\n    } is_endian = { 1 };\n    if (is_endian.little) {\n        uint32_t w;\n        memcpy(&w, src, sizeof(w));\n        return w;\n    } else {\n        uint32_t w = ((uint32_t)src[0])\n                   | ((uint32_t)src[1] <<  8)\n                   | ((uint32_t)src[2] << 16)\n                   | ((uint32_t)src[3] << 24);\n        return w;\n    }\n}']