oidc_cache_mutex_create:
   63|      4|oidc_cache_mutex_t *oidc_cache_mutex_create(apr_pool_t *pool, apr_byte_t global) {
   64|      4|	oidc_cache_mutex_t *ctx = apr_pcalloc(pool, sizeof(oidc_cache_mutex_t));
  ------------------
  |  |  465|      4|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
   65|      4|	ctx->gmutex = NULL;
   66|      4|	ctx->tmutex = NULL;
   67|      4|	ctx->mutex_filename = NULL;
   68|      4|	ctx->is_parent = TRUE;
  ------------------
  |  |   55|      4|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      4|#define FALSE 0
  |  |  ------------------
  ------------------
   69|      4|	ctx->is_global = global;
   70|      4|	return ctx;
   71|      4|}
oidc_cache_mutex_post_config:
  145|      4|apr_byte_t oidc_cache_mutex_post_config(apr_pool_t *pool, server_rec *s, oidc_cache_mutex_t *m, const char *type) {
  146|      4|	apr_byte_t rc = TRUE;
  ------------------
  |  |   55|      4|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      4|#define FALSE 0
  |  |  ------------------
  ------------------
  147|      4|	apr_status_t rv = APR_SUCCESS;
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  148|       |
  149|      4|	if (m->is_global) {
  ------------------
  |  Branch (149:6): [True: 4, False: 0]
  ------------------
  150|      4|		rc = oidc_cache_mutex_global_create(pool, s, m, type);
  151|      4|		goto end;
  152|      4|	}
  153|       |
  154|       |	// NB: see the note above at apr_global_mutex_create on the pool/pre-cleanup ordering requirement
  155|      0|	rv = apr_thread_mutex_create(&m->tmutex, APR_THREAD_MUTEX_DEFAULT, pool);
  ------------------
  |  |   43|      0|#define APR_THREAD_MUTEX_DEFAULT  0x0   /**< platform-optimal lock behavior */
  ------------------
  156|      0|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      0|#define APR_SUCCESS 0
  ------------------
  |  Branch (156:6): [True: 0, False: 0]
  ------------------
  157|      0|		oidc_serror(s, "apr_thread_mutex_create failed: %s (%d)", oidc_cache_status2str(pool, rv), rv);
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  158|      0|		rc = FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  159|      0|		goto end;
  160|      0|	}
  161|       |
  162|      4|end:
  163|       |
  164|      4|	return rc;
  165|      0|}
common.c:oidc_cache_mutex_global_create:
   88|      4|						 const char *type) {
   89|       |
   90|      4|	apr_status_t rv = APR_SUCCESS;
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
   91|      4|	const char *dir;
   92|       |
   93|       |	/* construct the mutex filename */
   94|      4|	rv = apr_temp_dir_get(&dir, pool);
   95|      4|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  |  Branch (95:6): [True: 0, False: 4]
  ------------------
   96|      0|		oidc_serror(s, "apr_temp_dir_get failed: could not find a temp dir: %s",
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
   97|      0|			    oidc_cache_status2str(pool, rv));
   98|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   99|      0|	}
  100|       |
  101|      4|	m->mutex_filename =
  102|      4|	    apr_psprintf(pool, "%s/mod_auth_openidc_%s_mutex.%ld.%pp", dir, type, (long int)getpid(), s);
  103|       |
  104|       |	/* set the lock type */
  105|      4|	apr_lockmech_e mech =
  106|       |#ifdef OIDC_LOCK
  107|       |	    OIDC_LOCK
  108|       |#elif APR_HAS_POSIXSEM_SERIALIZE
  109|       |	    APR_LOCK_POSIXSEM
  110|       |#else
  111|       |	    APR_LOCK_DEFAULT
  112|       |#endif
  113|      4|	    ;
  114|       |
  115|       |	/*
  116|       |	 * The server pre-cleanup must destroy this mutex before APR's regular cleanup tears down its
  117|       |	 * semaphore. Changing that order can crash graceful restarts.
  118|       |	 */
  119|      4|	rv = apr_global_mutex_create(&m->gmutex, (const char *)m->mutex_filename, mech, pool);
  120|       |
  121|      4|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  |  Branch (121:6): [True: 0, False: 4]
  ------------------
  122|      0|		oidc_serror(s, "apr_global_mutex_create failed to create mutex (%d) on file %s: %s (%d)", mech,
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  123|      0|			    m->mutex_filename, oidc_cache_status2str(pool, rv), rv);
  124|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  125|      0|	}
  126|       |
  127|       |	/* need this on Linux */
  128|      4|#ifdef AP_NEED_SET_MUTEX_PERMS
  129|      4|	rv = ap_unixd_set_global_mutex_perms(m->gmutex);
  130|      4|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  |  Branch (130:6): [True: 0, False: 4]
  ------------------
  131|      0|		oidc_serror(s, "unixd_set_global_mutex_perms failed; could not set permissions: %s (%d)",
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  132|      0|			    oidc_cache_status2str(pool, rv), rv);
  133|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  134|      0|	}
  135|      4|#endif
  136|       |
  137|      4|	oidc_slog(s, APLOG_TRACE1, "create: %pp (m=%pp,s=%pp, p=%d)", m, m->gmutex ? m->gmutex : 0, s, m->is_parent);
  ------------------
  |  |  167|      4|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  ------------------
  |  |  |  |  363|      4|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      4|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      4|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      4|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   48|      4|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (183:13): [Folded, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  184|      4|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  185|      4|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  626|      4|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  621|      8|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  622|      4|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  623|      4|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  186|      4|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      4|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  367|      4|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (367:65): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  368|      4|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  168|      4|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  ------------------
  138|       |
  139|      4|	return TRUE;
  ------------------
  |  |   55|      4|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      4|#define FALSE 0
  |  |  ------------------
  ------------------
  140|      4|}

oidc_cache_shm_segment_size:
  120|      2|apr_byte_t oidc_cache_shm_segment_size(int size_max, int entry_size_max, apr_uint32_t nbuckets, apr_size_t *result) {
  121|       |	/* Calculate in 64 bits first: apr_size_t is only 32 bits on supported 32-bit APR builds. */
  122|      2|	const apr_uint64_t header_size = ((apr_uint64_t)sizeof(oidc_cache_shm_header_t) + 63) & ~63ULL;
  123|      2|	const apr_uint64_t bucket_size = ((apr_uint64_t)nbuckets * sizeof(apr_uint32_t) + 63) & ~63ULL;
  124|      2|	const apr_uint64_t slot_size = ((apr_uint64_t)entry_size_max + 63) & ~63ULL;
  125|      2|	const apr_uint64_t slots_size = slot_size * (apr_uint64_t)size_max;
  126|      2|	const apr_uint64_t total = 64 + header_size + bucket_size + slots_size;
  127|       |
  128|      2|	if ((result == NULL) || (size_max <= 0) || (entry_size_max <= 0) || (nbuckets == 0) ||
  ------------------
  |  Branch (128:6): [True: 0, False: 2]
  |  Branch (128:26): [True: 0, False: 2]
  |  Branch (128:45): [True: 0, False: 2]
  |  Branch (128:70): [True: 0, False: 2]
  ------------------
  129|      2|	    (slots_size / slot_size != (apr_uint64_t)size_max) || (total < slots_size) ||
  ------------------
  |  Branch (129:6): [True: 0, False: 2]
  |  Branch (129:60): [True: 0, False: 2]
  ------------------
  130|      2|	    (total > (apr_uint64_t)SIZE_MAX) || (total > OIDC_CACHE_SHM_SEGMENT_SIZE_MAX))
  ------------------
  |  |   59|      2|#define OIDC_CACHE_SHM_SEGMENT_SIZE_MAX ((apr_uint64_t)16 * 1024 * 1024 * 1024)
  ------------------
  |  Branch (130:6): [True: 0, False: 2]
  |  Branch (130:42): [True: 0, False: 2]
  ------------------
  131|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  132|       |
  133|      2|	*result = (apr_size_t)total;
  134|      2|	return TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  135|      2|}
shm.c:oidc_cache_shm_base:
  116|      2|static oidc_cache_shm_header_t *oidc_cache_shm_base(const oidc_cache_cfg_shm_t *context) {
  117|      2|	return (oidc_cache_shm_header_t *)APR_ALIGN((uintptr_t)apr_shm_baseaddr_get(context->shm), 64);
  ------------------
  |  |  137|      2|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  118|      2|}
shm.c:oidc_cache_shm_buckets:
  101|  1.00k|static apr_uint32_t *oidc_cache_shm_buckets(oidc_cache_shm_header_t *hdr) {
  102|  1.00k|	return (apr_uint32_t *)((uint8_t *)hdr + APR_ALIGN(sizeof(oidc_cache_shm_header_t), 64));
  ------------------
  |  |  137|  1.00k|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  103|  1.00k|}
