ssl/statem/statem_lib.c:1009: 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:1003:10: Call
1001.   unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
1002.   {
1003.       if (!WPACKET_start_sub_packet_u24(pkt)) {
                 ^
1004.           SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN,
1005.                    ERR_R_INTERNAL_ERROR);

crypto/packet.c:292:1: Parameter `pkt->buf->length`
  290.   }
  291.   
  292. > int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes)
  293.   {
  294.       WPACKET_SUB *sub;

ssl/statem/statem_lib.c:1009:10: Call
1007.       }
1008.   
1009.       if (!ssl_add_cert_chain(s, pkt, cpk))
                 ^
1010.           return 0;
1011.   

ssl/statem/statem_lib.c:905:1: Parameter `pkt->written`
  903.   
  904.   /* Add certificate chain to provided WPACKET */
  905. > static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
  906.   {
  907.       int i, chain_count;

ssl/statem/statem_lib.c:986:14: Call
  984.               return 0;
  985.           }
  986.           if (!ssl_add_cert_to_wpacket(s, pkt, x, 0)) {
                      ^
  987.               /* SSLfatal() already called */
  988.               return 0;

ssl/statem/statem_lib.c:876:1: Parameter `pkt->written`
    874.   
    875.   /* Add a certificate to the WPACKET */
    876. > static int ssl_add_cert_to_wpacket(SSL *s, WPACKET *pkt, X509 *x, int chain)
    877.   {
    878.       int len;

ssl/statem/statem_lib.c:887:10: Call
    885.           return 0;
    886.       }
    887.       if (!WPACKET_sub_allocate_bytes_u24(pkt, len, &outbytes)
                    ^
    888.               || i2d_X509(x, &outbytes) != len) {
    889.           SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET,

crypto/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.   {

crypto/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))

crypto/packet.c:292:1: Parameter `pkt->written`
        290.   }
        291.   
        292. > int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes)
        293.   {
        294.       WPACKET_SUB *sub;

crypto/packet.c:318:10: Call
        316.       sub->packet_len = pkt->written;
        317.   
        318.       if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars))
                        ^
        319.           return 0;
        320.   

crypto/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))

crypto/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.   

crypto/packet.c:43:1: <LHS trace>
41.                           : NULL))
42.   
43. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
44.   {
45.       /* Internal API, so should not fail */

crypto/packet.c:43:1: Parameter `pkt->buf->length`
            41.                           : NULL))
            42.   
            43. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
            44.   {
            45.       /* Internal API, so should not fail */

crypto/packet.c:43:1: <RHS trace>
41.                           : NULL))
42.   
43. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
44.   {
45.       /* Internal API, so should not fail */

crypto/packet.c:43:1: Parameter `len`
            41.                           : NULL))
            42.   
            43. > int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes)
            44.   {
            45.       /* Internal API, so should not fail */

crypto/packet.c:52:30: Binary operation: ([0, +oo] - [pkt->written, pkt->written + 3]):unsigned64 by call to `ssl_add_cert_chain` 
            50.           return 0;
            51.   
            52.       if (pkt->buf != NULL && (pkt->buf->length - pkt->written < len)) {
                                               ^
            53.           size_t newlen;
            54.           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->buf != 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    sub->packet_len = pkt->written;\n    if (!WPACKET_allocate_bytes(pkt, lenbytes, &lenchars))\n        return 0;\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->buf != 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}']