apps/ocsp.c:1641: error: INTEGER_OVERFLOW_L2
  ([0, +oo] - 1):unsigned32 by call to `SSL_CTX_free`.
Showing all 12 steps of the trace


apps/ocsp.c:1641:5: Call
1639.    end:
1640.       BIO_free_all(cbio);
1641.       SSL_CTX_free(ctx);
            ^
1642.       return resp;
1643.   }

ssl/ssl_lib.c:3163:1: Parameter `a->sessions->num_nodes`
  3161.   }
  3162.   
  3163. > void SSL_CTX_free(SSL_CTX *a)
  3164.   {
  3165.       int i;

ssl/ssl_lib.c:3189:9: Call
  3187.        */
  3188.       if (a->sessions != NULL)
  3189.           SSL_CTX_flush_sessions(a, 0);
                  ^
  3190.   
  3191.       CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);

ssl/ssl_sess.c:1106:1: Parameter `s->sessions->num_nodes`
    1104.   IMPLEMENT_LHASH_DOALL_ARG(SSL_SESSION, TIMEOUT_PARAM);
    1105.   
    1106. > void SSL_CTX_flush_sessions(SSL_CTX *s, long t)
    1107.   {
    1108.       unsigned long i;

ssl/ssl_sess.c:1119:5: Call
    1117.       i = lh_SSL_SESSION_get_down_load(s->sessions);
    1118.       lh_SSL_SESSION_set_down_load(s->sessions, 0);
    1119.       lh_SSL_SESSION_doall_TIMEOUT_PARAM(tp.cache, timeout_cb, &tp);
                ^
    1120.       lh_SSL_SESSION_set_down_load(s->sessions, i);
    1121.       CRYPTO_THREAD_unlock(s->lock);

ssl/ssl_sess.c:1104:1: Parameter `lh->num_nodes`
      1102.   }
      1103.   
      1104. > IMPLEMENT_LHASH_DOALL_ARG(SSL_SESSION, TIMEOUT_PARAM);
      1105.   
      1106.   void SSL_CTX_flush_sessions(SSL_CTX *s, long t)

ssl/ssl_sess.c:1104:1: Call
      1102.   }
      1103.   
      1104. > IMPLEMENT_LHASH_DOALL_ARG(SSL_SESSION, TIMEOUT_PARAM);
      1105.   
      1106.   void SSL_CTX_flush_sessions(SSL_CTX *s, long t)

crypto/lhash/lhash.c:218:1: Parameter `lh->num_nodes`
        216.   }
        217.   
        218. > void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg)
        219.   {
        220.       doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg);

crypto/lhash/lhash.c:220:5: Call
        218.   void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg)
        219.   {
        220.       doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg);
                   ^
        221.   }
        222.   

crypto/lhash/lhash.c:186:1: <LHS trace>
184.   }
185.   
186. > static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg,
187.                             OPENSSL_LH_DOALL_FUNC func,
188.                             OPENSSL_LH_DOALL_FUNCARG func_arg, void *arg)

crypto/lhash/lhash.c:186:1: Parameter `lh->num_nodes`
          184.   }
          185.   
          186. > static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg,
          187.                             OPENSSL_LH_DOALL_FUNC func,
          188.                             OPENSSL_LH_DOALL_FUNCARG func_arg, void *arg)