shm.c:oidc_cache_shm_slot:
  105|  1.00k|static oidc_cache_shm_entry_t *oidc_cache_shm_slot(oidc_cache_shm_header_t *hdr, apr_uint32_t idx) {
  106|  1.00k|	uint8_t *slots =
  107|  1.00k|	    (uint8_t *)oidc_cache_shm_buckets(hdr) + APR_ALIGN((apr_size_t)hdr->nbuckets * sizeof(apr_uint32_t), 64);
  ------------------
  |  |  137|  1.00k|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  108|  1.00k|	return (oidc_cache_shm_entry_t *)(slots + (apr_size_t)(idx - 1) * hdr->entry_size);
  109|  1.00k|}
shm.c:oidc_cache_shm_post_config:
  294|      2|static int oidc_cache_shm_post_config(apr_pool_t *pool, server_rec *s) {
  295|      2|	oidc_cfg_t *cfg = (oidc_cfg_t *)ap_get_module_config(s->module_config, &auth_openidc_module);
  ------------------
  |  |  551|      2|    (((void **)(v))[(m)->module_index])
  ------------------
  296|      2|	const int size_max = oidc_cfg_cache_shm_size_max_get(cfg);
  297|      2|	const int entry_size_max = oidc_cfg_cache_shm_entry_size_max_get(cfg);
  298|       |
  299|      2|	if (cfg->cache.cfg != NULL)
  ------------------
  |  Branch (299:6): [True: 0, False: 2]
  ------------------
  300|      0|		return OK;
  ------------------
  |  |  456|      0|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  301|      2|	oidc_cache_cfg_shm_t *context = oidc_cache_shm_cfg_create(pool);
  302|      2|	cfg->cache.cfg = context;
  303|       |
  304|       |	/* a power-of-two number of hash buckets >= the number of slots */
  305|      2|	apr_uint32_t nbuckets = 1;
  306|     20|	while ((nbuckets < (apr_uint32_t)size_max) && (nbuckets <= UINT32_MAX / 2))
  ------------------
  |  Branch (306:9): [True: 18, False: 2]
  |  Branch (306:48): [True: 18, False: 0]
  ------------------
  307|     18|		nbuckets <<= 1;
  308|      2|	if (nbuckets < (apr_uint32_t)size_max) {
  ------------------
  |  Branch (308:6): [True: 0, False: 2]
  ------------------
  309|      0|		oidc_serror(s, "could not size the shared memory hash bucket array");
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  310|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  311|      0|	}
  312|       |
  313|      2|	apr_size_t segment_size = 0;
  314|      2|	if (oidc_cache_shm_segment_size(size_max, entry_size_max, nbuckets, &segment_size) == FALSE) {
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (314:6): [True: 0, False: 2]
  ------------------
  315|      0|		oidc_serror(s,
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  316|      0|			    "requested shared memory cache is too large; reduce " OIDCCacheShmMax
  317|      0|			    " or " OIDCCacheShmEntrySizeMax " (maximum segment size is %" APR_UINT64_T_FMT " bytes)",
  318|      0|			    OIDC_CACHE_SHM_SEGMENT_SIZE_MAX);
  319|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  320|      0|	}
  321|       |
  322|       |	/* create the shared memory segment */
  323|      2|	apr_status_t rv = apr_shm_create(&context->shm, segment_size, NULL, pool);
  324|      2|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (324:6): [True: 0, False: 2]
  ------------------
  325|      0|		oidc_serror(s, "apr_shm_create failed to create shared memory segment");
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  326|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  327|      0|	}
  328|       |
  329|       |	/* initialize the header, the (empty) hash buckets and the free list holding all slots */
  330|      2|	oidc_cache_shm_header_t *hdr = oidc_cache_shm_base(context);
  331|      2|	hdr->nslots = (apr_uint32_t)size_max;
  332|      2|	hdr->nbuckets = nbuckets;
  333|       |	/* round the slot stride up to the entry's 64-byte alignment (see oidc_cache_shm_segment_size) */
  334|      2|	hdr->entry_size = (apr_uint32_t)APR_ALIGN((apr_size_t)entry_size_max, 64);
  ------------------
  |  |  137|      2|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  335|      2|	if (apr_generate_random_bytes((unsigned char *)hdr->hash_key, sizeof(hdr->hash_key)) != APR_SUCCESS) {
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (335:6): [True: 0, False: 2]
  ------------------
  336|      0|		oidc_serror(s, "apr_generate_random_bytes failed to seed the shared memory cache hash");
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  337|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  338|      0|	}
  339|      2|	hdr->last_pressure_warning = 0;
  340|      2|	_oidc_memset(oidc_cache_shm_buckets(hdr), 0, (apr_size_t)nbuckets * sizeof(apr_uint32_t));
  ------------------
  |  |   84|      2|#define _oidc_memset(b, c, __len) memset(b, c, __len)
  ------------------
  341|  1.00k|	for (apr_uint32_t i = 1; i <= hdr->nslots; i++) {
  ------------------
  |  Branch (341:27): [True: 1.00k, False: 2]
  ------------------
  342|  1.00k|		oidc_cache_shm_entry_t *t = oidc_cache_shm_slot(hdr, i);
  343|  1.00k|		t->section_key[0] = '\0';
  344|  1.00k|		t->access = 0;
  345|  1.00k|		t->next = i < hdr->nslots ? i + 1 : 0;
  ------------------
  |  Branch (345:13): [True: 998, False: 2]
  ------------------
  346|  1.00k|	}
  347|      2|	hdr->free_head = 1;
  348|       |
  349|      2|	if (oidc_cache_mutex_post_config(pool, s, context->mutex, "shm") == FALSE)
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (349:6): [True: 0, False: 2]
  ------------------
  350|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  351|      2|	context->mutex_ready = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  352|       |
  353|      2|	oidc_sdebug(s,
  ------------------
  |  |  175|      2|#define oidc_sdebug(s, fmt, ...) oidc_slog(s, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      2|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      2|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      2|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      2|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      2|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      2|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      2|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      2|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      4|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      2|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      2|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      2|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      2|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      2|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      2|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  354|      2|		    "initialized shared memory with a cache size (# entries) of: %d, a max (single) entry size of: %d, "
  355|      2|		    "and a segment size of: %" APR_SIZE_T_FMT,
  356|      2|		    size_max, entry_size_max, segment_size);
  357|       |
  358|      2|	oidc_slog(s, APLOG_TRACE1, "create: %pp (shm=%pp,s=%pp, p=%d)", context, context ? context->shm : 0, s,
  ------------------
  |  |  167|      2|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  ------------------
  |  |  |  |  363|      2|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      2|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      2|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   48|      2|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (183:13): [Folded, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  184|      2|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  185|      2|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  626|      2|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  621|      4|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  622|      2|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  623|      2|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  186|      2|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  367|      2|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (367:65): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (367:65): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  368|      2|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  168|      2|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  ------------------
  359|      2|		  context ? context->is_parent : -1);
  360|       |
  361|      2|	return OK;
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  362|      2|}
shm.c:oidc_cache_shm_cfg_create:
  283|      2|static void *oidc_cache_shm_cfg_create(apr_pool_t *pool) {
  284|      2|	oidc_cache_cfg_shm_t *context = apr_pcalloc(pool, sizeof(oidc_cache_cfg_shm_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  285|      2|	context->shm = NULL;
  286|      2|	context->mutex = oidc_cache_mutex_create(pool, TRUE);
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  287|      2|	context->is_parent = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  288|      2|	return context;
  289|      2|}

oidc_cfg_cache_shm_size_max_get:
   61|      2|	type oidc_cfg_cache_##member##_get(const oidc_cfg_t *cfg) {                                                    \
   62|      2|		if (cfg->cache.member == unset_val)                                                                    \
  ------------------
  |  Branch (62:7): [True: 0, False: 2]
  ------------------
   63|      2|			return def_val;                                                                                \
   64|      2|		return cfg->cache.member;                                                                              \
   65|      2|	}
oidc_cfg_cache_shm_entry_size_max_get:
   61|      2|	type oidc_cfg_cache_##member##_get(const oidc_cfg_t *cfg) {                                                    \
   62|      2|		if (cfg->cache.member == unset_val)                                                                    \
  ------------------
  |  Branch (62:7): [True: 0, False: 2]
  ------------------
   63|      2|			return def_val;                                                                                \
   64|      2|		return cfg->cache.member;                                                                              \
   65|      2|	}
