ssl/statem/statem_lib.c:999: error: INTEGER_OVERFLOW_L2
  ([0, +oo] - [`pkt->written`, `pkt->written` + 3]):unsigned64 by call to `ssl_add_cert_chain`.
Showing all 18 steps of the trace


ssl/statem/statem_lib.c:993:10: Call
991.   unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
992.   {
993.       if (!WPACKET_start_sub_packet_u24(pkt)) {
                ^
994.           SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN,
995.                    ERR_R_INTERNAL_ERROR);

ssl/packet.c:272:1: Parameter `pkt->buf->length`
  270.   }
  271.   
  272. > int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes)
  273.   {
  274.       WPACKET_SUB *sub;

ssl/statem/statem_lib.c:999:10: Call
997.       }
998.   
999.       if (!ssl_add_cert_chain(s, pkt, cpk))
                 ^
1000.           return 0;
1001.   

ssl/statem/statem_lib.c:895:1: Parameter `pkt->written`
  893.   
  894.   /* Add certificate chain to provided WPACKET */
  895. > static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
  896.   {
  897.       int i, chain_count;

ssl/statem/statem_lib.c:976:14: Call
  974.               return 0;
  975.           }
  976.           if (!ssl_add_cert_to_wpacket(s, pkt, x, 0)) {
                      ^
  977.               /* SSLfatal() already called */
  978.               return 0;

ssl/statem/statem_lib.c:866:1: Parameter `pkt->written`
    864.   
    865.   /* Add a certificate to the WPACKET */
    866. > static int ssl_add_cert_to_wpacket(SSL *s, WPACKET *pkt, X509 *x, int chain)
    867.   {
    868.       int len;

ssl/statem/statem_lib.c:877:10: Call
    875.           return 0;
    876.       }
    877.       if (!WPACKET_sub_allocate_bytes_u24(pkt, len, &outbytes)
                    ^
    878.               || i2d_X509(x, &outbytes) != len) {
    879.           SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET,

ssl/packet.c:26:1: Parameter `pkt->written`
      24.   }
      25.   
      26. > int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len,
      27.                                    unsigned char **allocbytes, size_t lenbytes)
      28.   {

ssl/packet.c:29:10: Call
      27.                                    unsigned char **allocbytes, size_t lenbytes)
      28.   {
      29.       if (!WPACKET_start_sub_packet_len__(pkt, lenbytes)
                     ^
      30.               || !WPACKET_allocate_bytes(pkt, len, allocbytes)
      31.               || !WPACKET_close(pkt))

ssl/packet.c:272:1: Parameter `pkt->written`
        270.   }
        271.   
        272. > int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes)
        273.   {
        274.       WPACKET_SUB *sub;

ssl/packet.c:296:10: Call
        294.       }
        295.   
        296.       if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars))
                        ^
        297.           return 0;
        298.       /* Convert to an offset in case the underlying BUF_MEM gets realloc'd */