crypto/lhash/lhash.c:200:10: Binary operation: ([0, +oo] - 1):unsigned32 by call to `SSL_CTX_free` 
          198.        * memory leaks otherwise
          199.        */
          200.       for (i = lh->num_nodes - 1; i >= 0; i--) {
                          ^
          201.           a = lh->b[i];
          202.           while (a != NULL) {

static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg,
                          OPENSSL_LH_DOALL_FUNC func,
                          OPENSSL_LH_DOALL_FUNCARG func_arg, void *arg)
{
    int i;
    OPENSSL_LH_NODE *a, *n;
    if (lh == NULL)
        return;
    for (i = lh->num_nodes - 1; i >= 0; i--) {
        a = lh->b[i];
        while (a != NULL) {
            n = a->next;
            if (use_arg)
                func_arg(a->data, arg);
            else
                func(a->data);
            a = n;
        }
    }
}
['OCSP_RESPONSE *process_responder(OCSP_REQUEST *req,\n                                 const char *host, const char *path,\n                                 const char *port, int use_ssl,\n                                 STACK_OF(CONF_VALUE) *headers,\n                                 int req_timeout)\n{\n    BIO *cbio = NULL;\n    SSL_CTX *ctx = NULL;\n    OCSP_RESPONSE *resp = NULL;\n    cbio = BIO_new_connect(host);\n    if (cbio == NULL) {\n        BIO_printf(bio_err, "Error creating connect BIO\\n");\n        goto end;\n    }\n    if (port != NULL)\n        BIO_set_conn_port(cbio, port);\n    if (use_ssl == 1) {\n        BIO *sbio;\n        ctx = SSL_CTX_new(TLS_client_method());\n        if (ctx == NULL) {\n            BIO_printf(bio_err, "Error creating SSL context.\\n");\n            goto end;\n        }\n        SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);\n        sbio = BIO_new_ssl(ctx, 1);\n        cbio = BIO_push(sbio, cbio);\n    }\n    resp = query_responder(cbio, host, path, headers, req, req_timeout);\n    if (resp == NULL)\n        BIO_printf(bio_err, "Error querying OCSP responder\\n");\n end:\n    BIO_free_all(cbio);\n    SSL_CTX_free(ctx);\n    return resp;\n}', 'void SSL_CTX_free(SSL_CTX *a)\n{\n    int i;\n    if (a == NULL)\n        return;\n    CRYPTO_DOWN_REF(&a->references, &i, a->lock);\n    REF_PRINT_COUNT("SSL_CTX", a);\n    if (i > 0)\n        return;\n    REF_ASSERT_ISNT(i < 0);\n    X509_VERIFY_PARAM_free(a->param);\n    dane_ctx_final(&a->dane);\n    if (a->sessions != NULL)\n        SSL_CTX_flush_sessions(a, 0);\n    CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);\n    lh_SSL_SESSION_free(a->sessions);\n    X509_STORE_free(a->cert_store);\n#ifndef OPENSSL_NO_CT\n    CTLOG_STORE_free(a->ctlog_store);\n#endif\n    sk_SSL_CIPHER_free(a->cipher_list);\n    sk_SSL_CIPHER_free(a->cipher_list_by_id);\n    sk_SSL_CIPHER_free(a->tls13_ciphersuites);\n    ssl_cert_free(a->cert);\n    sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);\n    sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);\n    sk_X509_pop_free(a->extra_certs, X509_free);\n    a->comp_methods = NULL;\n#ifndef OPENSSL_NO_SRTP\n    sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);\n#endif\n#ifndef OPENSSL_NO_SRP\n    SSL_CTX_SRP_CTX_free(a);\n#endif\n#ifndef OPENSSL_NO_ENGINE\n    ENGINE_finish(a->client_cert_engine);\n#endif\n#ifndef OPENSSL_NO_EC\n    OPENSSL_free(a->ext.ecpointformats);\n    OPENSSL_free(a->ext.supportedgroups);\n#endif\n    OPENSSL_free(a->ext.alpn);\n    OPENSSL_secure_free(a->ext.secure);\n    CRYPTO_THREAD_lock_free(a->lock);\n    OPENSSL_free(a);\n}', 'void SSL_CTX_flush_sessions(SSL_CTX *s, long t)\n{\n    unsigned long i;\n    TIMEOUT_PARAM tp;\n    tp.ctx = s;\n    tp.cache = s->sessions;\n    if (tp.cache == NULL)\n        return;\n    tp.time = t;\n    CRYPTO_THREAD_write_lock(s->lock);\n    i = lh_SSL_SESSION_get_down_load(s->sessions);\n    lh_SSL_SESSION_set_down_load(s->sessions, 0);\n    lh_SSL_SESSION_doall_TIMEOUT_PARAM(tp.cache, timeout_cb, &tp);\n    lh_SSL_SESSION_set_down_load(s->sessions, i);\n    CRYPTO_THREAD_unlock(s->lock);\n}', 'IMPLEMENT_LHASH_DOALL_ARG(SSL_SESSION, TIMEOUT_PARAM)', 'void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg)\n{\n    doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg);\n}', 'static void doall_util_fn(OPENSSL_LHASH *lh, int use_arg,\n                          OPENSSL_LH_DOALL_FUNC func,\n                          OPENSSL_LH_DOALL_FUNCARG func_arg, void *arg)\n{\n    int i;\n    OPENSSL_LH_NODE *a, *n;\n    if (lh == NULL)\n        return;\n    for (i = lh->num_nodes - 1; i >= 0; i--) {\n        a = lh->b[i];\n        while (a != NULL) {\n            n = a->next;\n            if (use_arg)\n                func_arg(a->data, arg);\n            else\n                func(a->data);\n            a = n;\n        }\n    }\n}']