oidc_cfg_cache_create_server_config:
  267|      2|void oidc_cfg_cache_create_server_config(oidc_cfg_t *c) {
  268|      2|	c->cache.impl = NULL;
  269|      2|	c->cache.cfg = NULL;
  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  ------------------
  |  |  111|      2|	INT(int, encrypt)                                                                                              \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      2|	/* shm: size of the segment (max number of cached entries) and max size in bytes of one entry */               \
  |  |  113|      2|	INT(int, shm_size_max)                                                                                         \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|      2|	INT(int, shm_entry_size_max)                                                                                   \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|	/* file: directory holding the cache files (OS default like "/tmp" if unset) + clean interval */               \
  |  |  116|      2|	PTR(char *, file_dir)                                                                                          \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  260|      2|#define OIDC_CACHE_M_CREATE_PTR(type, name) c->cache.name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|      2|	INT(int, file_clean_interval)                                                                                  \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  118|      2|	OIDC_CACHE_CFG_MEMCACHE_MEMBERS(PTR, INT, TIMEOUT)                                                             \
  |  |  ------------------
  |  |  |  |   81|      2|	PTR(char *, memcache_servers)                                                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|      2|#define OIDC_CACHE_M_CREATE_PTR(type, name) c->cache.name = NULL;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      2|	/* cache_type= memcache: minimum number of connections to each memcache server per process*/                   \
  |  |  |  |   83|      2|	INT(int, memcache_min)                                                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   84|      2|	/* cache_type= memcache: soft maximum number of connections to each memcache server per process */             \
  |  |  |  |   85|      2|	INT(int, memcache_smax)                                                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   86|      2|	/* cache_type= memcache: hard maximum number of connections to each memcache server per process */             \
  |  |  |  |   87|      2|	INT(int, memcache_hmax)                                                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   88|      2|	/* cache_type= memcache: maximum time in microseconds a connection to a memcache server can be idle before     \
  |  |  |  |   89|      2|	 * being closed */                                                                                             \
  |  |  |  |   90|      2|	TIMEOUT(memcache_ttl)
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  262|      2|#define OIDC_CACHE_M_CREATE_TIMEOUT(name) c->cache.name = OIDC_CONFIG_POS_TIMEOUT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      2|#define OIDC_CONFIG_POS_TIMEOUT_UNSET (apr_interval_time_t) - 2
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      2|	OIDC_CACHE_CFG_REDIS_MEMBERS(PTR, INT, TIMEOUT)
  ------------------
  271|      2|}

oidc_cfg_server_create:
  849|      2|void *oidc_cfg_server_create(apr_pool_t *pool, server_rec *svr) {
  850|      2|	oidc_cfg_t *c = oidc_cfg_server_alloc(pool, svr);
  851|      2|	c->svr = svr;
  852|       |
  853|      2|	c->merged = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  854|       |	/* nothing to inherit from: whatever OIDCRedirectURI this config ends up with is its own */
  855|      2|	c->redirect_uri_inherited = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  856|       |
  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  ------------------
  |  |  138|      2|	PTR(char *, redirect_uri)                                                                                      \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|      2|	/* (optional) default URL for 3rd-party initiated SSO */                                                       \
  |  |  140|      2|	PTR(char *, default_sso_url)                                                                                   \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      2|	/* (optional) default URL to go to after logout */                                                             \
  |  |  142|      2|	PTR(char *, default_slo_url)                                                                                   \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  143|      2|	/* Javascript template to preserve POST data */                                                                \
  |  |  144|      2|	PTR(char *, post_preserve_template)                                                                            \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      2|	/* Javascript template to restore POST data */                                                                 \
  |  |  146|      2|	PTR(char *, post_restore_template)                                                                             \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      2|	/* type of session management/storage */                                                                       \
  |  |  148|      2|	INT(session_type)                                                                                              \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      2|	/* whether secrets/tokens are masked in the debug log */                                                       \
  |  |  150|      2|	INT(debug_mask_secrets)                                                                                        \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      2|	INT(session_cache_fallback_to_cookie)                                                                          \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|      2|	/* session cookie or persistent cookie */                                                                      \
  |  |  153|      2|	INT(persistent_session_cookie)                                                                                 \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  154|      2|	/* store the id_token in the session */                                                                        \
  |  |  155|      2|	INT(store_id_token)                                                                                            \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      2|	/* session cookie chunk size */                                                                                \
  |  |  157|      2|	INT(session_cookie_chunk_size)                                                                                 \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|      2|	PTR(char *, cookie_domain)                                                                                     \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  159|      2|	INT(cookie_http_only)                                                                                          \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      2|	/* samesite cookie settings */                                                                                 \
  |  |  161|      2|	INT(cookie_same_site_session)                                                                                  \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  162|      2|	INT(cookie_same_site_state)                                                                                    \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      2|	INT(cookie_same_site_discovery_csrf)                                                                           \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  164|      2|	INT(state_timeout)                                                                                             \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      2|	INT(max_number_of_state_cookies)                                                                               \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  166|      2|	INT(delete_oldest_state_cookies)                                                                               \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  167|      2|	INT(state_input_headers)                                                                                       \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  168|      2|	INT(session_inactivity_timeout)                                                                                \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  169|      2|	INT(provider_metadata_refresh_interval)                                                                        \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|      2|	PTR(char *, claim_delimiter)                                                                                   \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      2|	PTR(char *, claim_prefix)                                                                                      \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|      2|	PTR(char *, ca_bundle_path)                                                                                    \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  173|      2|	PTR(char *, logout_x_frame_options)                                                                            \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  174|      2|	INT(x_forwarded_headers)                                                                                       \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  175|      2|	INT(action_on_userinfo_error)                                                                                  \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  176|      2|	INT(trace_parent)                                                                                              \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      2|	PTR(char *, metrics_path)                                                                                      \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      2|	INT(dpop_api_enabled)                                                                                          \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      2|	/* directory that holds the provider & client metadata files */                                                \
  |  |  180|      2|	PTR(char *, metadata_dir)
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|      2|	c->public_keys = NULL;
  859|      2|	c->private_keys = NULL;
  860|       |
  861|      2|	c->provider = oidc_cfg_provider_create(pool);
  862|      2|	c->oauth = oidc_cfg_oauth_create(pool);
  863|      2|	oidc_cfg_cache_create_server_config(c);
  864|       |
  865|      2|	c->http_timeout_long.request_timeout = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  866|      2|	c->http_timeout_long.connect_timeout = OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_LONG;
  ------------------
  |  |   90|      2|#define OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_LONG 10
  ------------------
  867|      2|	c->http_timeout_long.retries = OIDC_DEFAULT_HTTP_RETRIES_LONG;
  ------------------
  |  |   92|      2|#define OIDC_DEFAULT_HTTP_RETRIES_LONG 1
  ------------------
  868|      2|	c->http_timeout_long.retry_interval = OIDC_DEFAULT_HTTP_RETRY_INTERVAL_LONG;
  ------------------
  |  |   94|      2|#define OIDC_DEFAULT_HTTP_RETRY_INTERVAL_LONG 500
  ------------------
  869|      2|	c->http_timeout_short.request_timeout = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  870|      2|	c->http_timeout_short.connect_timeout = OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_SHORT;
  ------------------
  |  |   98|      2|#define OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_SHORT 2
  ------------------
  871|      2|	c->http_timeout_short.retries = OIDC_DEFAULT_HTTP_RETRIES_SHORT;
  ------------------
  |  |  100|      2|#define OIDC_DEFAULT_HTTP_RETRIES_SHORT 1
  ------------------
  872|      2|	c->http_timeout_short.retry_interval = OIDC_DEFAULT_HTTP_RETRY_INTERVAL_SHORT;
  ------------------
  |  |  102|      2|#define OIDC_DEFAULT_HTTP_RETRY_INTERVAL_SHORT 300
  ------------------
  873|       |
  874|      2|	c->remote_user_claim.claim_name = NULL;
  875|      2|	c->remote_user_claim.reg_exp = NULL;
  876|      2|	c->remote_user_claim.replace = NULL;
  877|       |
  878|      2|	c->outgoing_proxy.host_port = NULL;
  879|      2|	c->outgoing_proxy.username_password = NULL;
  880|      2|	c->outgoing_proxy.auth_type = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  881|       |
  882|      2|	c->crypto_passphrase.secret1 = NULL;
  883|      2|	c->crypto_passphrase.secret2 = NULL;
  884|      2|	c->crypto_passphrase.derived_key1_set = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  885|      2|	c->crypto_passphrase.derived_key2_set = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  886|       |
  887|      2|	c->info_hook_data = NULL;
  888|      2|	c->metrics_hook_data = NULL;
  889|       |
  890|      2|	c->black_listed_claims = NULL;
  891|      2|	c->white_listed_claims = NULL;
  892|      2|	c->filter_claims_expr = NULL;
  893|       |
  894|      2|	c->redirect_urls_allowed = NULL;
  895|      2|	c->discover_issuers_allowed = NULL;
  896|       |
  897|      2|	return c;
  898|      2|}