ssl/packet.c:16:1: Parameter `pkt->written`
          14.   #define DEFAULT_BUF_SIZE    256
          15.   
          16. > int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
          17.   {
          18.       if (!WPACKET_reserve_bytes(pkt, len, allocbytes))

ssl/packet.c:18:10: Call
          16.   int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
          17.   {
          18.       if (!WPACKET_reserve_bytes(pkt, len, allocbytes))
                         ^
          19.           return 0;
          20.   

ssl/packet.c:40:1: <LHS trace>
38.                        ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
39.   
40. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
41.   {
42.       /* Internal API, so should not fail */

ssl/packet.c:40:1: Parameter `pkt->buf->length`
            38.                        ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
            39.   
            40. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
            41.   {
            42.       /* Internal API, so should not fail */

ssl/packet.c:40:1: <RHS trace>
38.                        ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
39.   
40. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
41.   {
42.       /* Internal API, so should not fail */

ssl/packet.c:40:1: Parameter `len`
            38.                        ? (p)->staticbuf : (unsigned char *)(p)->buf->data)
            39.   
            40. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
            41.   {
            42.       /* Internal API, so should not fail */

ssl/packet.c:49:36: Binary operation: ([0, +oo] - [pkt->written, pkt->written + 3]):unsigned64 by call to `ssl_add_cert_chain` 
            47.           return 0;
            48.   
            49.       if (pkt->staticbuf == NULL && (pkt->buf->length - pkt->written < len)) {
                                                     ^
            50.           size_t newlen;
            51.           size_t reflen;

int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
{
    if (!ossl_assert(pkt->subs != NULL && len != 0))
        return 0;
    if (pkt->maxsize - pkt->written < len)
        return 0;
    if (pkt->staticbuf == NULL && (pkt->buf->length - pkt->written < len)) {
        size_t newlen;
        size_t reflen;
        reflen = (len > pkt->buf->length) ? len : pkt->buf->length;
        if (reflen > SIZE_MAX / 2) {
            newlen = SIZE_MAX;
        } else {
            newlen = reflen * 2;
            if (newlen < DEFAULT_BUF_SIZE)
                newlen = DEFAULT_BUF_SIZE;
        }
        if (BUF_MEM_grow(pkt->buf, newlen) == 0)
            return 0;
    }
    if (allocbytes != NULL)
        *allocbytes = WPACKET_get_curr(pkt);
    return 1;
}
['unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)\n{\n    if (!WPACKET_start_sub_packet_u24(pkt)) {\n        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN,\n                 ERR_R_INTERNAL_ERROR);\n        return 0;\n    }\n    if (!ssl_add_cert_chain(s, pkt, cpk))\n        return 0;\n    if (!WPACKET_close(pkt)) {\n        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN,\n                 ERR_R_INTERNAL_ERROR);\n        return 0;\n    }\n    return 1;\n}', 'int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes)\n{\n    WPACKET_SUB *sub;\n    unsigned char *lenchars;\n    if (!ossl_assert(pkt->subs != NULL))\n        return 0;\n    if ((sub = OPENSSL_zalloc(sizeof(*sub))) == NULL) {\n        SSLerr(SSL_F_WPACKET_START_SUB_PACKET_LEN__, ERR_R_MALLOC_FAILURE);\n        return 0;\n    }\n    sub->parent = pkt->subs;\n    pkt->subs = sub;\n    sub->pwritten = pkt->written + lenbytes;\n    sub->lenbytes = lenbytes;\n    if (lenbytes == 0) {\n        sub->packet_len = 0;\n        return 1;\n    }\n    if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars))\n        return 0;\n    sub->packet_len = lenchars - GETBUF(pkt);\n    return 1;\n}', 'static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)\n{\n    int i, chain_count;\n    X509 *x;\n    STACK_OF(X509) *extra_certs;\n    STACK_OF(X509) *chain = NULL;\n    X509_STORE *chain_store;\n    if (cpk == NULL || cpk->x509 == NULL)\n        return 1;\n    x = cpk->x509;\n    if (cpk->chain != NULL)\n        extra_certs = cpk->chain;\n    else\n        extra_certs = s->ctx->extra_certs;\n    if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || extra_certs)\n        chain_store = NULL;\n    else if (s->cert->chain_store)\n        chain_store = s->cert->chain_store;\n    else\n        chain_store = s->ctx->cert_store;\n    if (chain_store != NULL) {\n        X509_STORE_CTX *xs_ctx = X509_STORE_CTX_new();\n        if (xs_ctx == NULL) {\n            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN,\n                     ERR_R_MALLOC_FAILURE);\n            return 0;\n        }\n        if (!X509_STORE_CTX_init(xs_ctx, chain_store, x, NULL)) {\n            X509_STORE_CTX_free(xs_ctx);\n            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN,\n                     ERR_R_X509_LIB);\n            return 0;\n        }\n        (void)X509_verify_cert(xs_ctx);\n        ERR_clear_error();\n        chain = X509_STORE_CTX_get0_chain(xs_ctx);\n        i = ssl_security_cert_chain(s, chain, NULL, 0);\n        if (i != 1) {\n#if 0\n            SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, SSL_R_EE_KEY_TOO_SMALL);\n            SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, SSL_R_CA_KEY_TOO_SMALL);\n            SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, SSL_R_CA_MD_TOO_WEAK);\n#endif\n            X509_STORE_CTX_free(xs_ctx);\n            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, i);\n            return 0;\n        }\n        chain_count = sk_X509_num(chain);\n        for (i = 0; i < chain_count; i++) {\n            x = sk_X509_value(chain, i);\n            if (!ssl_add_cert_to_wpacket(s, pkt, x, i)) {\n                X509_STORE_CTX_free(xs_ctx);\n                return 0;\n            }\n        }\n        X509_STORE_CTX_free(xs_ctx);\n    } else {\n        i = ssl_security_cert_chain(s, extra_certs, x, 0);\n        if (i != 1) {\n            SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, i);\n            return 0;\n        }\n        if (!ssl_add_cert_to_wpacket(s, pkt, x, 0)) {\n            return 0;\n        }\n        for (i = 0; i < sk_X509_num(extra_certs); i++) {\n            x = sk_X509_value(extra_certs, i);\n            if (!ssl_add_cert_to_wpacket(s, pkt, x, i + 1)) {\n                return 0;\n            }\n        }\n    }\n    return 1;\n}', 'static int ssl_add_cert_to_wpacket(SSL *s, WPACKET *pkt, X509 *x, int chain)\n{\n    int len;\n    unsigned char *outbytes;\n    len = i2d_X509(x, NULL);\n    if (len < 0) {\n        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET,\n                 ERR_R_BUF_LIB);\n        return 0;\n    }\n    if (!WPACKET_sub_allocate_bytes_u24(pkt, len, &outbytes)\n            || i2d_X509(x, &outbytes) != len) {\n        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET,\n                 ERR_R_INTERNAL_ERROR);\n        return 0;\n    }\n    if (SSL_IS_TLS13(s)\n            && !tls_construct_extensions(s, pkt, SSL_EXT_TLS1_3_CERTIFICATE, x,\n                                         chain)) {\n        return 0;\n    }\n    return 1;\n}', 'int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len,\n                                 unsigned char **allocbytes, size_t lenbytes)\n{\n    if (!WPACKET_start_sub_packet_len__(pkt, lenbytes)\n            || !WPACKET_allocate_bytes(pkt, len, allocbytes)\n            || !WPACKET_close(pkt))\n        return 0;\n    return 1;\n}', 'int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)\n{\n    if (!WPACKET_reserve_bytes(pkt, len, allocbytes))\n        return 0;\n    pkt->written += len;\n    pkt->curr += len;\n    return 1;\n}', 'int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)\n{\n    if (!ossl_assert(pkt->subs != NULL && len != 0))\n        return 0;\n    if (pkt->maxsize - pkt->written < len)\n        return 0;\n    if (pkt->staticbuf == NULL && (pkt->buf->length - pkt->written < len)) {\n        size_t newlen;\n        size_t reflen;\n        reflen = (len > pkt->buf->length) ? len : pkt->buf->length;\n        if (reflen > SIZE_MAX / 2) {\n            newlen = SIZE_MAX;\n        } else {\n            newlen = reflen * 2;\n            if (newlen < DEFAULT_BUF_SIZE)\n                newlen = DEFAULT_BUF_SIZE;\n        }\n        if (BUF_MEM_grow(pkt->buf, newlen) == 0)\n            return 0;\n    }\n    if (allocbytes != NULL)\n        *allocbytes = WPACKET_get_curr(pkt);\n    return 1;\n}']