oidc_pre_config_init:
 1011|      2|void oidc_pre_config_init(void) {
 1012|      2|#if OPENSSL_API_COMPAT < 0x10100000L
 1013|      2|	ERR_load_crypto_strings();
 1014|      2|	OpenSSL_add_all_algorithms();
 1015|      2|	OpenSSL_add_all_digests();
 1016|       |#else
 1017|       |	OPENSSL_init_crypto(0, NULL);
 1018|       |#endif
 1019|      2|}
oidc_cfg_provider_get:
 1021|      6|oidc_provider_t *oidc_cfg_provider_get(oidc_cfg_t *cfg) {
 1022|      6|	return cfg->provider;
 1023|      6|}
oidc_cfg_post_config:
 1039|      2|int oidc_cfg_post_config(apr_pool_t *pool, oidc_cfg_t *cfg, server_rec *s) {
 1040|      2|	if (cfg->cache.impl == NULL)
  ------------------
  |  Branch (1040:6): [True: 0, False: 2]
  ------------------
 1041|      0|		cfg->cache.impl = &oidc_cache_shm;
 1042|      2|	if ((cfg->cache.impl->post_config != NULL) && (cfg->cache.impl->post_config(pool, s) != OK))
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (1042:6): [True: 2, False: 0]
  |  Branch (1042:48): [True: 0, False: 2]
  ------------------
 1043|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
 1044|      2|	if (_oidc_refresh_mutex == NULL) {
  ------------------
  |  Branch (1044:6): [True: 2, False: 0]
  ------------------
 1045|       |		// NB: use the process pool here as the mutex is a process-wide singleton
 1046|      2|		_oidc_refresh_mutex = oidc_cache_mutex_create(s->process->pool, TRUE);
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
 1047|      2|		if (oidc_cache_mutex_post_config(s->process->pool, s, _oidc_refresh_mutex, "refresh") != TRUE)
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (1047:7): [True: 0, False: 2]
  ------------------
 1048|      0|			return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
 1049|      2|	}
 1050|      2|	if ((cfg->metrics_hook_data != NULL) && (oidc_metrics_post_config(pool, s) != TRUE))
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (1050:6): [True: 0, False: 2]
  |  Branch (1050:42): [True: 0, False: 0]
  ------------------
 1051|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
 1052|      2|	return OK;
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
 1053|      2|}
cfg.c:oidc_cfg_server_alloc:
  822|      2|static oidc_cfg_t *oidc_cfg_server_alloc(apr_pool_t *pool, server_rec *s) {
  823|      2|	oidc_cfg_t *c = apr_pcalloc(pool, sizeof(oidc_cfg_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  824|      2|	oidc_cfg_cleanup_ctx_t *ctx = apr_pcalloc(pool, sizeof(oidc_cfg_cleanup_ctx_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  825|      2|	ctx->cfg = c;
  826|       |	// pconf pool used at destruction time
  827|      2|	ctx->pool = pool;
  828|      2|	ctx->svr = s;
  829|       |	// register a cleanup handler on the config pool to handle graceful restarts without increasing
  830|       |	// memory consumption; this MUST be a *pre*-cleanup: libapr registers its own regular cleanups
  831|       |	// for the cache global mutex's POSIX semaphore and the shm segment on this same pool when they
  832|       |	// are created at post_config time, and regular cleanups run in reverse order of registration,
  833|       |	// so a regular registration here (which happens much earlier, at config-parse time) would run
  834|       |	// only AFTER libapr has already closed/unmapped those objects, making the mutex unlock/destroy
  835|       |	// in oidc_cache_shm_destroy() dereference an unmapped semaphore and segfault the parent process
  836|       |	// on a graceful restart; pre-cleanups are guaranteed to run before all regular cleanups
  837|      2|	apr_pool_pre_cleanup_register(pool, ctx, oidc_cfg_server_cleanup);
  838|      2|	return c;
  839|      2|}

oidc_cfg_dir_post_config:
  611|      2|int oidc_cfg_dir_post_config(server_rec *s) {
  612|      2|	oidc_pass_user_info_as_t *p = NULL;
  613|      2|	if (pass_userinfo_as_default != NULL)
  ------------------
  |  Branch (613:6): [True: 0, False: 2]
  ------------------
  614|      0|		return OK;
  ------------------
  |  |  456|      0|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  615|      2|	pass_userinfo_as_default = apr_array_make(s->process->pool, 3, sizeof(const oidc_pass_user_info_as_t *));
  616|      2|	if (oidc_cfg_dir_parse_pass_userinfo_as(s->process->pool, OIDC_DEFAULT_PASS_USERINFO_AS, &p) != NULL)
  ------------------
  |  |  602|      2|#define OIDC_DEFAULT_PASS_USERINFO_AS OIDC_PASS_USERINFO_AS_CLAIMS_STR
  |  |  ------------------
  |  |  |  |  136|      2|#define OIDC_PASS_USERINFO_AS_CLAIMS_STR "claims"
  |  |  ------------------
  ------------------
  |  Branch (616:6): [True: 0, False: 2]
  ------------------
  617|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  618|      2|	APR_ARRAY_PUSH(pass_userinfo_as_default, const oidc_pass_user_info_as_t *) = p;
  ------------------
  |  |  150|      2|#define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
  ------------------
  619|      2|	return OK;
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  620|      2|}
oidc_cfg_dir_config_create:
  646|      2|void *oidc_cfg_dir_config_create(apr_pool_t *pool, char *path) {
  647|      2|	oidc_dir_cfg_t *c = apr_pcalloc(pool, sizeof(oidc_dir_cfg_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  ------------------
  |  |   60|      2|	PTR(char *, discover_url)                                                                                      \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|	PTR(char *, cookie_path)                                                                                       \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      2|	PTR(char *, cookie)                                                                                            \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|	PTR(char *, authn_header)                                                                                      \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|      2|	PTR(char *, unauthz_arg)                                                                                       \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      2|	PTR(apr_array_header_t *, pass_cookies)                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      2|	PTR(apr_array_header_t *, strip_cookies)                                                                       \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|      2|	PTR(oidc_apr_expr_t *, path_auth_request_expr)                                                                 \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      2|	PTR(oidc_apr_expr_t *, path_scope_expr)                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|	PTR(oidc_apr_expr_t *, unauth_expression)                                                                      \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      2|	PTR(oidc_apr_expr_t *, userinfo_claims_expr)                                                                   \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      2|	PTR(char *, state_cookie_prefix)                                                                               \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   72|      2|	PTR(apr_array_header_t *, pass_userinfo_as)                                                                    \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      2|	INT(unauth_action)                                                                                             \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|      2|	INT(unautz_action)                                                                                             \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|      2|	INT(pass_info_in)                                                                                              \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|      2|	INT(pass_info_encoding)                                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|      2|	INT(oauth_accept_token_in)                                                                                     \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|      2|	INT(preserve_post)                                                                                             \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|      2|	INT(pass_access_token)                                                                                         \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|      2|	INT(pass_refresh_token)                                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|      2|	INT(refresh_access_token_before_expiry)                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      2|	INT(action_on_error_refresh)                                                                                   \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      2|	INT(pass_idtoken_as)
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  649|      2|	c->oauth_accept_token_options = apr_hash_make(pool);
  650|      2|	c->oauth_token_introspect_interval = OIDC_INTROSPECT_INTERVAL_UNSET;
  ------------------
  |  |   53|      2|#define OIDC_INTROSPECT_INTERVAL_UNSET -2
  ------------------
  651|      2|	return c;
  652|      2|}
dir.c:oidc_cfg_dir_parse_pass_userinfo_as:
  145|      2|						       oidc_pass_user_info_as_t **result) {
  146|      2|	const char *rv = NULL;
  147|       |	/* only read when the parse below succeeds and has written it; seeded so the optimizer does not
  148|       |	 * have to prove that across the call (-Wmaybe-uninitialized) */
  149|      2|	oidc_pass_userinfo_enum_t type = OIDC_PASS_USERINFO_AS_CLAIMS;
  150|      2|	static const oidc_cfg_option_t options[] = {
  151|      2|	    {OIDC_PASS_USERINFO_AS_CLAIMS, OIDC_PASS_USERINFO_AS_CLAIMS_STR},
  ------------------
  |  |  136|      2|#define OIDC_PASS_USERINFO_AS_CLAIMS_STR "claims"
  ------------------
  152|      2|	    {OIDC_PASS_USERINFO_AS_JSON_OBJECT, OIDC_PASS_USERINFO_AS_JSON_OBJECT_STR},
  ------------------
  |  |  137|      2|#define OIDC_PASS_USERINFO_AS_JSON_OBJECT_STR "json"
  ------------------
  153|      2|	    {OIDC_PASS_USERINFO_AS_JWT, OIDC_PASS_USERINFO_AS_JWT_STR},
  ------------------
  |  |  138|      2|#define OIDC_PASS_USERINFO_AS_JWT_STR "jwt"
  ------------------
  154|      2|	    {OIDC_PASS_USERINFO_AS_SIGNED_JWT, OIDC_PASS_USERINFO_AS_SIGNED_JWT_STR}};
  ------------------
  |  |  139|      2|#define OIDC_PASS_USERINFO_AS_SIGNED_JWT_STR "signed_jwt"
  ------------------
  155|       |
  156|       |	/* split "<type>:<name>" without writing into `v`: oidc_cfg_dir_post_config passes the default
  157|       |	 * as a string literal, so truncating it in place would write to read-only memory. Copying out
  158|       |	 * just the type also avoids duplicating the whole string when there is no separator at all. */
  159|      2|	const char *sep = _oidc_strstr(v, ":");
  160|      2|	const char *value = (sep != NULL) ? apr_pstrndup(pool, v, (apr_size_t)(sep - v)) : v;
  ------------------
  |  Branch (160:22): [True: 0, False: 2]
  ------------------
  161|      2|	const char *name = (sep != NULL) ? sep + 1 : NULL;
  ------------------
  |  Branch (161:21): [True: 0, False: 2]
  ------------------
  162|       |
  163|      2|	rv = oidc_cfg_parse_option(pool, options, OIDC_CFG_OPTIONS_SIZE(options), value, (int *)&type);
  ------------------
  |  |  152|      2|#define OIDC_CFG_OPTIONS_SIZE(options) ((int)(sizeof(options) / sizeof(oidc_cfg_option_t)))
  ------------------
  164|      2|	if (rv != NULL)
  ------------------
  |  Branch (164:6): [True: 0, False: 2]
  ------------------
  165|      0|		return rv;
  166|       |
  167|      2|	*result = apr_pcalloc(pool, sizeof(oidc_pass_user_info_as_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  168|      2|	(*result)->type = type;
  169|      2|	if (name)
  ------------------
  |  Branch (169:6): [True: 0, False: 2]
  ------------------
  170|      0|		(*result)->name = apr_pstrdup(pool, name);
  171|       |
  172|       |	return NULL;
  173|      2|}

oidc_cfg_oauth_create:
  378|      2|oidc_oauth_t *oidc_cfg_oauth_create(apr_pool_t *pool) {
  379|      2|	oidc_oauth_t *o = apr_pcalloc(pool, sizeof(oidc_oauth_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  ------------------
  |  |   54|      2|	PTR(char *, metadata_url)                                                                                      \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      2|	PTR(char *, verify_jwks_uri)                                                                                   \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|      2|	PTR(apr_array_header_t *, verify_aud_values)                                                                   \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|      2|	PTR(char *, verify_issuer)                                                                                     \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      2|	PTR(apr_hash_t *, verify_shared_keys)                                                                          \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|      2|	PTR(apr_hash_t *, decrypt_shared_keys)                                                                         \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      2|	PTR(char *, client_id)                                                                                         \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|	PTR(char *, client_secret)                                                                                     \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      2|	PTR(char *, introspection_endpoint_url)                                                                        \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|	INT(introspection_endpoint_method)                                                                             \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      2|#define OIDC_OAUTH_M_CREATE_INT(name) o->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|      2|	PTR(char *, introspection_token_param_name)                                                                    \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      2|	PTR(char *, introspection_endpoint_params)                                                                     \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      2|	PTR(char *, introspection_endpoint_auth)                                                                       \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|      2|	PTR(char *, introspection_endpoint_auth_alg)                                                                   \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      2|	PTR(const char *, introspection_client_auth_bearer_token)                                                      \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|	PTR(char *, introspection_endpoint_tls_client_key)                                                             \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      2|	PTR(char *, introspection_endpoint_tls_client_key_pwd)                                                         \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      2|	PTR(char *, introspection_endpoint_tls_client_cert)                                                            \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   72|      2|	INT(ssl_validate_server)
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      2|#define OIDC_OAUTH_M_CREATE_INT(name) o->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|      2|	o->verify_public_keys = NULL;
  382|      2|	o->introspection_token_expiry_claim_name = NULL;
  383|      2|	o->introspection_token_expiry_claim_format = OIDC_TOKEN_EXPIRY_CLAIM_FORMAT_RELATIVE;
  384|      2|	o->introspection_token_expiry_claim_required = OIDC_TOKEN_EXPIRY_CLAIM_REQUIRED_MANDATORY;
  385|      2|	o->remote_user_claim.claim_name = NULL;
  386|      2|	o->remote_user_claim.reg_exp = NULL;
  387|       |	o->remote_user_claim.replace = NULL;
  388|      2|	return o;
  389|      2|}

oidc_cfg_parse_option:
  125|      2|char *oidc_cfg_parse_option(apr_pool_t *pool, const oidc_cfg_option_t options[], int n, const char *arg, int *v) {
  126|      2|	return oidc_cfg_parse_option_impl(pool, options, n, arg, v, _oidc_strcmp);
  127|      2|}
oidc_cfg_parse_is_valid_http_url:
  305|      2|const char *oidc_cfg_parse_is_valid_http_url(apr_pool_t *pool, const char *arg) {
  306|      2|	return oidc_cfg_parse_is_valid_url_scheme(pool, arg, "https", "http");
  307|      2|}
parse.c:oidc_cfg_parse_option_impl:
  110|      2|					int *v, int (*fstrcmp)(const char *, const char *)) {
  111|      2|	int i = 0;
  112|      2|	while ((i < n) && (fstrcmp(arg, options[i].str) != 0))
  ------------------
  |  Branch (112:9): [True: 2, False: 0]
  |  Branch (112:20): [True: 0, False: 2]
  ------------------
  113|      0|		i++;
  114|      2|	if (i < n) {
  ------------------
  |  Branch (114:6): [True: 2, False: 0]
  ------------------
  115|      2|		*v = options[i].val;
  116|      2|		return NULL;
  117|      2|	}
  118|      0|	return apr_psprintf(pool, "invalid value %s%s%s, must be one of %s", OIDC_LIST_OPTIONS_QUOTE, arg,
  ------------------
  |  |   56|      0|#define OIDC_LIST_OPTIONS_QUOTE "'"
  ------------------
  119|      0|			    OIDC_LIST_OPTIONS_QUOTE, oidc_cfg_parse_options_flatten(pool, options, n));
  ------------------
  |  |   56|      0|#define OIDC_LIST_OPTIONS_QUOTE "'"
  ------------------
  120|      2|}
parse.c:oidc_cfg_parse_is_valid_url_scheme:
  265|      2|						      const char *scheme2) {
  266|       |
  267|      2|	apr_uri_t uri;
  268|       |
  269|      2|	if (arg == NULL)
  ------------------
  |  Branch (269:6): [True: 0, False: 2]
  ------------------
  270|      0|		return apr_psprintf(pool, "input cannot be empty");
  271|       |
  272|      2|	if (apr_uri_parse(pool, arg, &uri) != APR_SUCCESS)
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (272:6): [True: 0, False: 2]
  ------------------
  273|      0|		return apr_psprintf(pool, "'%s' cannot be parsed as a URL", arg);
  274|       |
  275|      2|	if (uri.scheme == NULL)
  ------------------
  |  Branch (275:6): [True: 0, False: 2]
  ------------------
  276|      0|		return apr_psprintf(pool, "'%s' cannot be parsed as a URL (no scheme set)", arg);
  277|       |
  278|      2|	if ((scheme1 != NULL) && (_oidc_strnatcasecmp(uri.scheme, scheme1) != 0)) {
  ------------------
  |  Branch (278:6): [True: 2, False: 0]
  |  Branch (278:27): [True: 0, False: 2]
  ------------------
  279|      0|		if ((scheme2 != NULL) && (_oidc_strnatcasecmp(uri.scheme, scheme2) != 0)) {
  ------------------
  |  Branch (279:7): [True: 0, False: 0]
  |  Branch (279:28): [True: 0, False: 0]
  ------------------
  280|      0|			return apr_psprintf(pool, "'%s' cannot be parsed as a \"%s\" or \"%s\" URL (scheme == %s)!",
  281|      0|					    arg, scheme1, scheme2, uri.scheme);
  282|      0|		} else if (scheme2 == NULL) {
  ------------------
  |  Branch (282:14): [True: 0, False: 0]
  ------------------
  283|      0|			return apr_psprintf(pool, "'%s' cannot be parsed as a \"%s\" URL (scheme == %s)!", arg, scheme1,
  284|      0|					    uri.scheme);
  285|      0|		}
  286|      0|	}
  287|       |
  288|      2|	if (uri.hostname == NULL)
  ------------------
  |  Branch (288:6): [True: 0, False: 2]
  ------------------
  289|      0|		return apr_psprintf(pool, "'%s' cannot be parsed as a valid URL (no hostname set, check your slashes)",
  290|      0|				    arg);
  291|       |
  292|      2|	return NULL;
  293|      2|}

oidc_cfg_provider_authorization_endpoint_url_valid:
  188|      2|	const char *oidc_cfg_provider_##member##_valid(apr_pool_t *pool, const char *arg) {                            \
  189|      2|		return fvalid(pool, arg);                                                                              \
  190|      2|	}                                                                                                              \
oidc_cfg_provider_create:
  791|      2|oidc_provider_t *oidc_cfg_provider_create(apr_pool_t *pool) {
  792|      2|	oidc_provider_t *provider = apr_pcalloc(pool, sizeof(oidc_provider_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  793|      2|	oidc_cfg_provider_init(provider);
  794|      2|	return provider;
  795|      2|}
provider.c:oidc_cfg_provider_init:
  764|      2|static void oidc_cfg_provider_init(oidc_provider_t *provider) {
  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  ------------------
  |  |   53|      2|	PTR(char *, metadata_url)                                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      2|	PTR(char *, issuer)                                                                                            \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      2|	PTR(char *, authorization_endpoint_url)                                                                        \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|      2|	PTR(char *, token_endpoint_url)                                                                                \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|      2|	PTR(char *, token_endpoint_auth)                                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      2|	PTR(char *, token_endpoint_auth_alg)                                                                           \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|      2|	PTR(char *, token_endpoint_params)                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      2|	PTR(char *, userinfo_endpoint_url)                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|	PTR(char *, revocation_endpoint_url)                                                                           \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      2|	PTR(char *, registration_endpoint_url)                                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|	PTR(char *, pushed_authorization_request_endpoint_url)                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|      2|	PTR(char *, check_session_iframe)                                                                              \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      2|	PTR(char *, end_session_endpoint)                                                                              \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      2|	PTR(char *, client_id)                                                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|      2|	PTR(char *, client_secret)                                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      2|	PTR(char *, token_endpoint_tls_client_key)                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|	PTR(char *, token_endpoint_tls_client_key_pwd)                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      2|	PTR(char *, token_endpoint_tls_client_cert)                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      2|	PTR(char *, client_name)                                                                                       \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   72|      2|	PTR(char *, client_contact)                                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      2|	PTR(char *, registration_token)                                                                                \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|      2|	PTR(char *, registration_endpoint_json)                                                                        \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|      2|	PTR(char *, scope)                                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|      2|	PTR(char *, response_type)                                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|      2|	PTR(char *, response_mode)                                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|      2|	PTR(char *, auth_request_params)                                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|      2|	PTR(char *, logout_request_params)                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|      2|	PTR(char *, client_jwks_uri)                                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|      2|	PTR(char *, id_token_signed_response_alg)                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      2|	PTR(char *, id_token_encrypted_response_alg)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      2|	PTR(char *, id_token_encrypted_response_enc)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|      2|	PTR(char *, userinfo_signed_response_alg)                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|      2|	PTR(char *, userinfo_encrypted_response_alg)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      2|	PTR(char *, userinfo_encrypted_response_enc)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      2|	PTR(char *, request_object)                                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|      2|	PTR(oidc_proto_pkce_t *, pkce)                                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      2|	PTR(apr_array_header_t *, id_token_aud_values)                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      2|	INT(int, backchannel_logout_supported)                                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|      2|	INT(int, ssl_validate_server)                                                                                  \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|      2|	INT(int, validate_issuer)                                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|      2|	INT(int, idtoken_iat_slack)                                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      2|	INT(int, session_max_duration)                                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|      2|	INT(oidc_dpop_mode_t, dpop_mode)                                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      2|	INT(oidc_cert_bound_tokens_t, cert_bound_tokens)                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|      2|	INT(int, dpop_supported)                                                                                       \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      2|	INT(int, userinfo_refresh_interval)                                                                            \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   99|      2|	INT(oidc_userinfo_token_method_t, userinfo_token_method)                                                       \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  100|      2|	INT(oidc_auth_request_method_t, auth_request_method)                                                           \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|      2|	INT(oidc_profile_t, profile)                                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      2|	INT(int, response_require_iss)
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  766|      2|	provider->jwks_uri.uri = NULL;
  767|      2|	provider->jwks_uri.refresh_interval = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  768|      2|	provider->jwks_uri.signed_uri = NULL;
  769|      2|	provider->jwks_uri.jwk_list = NULL;
  770|      2|	provider->verify_public_keys = NULL;
  771|       |	provider->client_keys = NULL;
  772|      2|}

util.c:_oidc_strlen:
   90|      4|static inline size_t _oidc_strlen(const char *s) {
   91|      4|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 4, False: 0]
  ------------------
   92|      4|}
dir.c:_oidc_strstr:
  107|      2|static inline char *_oidc_strstr(const char *a, const char *b) {
  108|      2|	return ((a && b) ? (char *)strstr(a, b) : NULL);
  ------------------
  |  Branch (108:11): [True: 2, False: 0]
  |  Branch (108:16): [True: 2, False: 0]
  ------------------
  109|      2|}
parse.c:_oidc_strcmp:
   98|      2|static inline int _oidc_strcmp(const char *a, const char *b) {
   99|      2|	return ((a && b) ? strcmp(a, b) : -1);
  ------------------
  |  Branch (99:11): [True: 2, False: 0]
  |  Branch (99:16): [True: 2, False: 0]
  ------------------
  100|      2|}
parse.c:_oidc_strnatcasecmp:
  101|      2|static inline int _oidc_strnatcasecmp(const char *a, const char *b) {
  102|      2|	return ((a && b) ? apr_strnatcasecmp(a, b) : -1);
  ------------------
  |  Branch (102:11): [True: 2, False: 0]
  |  Branch (102:16): [True: 2, False: 0]
  ------------------
  103|      2|}
base64.c:_oidc_strlen:
   90|     71|static inline size_t _oidc_strlen(const char *s) {
   91|     71|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 71, False: 0]
  ------------------
   92|     71|}
key.c:_oidc_strlen:
   90|      4|static inline size_t _oidc_strlen(const char *s) {
   91|      4|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 4, False: 0]
  ------------------
   92|      4|}

oidc_http_curl_pool_init:
 1640|      2|void oidc_http_curl_pool_init(apr_pool_t *pool) {
 1641|      2|	if (_oidc_http_curl_pool_enabled == TRUE)
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (1641:6): [True: 0, False: 2]
  ------------------
 1642|      0|		return;
 1643|      2|#if APR_HAS_THREADS
 1644|      2|	if (apr_thread_mutex_create(&_oidc_http_curl_pool_mutex, APR_THREAD_MUTEX_DEFAULT, pool) != APR_SUCCESS)
  ------------------
  |  |   43|      2|#define APR_THREAD_MUTEX_DEFAULT  0x0   /**< platform-optimal lock behavior */
  ------------------
              	if (apr_thread_mutex_create(&_oidc_http_curl_pool_mutex, APR_THREAD_MUTEX_DEFAULT, pool) != APR_SUCCESS)
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (1644:6): [True: 0, False: 2]
  ------------------
 1645|      0|		return;
 1646|      2|#endif
 1647|      2|	_oidc_http_curl_pool_num = 0;
 1648|      2|	_oidc_http_curl_pool_enabled = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
 1649|       |	apr_pool_cleanup_register(pool, NULL, oidc_http_curl_pool_cleanup, apr_pool_cleanup_null);
 1650|      2|}

oidc_util_base64_decode:
   88|     41|char *oidc_util_base64_decode(apr_pool_t *pool, const char *input, char **output, int *output_len) {
   89|     41|	if ((input == NULL) || (output == NULL) || (output_len == NULL))
  ------------------
  |  Branch (89:6): [True: 0, False: 41]
  |  Branch (89:25): [True: 0, False: 41]
  |  Branch (89:45): [True: 0, False: 41]
  ------------------
   90|      0|		return apr_psprintf(pool, "base64-decoding failed: invalid parameters");
   91|       |
   92|     41|	*output = apr_pcalloc(pool, apr_base64_decode_len(input));
  ------------------
  |  |  465|     41|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
   93|     41|	*output_len = apr_base64_decode(*output, input);
   94|       |
   95|     41|	if (*output_len <= 0)
  ------------------
  |  Branch (95:6): [True: 10, False: 31]
  ------------------
   96|     10|		return apr_psprintf(pool, "base64-decoding of \"%s\" failed", input);
   97|       |
   98|     31|	return NULL;
   99|     41|}
oidc_util_base64url_decode:
  102|     71|int oidc_util_base64url_decode(apr_pool_t *pool, char **dst, const char *src) {
  103|     71|	if (src == NULL) {
  ------------------
  |  Branch (103:6): [True: 0, False: 71]
  ------------------
  104|      0|		return -1;
  105|      0|	}
  106|     71|	char *dec = apr_pstrdup(pool, src);
  107|     71|	int i = 0;
  108|  1.39M|	while (dec[i] != '\0') {
  ------------------
  |  Branch (108:9): [True: 1.39M, False: 71]
  ------------------
  109|  1.39M|		if (dec[i] == '-')
  ------------------
  |  Branch (109:7): [True: 511, False: 1.39M]
  ------------------
  110|    511|			dec[i] = '+';
  111|  1.39M|		if (dec[i] == '_')
  ------------------
  |  Branch (111:7): [True: 2.86k, False: 1.39M]
  ------------------
  112|  2.86k|			dec[i] = '/';
  113|  1.39M|		if (dec[i] == ',')
  ------------------
  |  Branch (113:7): [True: 194, False: 1.39M]
  ------------------
  114|    194|			dec[i] = '=';
  115|  1.39M|		i++;
  116|  1.39M|	}
  117|     71|	switch (_oidc_strlen(dec) % 4) {
  118|     27|	case 0:
  ------------------
  |  Branch (118:2): [True: 27, False: 44]
  ------------------
  119|     27|		break;
  120|      3|	case 2:
  ------------------
  |  Branch (120:2): [True: 3, False: 68]
  ------------------
  121|      3|		dec = apr_pstrcat(pool, dec, "==", NULL);
  122|      3|		break;
  123|     11|	case 3:
  ------------------
  |  Branch (123:2): [True: 11, False: 60]
  ------------------
  124|     11|		dec = apr_pstrcat(pool, dec, "=", NULL);
  125|     11|		break;
  126|     30|	default:
  ------------------
  |  Branch (126:2): [True: 30, False: 41]
  ------------------
  127|     30|		return 0;
  128|     71|	}
  129|       |
  130|     41|	int dlen = -1;
  131|     41|	oidc_util_base64_decode(pool, dec, dst, &dlen);
  132|     41|	return dlen;
  133|     71|}

oidc_util_key_derive_passphrase_key:
   60|      2|apr_byte_t oidc_util_key_derive_passphrase_key(const char *passphrase, unsigned char *out, apr_size_t out_len) {
   61|      2|	if ((passphrase == NULL) || (_oidc_strlen(passphrase) == 0))
  ------------------
  |  Branch (61:6): [True: 0, False: 2]
  |  Branch (61:30): [True: 0, False: 2]
  ------------------
   62|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   63|      2|	return (PKCS5_PBKDF2_HMAC(passphrase, (int)_oidc_strlen(passphrase),
  ------------------
  |  Branch (63:9): [True: 2, False: 0]
  ------------------
   64|      2|				  (const unsigned char *)OIDC_UTIL_KEY_DERIVE_SALT,
  ------------------
  |  |   53|      2|#define OIDC_UTIL_KEY_DERIVE_SALT "mod_auth_openidc-crypto-passphrase-v1"
  ------------------
   65|      2|				  (int)(sizeof(OIDC_UTIL_KEY_DERIVE_SALT) - 1), OIDC_UTIL_KEY_DERIVE_ITERATIONS,
  ------------------
  |  |   53|      2|#define OIDC_UTIL_KEY_DERIVE_SALT "mod_auth_openidc-crypto-passphrase-v1"
  ------------------
              				  (int)(sizeof(OIDC_UTIL_KEY_DERIVE_SALT) - 1), OIDC_UTIL_KEY_DERIVE_ITERATIONS,
  ------------------
  |  |   49|      2|#define OIDC_UTIL_KEY_DERIVE_ITERATIONS 210000
  ------------------
   66|      2|				  EVP_sha256(), (int)out_len, out) == 1)
   67|      2|		   ? TRUE
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
   68|      2|		   : FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
   69|      2|}

LLVMFuzzerInitialize:
   26|      2|int LLVMFuzzerInitialize(int *argc, char ***argv) {
   27|      2|	(void)argc;
   28|      2|	(void)argv;
   29|      2|	if (!g_ready) {
  ------------------
  |  Branch (29:6): [True: 2, False: 0]
  ------------------
   30|      2|		oidc_test_setup();
   31|      2|		g_ready = 1;
   32|      2|	}
   33|      2|	return 0;
   34|      2|}
LLVMFuzzerTestOneInput:
   36|     71|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   37|     71|	if (!g_ready)
  ------------------
  |  Branch (37:6): [True: 0, False: 71]
  ------------------
   38|      0|		LLVMFuzzerInitialize(NULL, NULL);
   39|       |
   40|     71|	apr_pool_t *pool = NULL;
   41|     71|	apr_pool_create(&pool, oidc_test_pool_get());
  ------------------
  |  |  323|     71|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
   42|       |
   43|       |	/* the decoder takes a NUL-terminated C string */
   44|     71|	char *src = apr_pstrmemdup(pool, (const char *)data, size);
   45|     71|	char *dst = NULL;
   46|     71|	oidc_util_base64url_decode(pool, &dst, src);
   47|       |
   48|     71|	apr_pool_destroy(pool);
   49|     71|	return 0;
   50|     71|}

ap_unixd_set_global_mutex_perms:
   54|      4|AP_DECLARE(apr_status_t) ap_unixd_set_global_mutex_perms(apr_global_mutex_t *gmutex) {
   55|      4|	return 0;
   56|      4|}
oidc_test_set_auth_type:
   63|      2|void oidc_test_set_auth_type(const char *auth_type) {
   64|      2|	stub_auth_type = (auth_type != NULL) ? auth_type : "openid-connect";
  ------------------
  |  Branch (64:19): [True: 0, False: 2]
  ------------------
   65|      2|}

oidc_test_setup:
  201|      2|void oidc_test_setup(void) {
  202|      2|	apr_initialize();
  203|      2|	oidc_pre_config_init();
  204|       |	/* reset the stubbed AuthType so a test that changed it does not leak into
  205|       |	 * the next one under CK_FORK=no */
  206|      2|	oidc_test_set_auth_type(NULL);
  207|       |	apr_pool_create(&pool, NULL);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  208|      2|	request = oidc_test_request_init(pool);
  209|      2|}
oidc_test_pool_get:
  223|     71|apr_pool_t *oidc_test_pool_get(void) {
  224|     71|	return pool;
  225|     71|}
util.c:oidc_test_request_init:
  105|      2|static request_rec *oidc_test_request_init(apr_pool_t *pool) {
  106|      2|	const unsigned int kIdx = 0;
  107|      2|	const unsigned int kEls = kIdx + 1;
  108|      2|	request_rec *request = (request_rec *)apr_pcalloc(pool, sizeof(request_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  109|       |
  110|      2|	apr_pool_create(&request->pool, pool);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  111|       |
  112|      2|	request->subprocess_env = apr_table_make(request->pool, 0);
  113|       |
  114|      2|	request->headers_in = apr_table_make(request->pool, 0);
  115|      2|	request->headers_out = apr_table_make(request->pool, 0);
  116|      2|	request->err_headers_out = apr_table_make(request->pool, 0);
  117|       |
  118|      2|	apr_table_set(request->headers_in, "Host", "www.example.com");
  119|      2|	apr_table_set(request->headers_in, "OIDC_foo", "some-value");
  120|      2|	apr_table_set(request->headers_in, "Cookie",
  121|      2|		      "foo=bar; "
  122|      2|		      "mod_auth_openidc_session"
  123|      2|		      "=0123456789abcdef; baz=zot");
  124|       |
  125|      2|	request->server = apr_pcalloc(pool, sizeof(struct server_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  126|      2|	request->server->process = apr_pcalloc(pool, sizeof(struct process_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  127|      2|	apr_pool_create(&request->server->process->pool, pool);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  128|      2|	apr_pool_create(&request->server->process->pconf, pool);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  129|      2|	request->connection = apr_pcalloc(pool, sizeof(struct conn_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  130|      2|	request->connection->bucket_alloc = apr_bucket_alloc_create(pool);
  131|      2|	request->connection->local_addr = apr_pcalloc(pool, sizeof(apr_sockaddr_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  132|       |	/* minimal output filter carrying the request so the ap_pass_brigade stub
  133|       |	 * can capture sent response bodies into the "sent_body" request state */
  134|      2|	request->output_filters = apr_pcalloc(pool, sizeof(ap_filter_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  135|      2|	request->output_filters->r = request;
  136|       |
  137|      2|	apr_pool_userdata_set("https", "scheme", NULL, request->pool);
  138|      2|	request->server->server_hostname = "www.example.com";
  139|      2|	request->connection->local_addr->port = 4433;
  140|      2|	request->unparsed_uri = "/bla?foo=bar&param1=value1";
  141|      2|	request->args = "foo=bar&param1=value1";
  142|      2|	apr_uri_parse(request->pool, "https://www.example.com/bla?foo=bar&param1=value1", &request->parsed_uri);
  143|       |
  144|      2|	auth_openidc_module.module_index = kIdx;
  145|      2|	oidc_cfg_t *cfg = oidc_cfg_server_create(request->server->process->pconf, request->server);
  146|       |
  147|      2|	oidc_cfg_provider_issuer_set(request->server->process->pconf, oidc_cfg_provider_get(cfg),
  148|      2|				     "https://idp.example.com");
  149|      2|	oidc_cfg_provider_authorization_endpoint_url_set(request->server->process->pconf, oidc_cfg_provider_get(cfg),
  150|      2|							 "https://idp.example.com/authorize");
  151|      2|	oidc_cfg_provider_client_id_set(request->server->process->pconf, oidc_cfg_provider_get(cfg), "client_id");
  152|       |
  153|      2|	cfg->redirect_uri = "https://www.example.com/protected/";
  154|       |
  155|      2|	oidc_dir_cfg_t *d_cfg = oidc_cfg_dir_config_create(request->server->process->pconf, NULL);
  156|       |
  157|       |	// coverity[suspicious_sizeof]
  158|      2|	request->server->module_config = apr_pcalloc(request->server->process->pconf, sizeof(void *) * kEls);
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  159|       |	// coverity[suspicious_sizeof]
  160|      2|	request->per_dir_config = apr_pcalloc(request->server->process->pconf, sizeof(void *) * kEls);
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  161|      2|	ap_set_module_config(request->server->module_config, &auth_openidc_module, cfg);
  ------------------
  |  |  553|      2|    ((((void **)(v))[(m)->module_index]) = (val))
  ------------------
  162|      2|	ap_set_module_config(request->per_dir_config, &auth_openidc_module, d_cfg);
  ------------------
  |  |  553|      2|    ((((void **)(v))[(m)->module_index]) = (val))
  ------------------
  163|       |
  164|       |	// TODO:
  165|      2|	cfg->public_keys = apr_array_make(request->server->process->pconf, 1, sizeof(const char *));
  166|      2|	cfg->private_keys = apr_array_make(request->server->process->pconf, 1, sizeof(const char *));
  167|       |
  168|      2|	cfg->crypto_passphrase.secret1 = "12345678901234567890123456789012";
  169|      2|	if (oidc_test_crypto_passphrase_derive_keys_cached(&cfg->crypto_passphrase) == FALSE) {
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (169:6): [True: 0, False: 2]
  ------------------
  170|      0|		fprintf(stderr, "oidc_cfg_crypto_passphrase_derive_keys failed!\n");
  171|      0|		exit(-1);
  172|      0|	}
  173|      2|	cfg->cache.impl = &oidc_cache_shm;
  174|      2|	cfg->cache.cfg = NULL;
  175|      2|	cfg->cache.shm_size_max = 500;
  176|      2|	const char *shm_size = getenv("OIDC_TEST_SHM_SIZE");
  177|      2|	if (shm_size != NULL) {
  ------------------
  |  Branch (177:6): [True: 0, False: 2]
  ------------------
  178|      0|		char *end = NULL;
  179|      0|		long parsed = strtol(shm_size, &end, 10);
  180|      0|		if ((end != shm_size) && (*end == '\0') && (parsed >= 128) && (parsed <= 1000000))
  ------------------
  |  Branch (180:7): [True: 0, False: 0]
  |  Branch (180:28): [True: 0, False: 0]
  |  Branch (180:46): [True: 0, False: 0]
  |  Branch (180:65): [True: 0, False: 0]
  ------------------
  181|      0|			cfg->cache.shm_size_max = (int)parsed;
  182|      0|	}
  183|      2|	cfg->cache.shm_entry_size_max = 16384 + 255 + 17;
  184|      2|	cfg->cache.encrypt = 1;
  185|       |	/* full post-config so the cache backend AND the shared refresh-grant mutex get set up */
  186|      2|	if (oidc_cfg_post_config(request->server->process->pconf, cfg, request->server) != OK) {
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (186:6): [True: 0, False: 2]
  ------------------
  187|      0|		fprintf(stderr, "oidc_cfg_post_config failed!\n");
  188|      0|		exit(-1);
  189|      0|	}
  190|       |
  191|      2|	if (oidc_cfg_dir_post_config(request->server) != OK) {
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (191:6): [True: 0, False: 2]
  ------------------
  192|      0|		fprintf(stderr, "oidc_cfg_dir_post_config failed!\n");
  193|      0|		exit(-1);
  194|      0|	}
  195|       |
  196|      2|	oidc_http_curl_pool_init(request->server->process->pconf);
  197|       |
  198|      2|	return request;
  199|      2|}
util.c:oidc_test_crypto_passphrase_derive_keys_cached:
   91|      2|static apr_byte_t oidc_test_crypto_passphrase_derive_keys_cached(oidc_crypto_passphrase_t *cp) {
   92|      2|	if ((cp->secret1 != NULL) && (_oidc_strlen(cp->secret1) > 0) && (cp->derived_key1_set == FALSE)) {
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (92:6): [True: 2, False: 0]
  |  Branch (92:31): [True: 2, False: 0]
  |  Branch (92:66): [True: 2, False: 0]
  ------------------
   93|      2|		if (oidc_test_key_derive_cached(cp->secret1, cp->derived_key1) == FALSE)
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (93:7): [True: 0, False: 2]
  ------------------
   94|      0|			return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   95|      2|		cp->derived_key1_set = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
   96|      2|	}
   97|      2|	if ((cp->secret2 != NULL) && (_oidc_strlen(cp->secret2) > 0) && (cp->derived_key2_set == FALSE)) {
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  |  Branch (97:6): [True: 0, False: 2]
  |  Branch (97:31): [True: 0, False: 0]
  |  Branch (97:66): [True: 0, False: 0]
  ------------------
   98|      0|		if (oidc_test_key_derive_cached(cp->secret2, cp->derived_key2) == FALSE)
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  |  Branch (98:7): [True: 0, False: 0]
  ------------------
   99|      0|			return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  100|      0|		cp->derived_key2_set = TRUE;
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
  101|      0|	}
  102|      2|	return TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  103|      2|}
util.c:oidc_test_key_derive_cached:
   66|      2|static apr_byte_t oidc_test_key_derive_cached(const char *secret, unsigned char *out) {
   67|      2|	int i;
   68|      2|	for (i = 0; i < oidc_test_kdf_cache_n; i++) {
  ------------------
  |  Branch (68:14): [True: 0, False: 2]
  ------------------
   69|      0|		if (_oidc_strcmp(oidc_test_kdf_cache[i].secret, secret) == 0) {
  ------------------
  |  Branch (69:7): [True: 0, False: 0]
  ------------------
   70|      0|			_oidc_memcpy(out, oidc_test_kdf_cache[i].key, OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN);
  ------------------
  |  |   85|      0|#define _oidc_memcpy(__dst, __src, __n) memcpy(__dst, __src, __n)
  ------------------
   71|      0|			return TRUE;
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
   72|      0|		}
   73|      0|	}
   74|      2|	if (oidc_util_key_derive_passphrase_key(secret, out, OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN) == FALSE)
  ------------------
  |  |  113|      2|#define OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN 32
  ------------------
              	if (oidc_util_key_derive_passphrase_key(secret, out, OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN) == FALSE)
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (74:6): [True: 0, False: 2]
  ------------------
   75|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   76|      2|	if ((oidc_test_kdf_cache_n < OIDC_TEST_KDF_CACHE_MAX) &&
  ------------------
  |  |   59|      2|#define OIDC_TEST_KDF_CACHE_MAX 32
  ------------------
  |  Branch (76:6): [True: 2, False: 0]
  ------------------
   77|      2|	    (_oidc_strlen(secret) < sizeof(oidc_test_kdf_cache[0].secret))) {
  ------------------
  |  Branch (77:6): [True: 2, False: 0]
  ------------------
   78|      2|		_oidc_strcpy(oidc_test_kdf_cache[oidc_test_kdf_cache_n].secret, secret);
  ------------------
  |  |   86|      2|#define _oidc_strcpy(__dst, __src) strcpy(__dst, __src)
  ------------------
   79|      2|		_oidc_memcpy(oidc_test_kdf_cache[oidc_test_kdf_cache_n].key, out,
  ------------------
  |  |   85|      2|#define _oidc_memcpy(__dst, __src, __n) memcpy(__dst, __src, __n)
  ------------------
   80|      2|			     OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN);
   81|      2|		oidc_test_kdf_cache_n++;
   82|      2|	}
   83|      2|	return TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
   84|      2|}

