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_post_preserve_template_get:
  234|    780|	type oidc_cfg_##member##_get(const oidc_cfg_t *cfg) {                                                          \
  235|    780|		return cfg->member;                                                                                    \
  236|    780|	}

oidc_cfg_dir_preserve_post_get:
  279|  1.56k|	type oidc_cfg_dir_##member##_get(request_rec *r) {                                                             \
  280|  1.56k|		oidc_dir_cfg_t *dir_cfg = ap_get_module_config(r->per_dir_config, &auth_openidc_module);               \
  ------------------
  |  |  551|  1.56k|    (((void **)(v))[(m)->module_index])
  ------------------
  281|  1.56k|		if (dir_cfg->member == unset_val)                                                                      \
  ------------------
  |  Branch (281:7): [True: 0, False: 1.56k]
  ------------------
  282|  1.56k|			return (type)def_val;                                                                          \
  283|  1.56k|		return (type)dir_cfg->member;                                                                          \
  284|  1.56k|	}
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_boolean:
  155|      2|const char *oidc_cfg_parse_boolean(apr_pool_t *pool, const char *arg, int *bool_value) {
  156|      2|	if ((_oidc_strnatcasecmp(arg, "true") == 0) || (_oidc_strnatcasecmp(arg, "on") == 0) ||
  ------------------
  |  Branch (156:6): [True: 0, False: 2]
  |  Branch (156:49): [True: 2, False: 0]
  ------------------
  157|      2|	    (_oidc_strnatcasecmp(arg, "yes") == 0) || (_oidc_strnatcasecmp(arg, "1") == 0)) {
  ------------------
  |  Branch (157:6): [True: 0, False: 0]
  |  Branch (157:48): [True: 0, False: 0]
  ------------------
  158|      2|		*bool_value = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  159|      2|		return NULL;
  160|      2|	}
  161|      0|	if ((_oidc_strnatcasecmp(arg, "false") == 0) || (_oidc_strnatcasecmp(arg, "off") == 0) ||
  ------------------
  |  Branch (161:6): [True: 0, False: 0]
  |  Branch (161:50): [True: 0, False: 0]
  ------------------
  162|      0|	    (_oidc_strnatcasecmp(arg, "no") == 0) || (_oidc_strnatcasecmp(arg, "0") == 0)) {
  ------------------
  |  Branch (162:6): [True: 0, False: 0]
  |  Branch (162:47): [True: 0, False: 0]
  ------------------
  163|      0|		*bool_value = FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  164|      0|		return NULL;
  165|      0|	}
  166|      0|	return apr_psprintf(pool, "oidc_parse_boolean: could not parse boolean value from \"%s\"", arg);
  167|      0|}
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|}
util.c:_oidc_strstr:
  107|    780|static inline char *_oidc_strstr(const char *a, const char *b) {
  108|    780|	return ((a && b) ? (char *)strstr(a, b) : NULL);
  ------------------
  |  Branch (108:11): [True: 780, False: 0]
  |  Branch (108:16): [True: 780, False: 0]
  ------------------
  109|    780|}
mod_auth_openidc.c:_oidc_strcmp:
   98|    780|static inline int _oidc_strcmp(const char *a, const char *b) {
   99|    780|	return ((a && b) ? strcmp(a, b) : -1);
  ------------------
  |  Branch (99:11): [True: 780, False: 0]
  |  Branch (99:16): [True: 780, False: 0]
  ------------------
  100|    780|}
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|      6|static inline int _oidc_strnatcasecmp(const char *a, const char *b) {
  102|      6|	return ((a && b) ? apr_strnatcasecmp(a, b) : -1);
  ------------------
  |  Branch (102:11): [True: 6, False: 0]
  |  Branch (102:16): [True: 6, False: 0]
  ------------------
  103|      6|}
response.c:_oidc_strcmp:
   98|    780|static inline int _oidc_strcmp(const char *a, const char *b) {
   99|    780|	return ((a && b) ? strcmp(a, b) : -1);
  ------------------
  |  Branch (99:11): [True: 780, False: 0]
  |  Branch (99:16): [True: 780, False: 0]
  ------------------
  100|    780|}
html.c:_oidc_strlen:
   90|  4.14M|static inline size_t _oidc_strlen(const char *s) {
   91|  4.14M|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 4.14M, False: 0]
  ------------------
   92|  4.14M|}
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|}
http.c:_oidc_strlen:
   90|  21.6k|static inline size_t _oidc_strlen(const char *s) {
   91|  21.6k|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 21.6k, False: 0]
  ------------------
   92|  21.6k|}

oidc_response_post_preserve_javascript:
  117|    780|						  char **javascript_method) {
  118|       |
  119|    780|	if (oidc_cfg_dir_preserve_post_get(r) == 0)
  ------------------
  |  Branch (119:6): [True: 0, False: 780]
  ------------------
  120|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  121|       |
  122|    780|	oidc_debug(r, "enter");
  ------------------
  |  |  170|    780|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|    780|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    780|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    780|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    780|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    780|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    780|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 780]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    780|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|    780|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  3.12k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 780, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 780, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  3.12k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|    780|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|    780|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    780|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|    780|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    780|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 780]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|       |
  124|    780|	oidc_cfg_t *cfg = ap_get_module_config(r->server->module_config, &auth_openidc_module);
  ------------------
  |  |  551|    780|    (((void **)(v))[(m)->module_index])
  ------------------
  125|       |
  126|    780|	const char *method = oidc_original_request_method(r, cfg, FALSE);
  ------------------
  |  |   51|    780|#define FALSE 0
  ------------------
  127|       |
  128|    780|	if (_oidc_strcmp(method, OIDC_METHOD_FORM_POST) != 0)
  ------------------
  |  |   79|    780|#define OIDC_METHOD_FORM_POST "form_post"
  ------------------
  |  Branch (128:6): [True: 0, False: 780]
  ------------------
  129|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  130|       |
  131|       |	/* read the parameters that are POST-ed to us */
  132|    780|	apr_table_t *params = apr_table_make(r->pool, 8);
  133|    780|	if (oidc_util_read_post_params(r, params, FALSE, NULL) == FALSE) {
  ------------------
  |  |   51|    780|#define FALSE 0
  ------------------
              	if (oidc_util_read_post_params(r, params, FALSE, NULL) == FALSE) {
  ------------------
  |  |   51|    780|#define FALSE 0
  ------------------
  |  Branch (133:6): [True: 0, False: 780]
  ------------------
  134|      0|		oidc_error(r, "something went wrong when reading the POST parameters");
  ------------------
  |  |  173|      0|#define oidc_error(r, fmt, ...) oidc_log(r, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|      0|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|      0|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|      0|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|      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 (196:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|      0|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),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:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  136|      0|	}
  137|       |
  138|       |	/* collect the pairs and join them once: appending to the accumulated string per parameter would make
  139|       |	 * the pool memory used here quadratic in the number of (client-supplied) POST parameters */
  140|    780|	const apr_array_header_t *arr = apr_table_elts(params);
  141|    780|	const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
  142|    780|	apr_array_header_t *pairs = apr_array_make(r->pool, arr->nelts, sizeof(const char *));
  143|  4.27k|	for (int i = 0; i < arr->nelts; i++) {
  ------------------
  |  Branch (143:18): [True: 3.49k, False: 780]
  ------------------
  144|  3.49k|		APR_ARRAY_PUSH(pairs, const char *) = apr_psprintf(
  ------------------
  |  |  150|  3.49k|#define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
  ------------------
  145|  3.49k|		    r->pool, "'%s': '%s'", oidc_http_url_encode(r, elts[i].key), oidc_http_url_encode(r, elts[i].val));
  146|  3.49k|	}
  147|    780|	char *json = apr_psprintf(r->pool, "{ %s }", apr_array_pstrcat(r->pool, pairs, OIDC_CHAR_COMMA));
  ------------------
  |  |  191|    780|#define OIDC_CHAR_COMMA ','
  ------------------
  148|       |
  149|    780|	if ((oidc_cfg_post_preserve_template_get(cfg) != NULL) &&
  ------------------
  |  Branch (149:6): [True: 0, False: 780]
  ------------------
  150|      0|	    (oidc_util_html_send_in_template(
  ------------------
  |  Branch (150:6): [True: 0, False: 0]
  ------------------
  151|      0|		 r, oidc_cfg_post_preserve_template_get(cfg), &_oidc_response_post_preserve_template_contents, json,
  152|      0|		 OIDC_POST_PRESERVE_ESCAPE_NONE, location, OIDC_POST_PRESERVE_ESCAPE_JAVASCRIPT) == OK))
  ------------------
  |  |  456|      0|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  153|      0|		return TRUE;
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
  154|       |
  155|    780|	const char *jmethod = "preserveOnLoad()";
  156|    780|	const char *jscript = apr_psprintf(
  157|    780|	    r->pool,
  158|    780|	    "    <script type=\"text/javascript\">\n"
  159|    780|	    "      function %s {\n"
  160|    780|	    "        sessionStorage.setItem('mod_auth_openidc_preserve_post_params', JSON.stringify(%s));\n"
  161|    780|	    "        %s"
  162|    780|	    "      }\n"
  163|    780|	    "    </script>\n",
  164|    780|	    jmethod, json,
  165|    780|	    location
  ------------------
  |  Branch (165:6): [True: 131, False: 649]
  ------------------
  166|    780|		? apr_psprintf(r->pool, "window.location='%s';\n", oidc_util_html_javascript_escape(r->pool, location))
  167|    780|		: "");
  168|       |
  169|    780|	if (javascript_method)
  ------------------
  |  Branch (169:6): [True: 780, False: 0]
  ------------------
  170|    780|		*javascript_method = apr_pstrdup(r->pool, jmethod);
  171|    780|	if (javascript)
  ------------------
  |  Branch (171:6): [True: 780, False: 0]
  ------------------
  172|    780|		*javascript = apr_pstrdup(r->pool, jscript);
  173|       |
  174|    780|	return TRUE;
  ------------------
  |  |   55|    780|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|    780|#define FALSE 0
  |  |  ------------------
  ------------------
  175|    780|}

oidc_http_url_encode:
   72|  6.99k|char *oidc_http_url_encode(const request_rec *r, const char *str) {
   73|  6.99k|	static const char hex[] = "0123456789ABCDEF";
   74|  6.99k|	char *rv = NULL;
   75|  6.99k|	char *p = NULL;
   76|  6.99k|	size_t len = 0;
   77|       |
   78|  6.99k|	if (str == NULL)
  ------------------
  |  Branch (78:6): [True: 0, False: 6.99k]
  ------------------
   79|      0|		return "";
   80|       |
   81|  6.99k|	len = _oidc_strlen(str);
   82|       |
   83|       |	/* worst case each input byte expands to a 3-byte %XX sequence */
   84|  6.99k|	rv = apr_palloc(r->pool, len * 3 + 1);
   85|  6.99k|	p = rv;
   86|  24.3M|	for (size_t i = 0; i < len; i++) {
  ------------------
  |  Branch (86:21): [True: 24.3M, False: 6.99k]
  ------------------
   87|  24.3M|		const unsigned char c = (unsigned char)str[i];
   88|  24.3M|		if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')) ||
  ------------------
  |  Branch (88:8): [True: 24.0M, False: 290k]
  |  Branch (88:22): [True: 1.30k, False: 24.0M]
  |  Branch (88:38): [True: 24.0M, False: 291k]
  |  Branch (88:52): [True: 1.21M, False: 22.8M]
  |  Branch (88:68): [True: 23.1M, False: 13.6k]
  |  Branch (88:82): [True: 4.74k, False: 23.1M]
  ------------------
   89|  23.1M|		    (c == '-') || (c == '.') || (c == '_') || (c == '~')) {
  ------------------
  |  Branch (89:7): [True: 1.13k, False: 23.1M]
  |  Branch (89:21): [True: 1.00k, False: 23.1M]
  |  Branch (89:35): [True: 473, False: 23.1M]
  |  Branch (89:49): [True: 515, False: 23.1M]
  ------------------
   90|  1.22M|			*p++ = (char)c;
   91|  23.1M|		} else {
   92|  23.1M|			*p++ = '%';
   93|  23.1M|			*p++ = hex[c >> 4];
   94|  23.1M|			*p++ = hex[c & 0x0f];
   95|  23.1M|		}
   96|  24.3M|	}
   97|  6.99k|	*p = '\0';
   98|       |
   99|  6.99k|	return rv;
  100|  6.99k|}
oidc_http_url_decode:
  117|  14.6k|char *oidc_http_url_decode(const request_rec *r, const char *str) {
  118|  14.6k|	char *rv = NULL;
  119|  14.6k|	char *p = NULL;
  120|  14.6k|	size_t i = 0;
  121|  14.6k|	size_t len = 0;
  122|       |
  123|  14.6k|	if (str == NULL)
  ------------------
  |  Branch (123:6): [True: 0, False: 14.6k]
  ------------------
  124|      0|		return "";
  125|       |
  126|  14.6k|	len = _oidc_strlen(str);
  127|       |
  128|  14.6k|	rv = apr_palloc(r->pool, len + 1);
  129|  14.6k|	p = rv;
  130|  24.8M|	while (i < len) {
  ------------------
  |  Branch (130:9): [True: 24.8M, False: 14.6k]
  ------------------
  131|  24.8M|		const char c = str[i];
  132|  24.8M|		if (c == '+') {
  ------------------
  |  Branch (132:7): [True: 410, False: 24.8M]
  ------------------
  133|    410|			*p++ = ' ';
  134|    410|			i++;
  135|  24.8M|		} else if (c == '%') {
  ------------------
  |  Branch (135:14): [True: 10.4k, False: 24.8M]
  ------------------
  136|       |			/* str[i + 1] is within bounds (at worst the NUL terminator); str[i + 2] is only
  137|       |			 * read when str[i + 1] is a hex digit and thus not the terminator */
  138|  10.4k|			const int hi = oidc_http_url_decode_hex_digit(str[i + 1]);
  139|  10.4k|			const int lo = (hi >= 0) ? oidc_http_url_decode_hex_digit(str[i + 2]) : -1;
  ------------------
  |  Branch (139:19): [True: 6.54k, False: 3.90k]
  ------------------
  140|  10.4k|			if (lo >= 0) {
  ------------------
  |  Branch (140:8): [True: 1.13k, False: 9.31k]
  ------------------
  141|  1.13k|				*p++ = (char)((hi << 4) | lo);
  142|  1.13k|				i += 3;
  143|  9.31k|			} else {
  144|  9.31k|				*p++ = c;
  145|  9.31k|				i++;
  146|  9.31k|			}
  147|  24.8M|		} else {
  148|  24.8M|			*p++ = c;
  149|  24.8M|			i++;
  150|  24.8M|		}
  151|  24.8M|	}
  152|  14.6k|	*p = '\0';
  153|       |
  154|  14.6k|	return rv;
  155|  14.6k|}
oidc_http_hdr_in_content_type_get:
  314|  1.56k|const char *oidc_http_hdr_in_content_type_get(const request_rec *r) {
  315|  1.56k|	return oidc_http_hdr_in_get(r, OIDC_HTTP_HDR_CONTENT_TYPE);
  ------------------
  |  |   70|  1.56k|#define OIDC_HTTP_HDR_CONTENT_TYPE "Content-Type"
  ------------------
  316|  1.56k|}
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|}
http.c:oidc_http_url_decode_hex_digit:
  102|  17.0k|static int oidc_http_url_decode_hex_digit(const char c) {
  103|  17.0k|	if ((c >= '0') && (c <= '9'))
  ------------------
  |  Branch (103:6): [True: 9.49k, False: 7.50k]
  |  Branch (103:20): [True: 5.15k, False: 4.34k]
  ------------------
  104|  5.15k|		return c - '0';
  105|  11.8k|	if ((c >= 'A') && (c <= 'F'))
  ------------------
  |  Branch (105:6): [True: 4.00k, False: 7.84k]
  |  Branch (105:20): [True: 970, False: 3.03k]
  ------------------
  106|    970|		return c - 'A' + 10;
  107|  10.8k|	if ((c >= 'a') && (c <= 'f'))
  ------------------
  |  Branch (107:6): [True: 2.88k, False: 7.98k]
  |  Branch (107:20): [True: 1.56k, False: 1.32k]
  ------------------
  108|  1.56k|		return c - 'a' + 10;
  109|  9.31k|	return -1;
  110|  10.8k|}
http.c:oidc_http_hdr_in_get:
  160|  1.56k|static const char *oidc_http_hdr_in_get(const request_rec *r, const char *name) {
  161|  1.56k|	const char *value = apr_table_get(r->headers_in, name);
  162|  1.56k|	if (value)
  ------------------
  |  Branch (162:6): [True: 1.56k, False: 0]
  ------------------
  163|       |		oidc_debug(r, "%s=%s", name, value);
  ------------------
  |  |  170|  1.56k|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  1.56k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|  1.56k|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|  1.56k|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|  1.56k|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  1.56k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|  1.56k|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|  1.56k|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|  1.56k|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  6.24k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 1.56k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 1.56k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  6.24k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|  1.56k|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 1.56k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|  1.56k|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  1.56k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  1.56k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|  1.56k|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 1.56k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  1.56k|	return value;
  165|  1.56k|}

oidc_original_request_method:
  311|    780|const char *oidc_original_request_method(request_rec *r, oidc_cfg_t *cfg, apr_byte_t handle_discovery_response) {
  312|    780|	const char *method = OIDC_METHOD_GET;
  ------------------
  |  |   78|    780|#define OIDC_METHOD_GET "get"
  ------------------
  313|       |
  314|    780|	char *m = NULL;
  315|    780|	if ((handle_discovery_response == TRUE) && (oidc_util_url_matches_redirect_uri(r, cfg)) &&
  ------------------
  |  |   55|    780|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|    780|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (315:6): [True: 0, False: 780]
  |  Branch (315:45): [True: 0, False: 0]
  ------------------
  316|      0|	    (oidc_is_discovery_response(r, cfg))) {
  ------------------
  |  Branch (316:6): [True: 0, False: 0]
  ------------------
  317|      0|		oidc_util_url_parameter_get(r, OIDC_DISC_RM_PARAM, &m);
  ------------------
  |  |   56|      0|#define OIDC_DISC_RM_PARAM "method"
  ------------------
  318|      0|		if (m != NULL)
  ------------------
  |  Branch (318:7): [True: 0, False: 0]
  ------------------
  319|      0|			method = apr_pstrdup(r->pool, m);
  320|    780|	} else {
  321|       |
  322|       |		/*
  323|       |		 * if POST preserve is not enabled for this location, there's no point in preserving
  324|       |		 * the method either which would result in POSTing empty data on return;
  325|       |		 * so we revert to legacy behavior
  326|       |		 */
  327|    780|		if (oidc_cfg_dir_preserve_post_get(r) == 0)
  ------------------
  |  Branch (327:7): [True: 0, False: 780]
  ------------------
  328|      0|			return OIDC_METHOD_GET;
  ------------------
  |  |   78|      0|#define OIDC_METHOD_GET "get"
  ------------------
  329|       |
  330|    780|		const char *content_type = oidc_http_hdr_in_content_type_get(r);
  331|    780|		if ((r->method_number == M_POST) && (content_type != NULL) &&
  ------------------
  |  |  594|    780|#define M_POST                  2
  ------------------
  |  Branch (331:7): [True: 780, False: 0]
  |  Branch (331:39): [True: 780, False: 0]
  ------------------
  332|    780|		    (_oidc_strcmp(content_type, OIDC_HTTP_CONTENT_TYPE_FORM_ENCODED) == 0))
  ------------------
  |  |   59|    780|#define OIDC_HTTP_CONTENT_TYPE_FORM_ENCODED "application/x-www-form-urlencoded"
  ------------------
  |  Branch (332:7): [True: 780, False: 0]
  ------------------
  333|    780|			method = OIDC_METHOD_FORM_POST;
  ------------------
  |  |   79|    780|#define OIDC_METHOD_FORM_POST "form_post"
  ------------------
  334|    780|	}
  335|       |
  336|    780|	oidc_debug(r, "return: %s", method);
  ------------------
  |  |  170|    780|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|    780|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    780|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    780|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    780|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    780|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    780|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 780]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    780|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|    780|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  3.12k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 780, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 780, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  3.12k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|    780|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|    780|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    780|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|    780|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    780|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 780]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  337|       |
  338|    780|	return method;
  339|    780|}

oidc_util_html_javascript_escape:
  139|    131|char *oidc_util_html_javascript_escape(apr_pool_t *pool, const char *s) {
  140|    131|	if (s == NULL)
  ------------------
  |  Branch (140:6): [True: 0, False: 131]
  ------------------
  141|      0|		return NULL;
  142|    131|	return oidc_util_html_escape_with(pool, s, oidc_util_html_javascript_escape_char);
  143|    131|}
html.c:oidc_util_html_escape_with:
   73|    131|static char *oidc_util_html_escape_with(apr_pool_t *pool, const char *s, const char *(*escape_char)(char)) {
   74|    131|	const char *cp = NULL;
   75|    131|	size_t outputlen = 0;
   76|    131|	size_t i = 0;
   77|       |
   78|       |	/* first pass: compute the length of the escaped output */
   79|  3.32M|	for (cp = s; *cp; cp++) {
  ------------------
  |  Branch (79:15): [True: 3.32M, False: 131]
  ------------------
   80|  3.32M|		const char *esc = escape_char(*cp);
   81|  3.32M|		outputlen += esc ? _oidc_strlen(esc) : 1;
  ------------------
  |  Branch (81:16): [True: 2.07M, False: 1.24M]
  ------------------
   82|  3.32M|	}
   83|       |
   84|       |	/* second pass: write the escaped output, preserving the bounds-checked write idiom */
   85|    131|	char *output = apr_pcalloc(pool, outputlen + 1);
  ------------------
  |  |  465|    131|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
   86|  3.32M|	for (cp = s; *cp; cp++) {
  ------------------
  |  Branch (86:15): [True: 3.32M, False: 131]
  ------------------
   87|  3.32M|		const char *esc = escape_char(*cp);
   88|  3.32M|		if (esc == NULL) {
  ------------------
  |  Branch (88:7): [True: 1.24M, False: 2.07M]
  ------------------
   89|  1.24M|			if (i + 1 <= outputlen)
  ------------------
  |  Branch (89:8): [True: 1.24M, False: 0]
  ------------------
   90|  1.24M|				output[i] = *cp;
   91|  1.24M|			i += 1;
   92|  1.24M|			continue;
   93|  1.24M|		}
   94|  2.07M|		size_t n = _oidc_strlen(esc);
   95|  2.07M|		if (i + n <= outputlen)
  ------------------
  |  Branch (95:7): [True: 2.07M, False: 0]
  ------------------
   96|  2.07M|			(void)_oidc_strcpy(&output[i], esc);
  ------------------
  |  |   86|  2.07M|#define _oidc_strcpy(__dst, __src) strcpy(__dst, __src)
  ------------------
   97|  2.07M|		i += n;
   98|  2.07M|	}
   99|    131|	output[i] = '\0';
  100|    131|	return output;
  101|    131|}
html.c:oidc_util_html_javascript_escape_char:
  113|  6.64M|static const char *oidc_util_html_javascript_escape_char(char c) {
  114|  6.64M|	switch (c) {
  115|    214|	case '\'':
  ------------------
  |  Branch (115:2): [True: 214, False: 6.64M]
  ------------------
  116|    214|		return "\\'";
  117|    224|	case '"':
  ------------------
  |  Branch (117:2): [True: 224, False: 6.64M]
  ------------------
  118|    224|		return "\\\"";
  119|    466|	case '\\':
  ------------------
  |  Branch (119:2): [True: 466, False: 6.64M]
  ------------------
  120|    466|		return "\\\\";
  121|    232|	case '/':
  ------------------
  |  Branch (121:2): [True: 232, False: 6.64M]
  ------------------
  122|    232|		return "\\/";
  123|    456|	case 0x0D:
  ------------------
  |  Branch (123:2): [True: 456, False: 6.64M]
  ------------------
  124|    456|		return "\\r";
  125|      0|	case 0x0A:
  ------------------
  |  Branch (125:2): [True: 0, False: 6.64M]
  ------------------
  126|      0|		return "\\n";
  127|  3.92M|	case '<':
  ------------------
  |  Branch (127:2): [True: 3.92M, False: 2.71M]
  ------------------
  128|  3.92M|		return "\\x3c";
  129|   220k|	case '>':
  ------------------
  |  Branch (129:2): [True: 220k, False: 6.42M]
  ------------------
  130|   220k|		return "\\x3e";
  131|  2.49M|	default:
  ------------------
  |  Branch (131:2): [True: 2.49M, False: 4.14M]
  ------------------
  132|       |		return NULL;
  133|  6.64M|	}
  134|  6.64M|}

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|}

oidc_util_read_post_params:
  334|    780|				      const char *strip_param_name) {
  335|       |	return oidc_util_read_post_params_impl(r, table, propagate, strip_param_name, NULL);
  336|    780|}
util.c:oidc_util_read_form_encoded_params_impl:
  247|    780|							  const char *const *no_repeat) {
  248|    780|	const char *key = NULL;
  249|    780|	const char *val = NULL;
  250|    780|	const char *p = data;
  251|       |
  252|  8.10k|	while (p && (*p)) {
  ------------------
  |  Branch (252:9): [True: 8.10k, False: 0]
  |  Branch (252:14): [True: 7.32k, False: 780]
  ------------------
  253|  7.32k|		val = ap_getword(r->pool, &p, OIDC_CHAR_AMP);
  ------------------
  |  |  197|  7.32k|#define OIDC_CHAR_AMP '&'
  ------------------
  254|  7.32k|		if (val == NULL)
  ------------------
  |  Branch (254:7): [True: 0, False: 7.32k]
  ------------------
  255|      0|			break;
  256|  7.32k|		key = ap_getword(r->pool, &val, OIDC_CHAR_EQUAL);
  ------------------
  |  |  187|  7.32k|#define OIDC_CHAR_EQUAL '='
  ------------------
  257|  7.32k|		key = oidc_http_url_decode(r, key);
  258|  7.32k|		val = oidc_http_url_decode(r, val);
  259|  7.32k|		if (oidc_util_param_must_not_repeat(no_repeat, key) && (apr_table_get(table, key) != NULL)) {
  ------------------
  |  Branch (259:7): [True: 0, False: 7.32k]
  |  Branch (259:58): [True: 0, False: 0]
  ------------------
  260|      0|			oidc_error(r, "duplicate \"%s\" parameter is not allowed", key);
  ------------------
  |  |  173|      0|#define oidc_error(r, fmt, ...) oidc_log(r, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|      0|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|      0|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|      0|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|      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 (196:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|      0|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),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:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|      0|			return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  262|      0|		}
  263|       |		/* this parses the front-channel authorization response and the back-channel logout
  264|       |		 * request, so the values include the authorization code and bare tokens */
  265|  7.32k|		oidc_debug(r, "read: %s=%s", key, oidc_http_param_is_sensitive(key) ? "***" : val);
  ------------------
  |  |  170|  7.32k|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  7.32k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|  7.32k|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|  7.32k|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|  7.32k|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  7.32k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|  7.32k|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|  7.32k|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|  7.32k|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  29.2k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 7.32k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 7.32k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  29.2k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|  7.32k|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 7.32k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|  7.32k|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  7.32k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  7.32k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (451:63): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|  7.32k|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 7.32k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|  7.32k|		apr_table_set(table, key, val);
  267|  7.32k|	}
  268|       |
  269|    780|	oidc_debug(r, "parsed: %d bytes into %d elements", data ? (int)_oidc_strlen(data) : 0,
  ------------------
  |  |  170|    780|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|    780|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    780|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    780|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    780|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    780|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    780|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 780]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    780|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|    780|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  3.12k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 780, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 780, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  3.12k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|    780|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 780]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|    780|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    780|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|    780|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (451:63): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    780|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 780]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|    780|		   apr_table_elts(table)->nelts);
  271|       |
  272|    780|	return TRUE;
  ------------------
  |  |   55|    780|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|    780|#define FALSE 0
  |  |  ------------------
  ------------------
  273|    780|}
util.c:oidc_util_param_must_not_repeat:
  236|  7.32k|static apr_byte_t oidc_util_param_must_not_repeat(const char *const *no_repeat, const char *key) {
  237|  7.32k|	if (no_repeat == NULL)
  ------------------
  |  Branch (237:6): [True: 7.32k, False: 0]
  ------------------
  238|  7.32k|		return FALSE;
  ------------------
  |  |   51|  7.32k|#define FALSE 0
  ------------------
  239|      0|	for (const char *const *n = no_repeat; *n != NULL; n++)
  ------------------
  |  Branch (239:41): [True: 0, False: 0]
  ------------------
  240|      0|		if (_oidc_strcmp(*n, key) == 0)
  ------------------
  |  Branch (240:7): [True: 0, False: 0]
  ------------------
  241|      0|			return TRUE;
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
  242|      0|	return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  243|      0|}
util.c:oidc_util_read_post_params_impl:
  298|    780|						  const char *strip_param_name, const char *const *no_repeat) {
  299|    780|	apr_byte_t rc = FALSE;
  ------------------
  |  |   51|    780|#define FALSE 0
  ------------------
  300|    780|	char *data = NULL;
  301|    780|	const apr_array_header_t *arr = NULL;
  302|    780|	const apr_table_entry_t *elts = NULL;
  303|    780|	const char *content_type = NULL;
  304|       |
  305|    780|	content_type = oidc_http_hdr_in_content_type_get(r);
  306|    780|	if ((r->method_number != M_POST) || (content_type == NULL) ||
  ------------------
  |  |  594|    780|#define M_POST                  2
  ------------------
  |  Branch (306:6): [True: 0, False: 780]
  |  Branch (306:38): [True: 0, False: 780]
  ------------------
  307|    780|	    (_oidc_strstr(content_type, OIDC_HTTP_CONTENT_TYPE_FORM_ENCODED) != content_type)) {
  ------------------
  |  |   59|    780|#define OIDC_HTTP_CONTENT_TYPE_FORM_ENCODED "application/x-www-form-urlencoded"
  ------------------
  |  Branch (307:6): [True: 0, False: 780]
  ------------------
  308|      0|		oidc_debug(r, "required content-type %s not found", OIDC_HTTP_CONTENT_TYPE_FORM_ENCODED);
  ------------------
  |  |  170|      0|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|      0|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|      0|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|      0|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|      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 (196:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|      0|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),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:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      0|		goto end;
  310|      0|	}
  311|       |
  312|    780|	if (oidc_util_read(r, &data) != TRUE)
  ------------------
  |  |   55|    780|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|    780|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (312:6): [True: 0, False: 780]
  ------------------
  313|      0|		goto end;
  314|       |
  315|    780|	rc = oidc_util_read_form_encoded_params_impl(r, table, data, no_repeat);
  316|    780|	if (rc != TRUE)
  ------------------
  |  |   55|    780|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|    780|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (316:6): [True: 0, False: 780]
  ------------------
  317|      0|		goto end;
  318|       |
  319|    780|	if (propagate == FALSE)
  ------------------
  |  |   51|    780|#define FALSE 0
  ------------------
  |  Branch (319:6): [True: 780, False: 0]
  ------------------
  320|    780|		goto end;
  321|       |
  322|      0|	arr = apr_table_elts(table);
  323|      0|	elts = (const apr_table_entry_t *)arr->elts;
  324|      0|	for (int i = 0; i < arr->nelts; i++)
  ------------------
  |  Branch (324:18): [True: 0, False: 0]
  ------------------
  325|      0|		if (_oidc_strcmp(elts[i].key, strip_param_name) != 0)
  ------------------
  |  Branch (325:7): [True: 0, False: 0]
  ------------------
  326|      0|			oidc_util_userdata_set_post_param(r, elts[i].key, elts[i].val);
  327|       |
  328|    780|end:
  329|       |
  330|    780|	return rc;
  331|      0|}
util.c:oidc_util_read:
  191|    780|static apr_byte_t oidc_util_read(request_rec *r, char **rbuf) {
  192|    780|	apr_size_t bytes_read;
  193|    780|	apr_size_t bytes_left;
  194|    780|	apr_size_t len;
  195|    780|	long read_length;
  196|       |
  197|    780|	if (ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK) != OK)
  ------------------
  |  |  750|    780|#define REQUEST_CHUNKED_DECHUNK  2
  ------------------
              	if (ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK) != OK)
  ------------------
  |  |  456|    780|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (197:6): [True: 0, False: 780]
  ------------------
  198|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  199|       |
  200|    780|	len = ap_should_client_block(r) ? r->remaining : 0;
  ------------------
  |  Branch (200:8): [True: 780, False: 0]
  ------------------
  201|       |
  202|    780|	if (len > OIDC_MAX_POST_DATA_LEN) {
  ------------------
  |  |  186|    780|#define OIDC_MAX_POST_DATA_LEN (1024 * 1024)
  ------------------
  |  Branch (202:6): [True: 0, False: 780]
  ------------------
  203|      0|		oidc_error(r, "POST parameter value is too large: %lu bytes (max=%d)", (unsigned long)len,
  ------------------
  |  |  173|      0|#define oidc_error(r, fmt, ...) oidc_log(r, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|      0|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|      0|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|      0|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|      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 (196:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|      0|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),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:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|      0|			   OIDC_MAX_POST_DATA_LEN);
  205|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  206|      0|	}
  207|       |
  208|    780|	*rbuf = (char *)apr_palloc(r->pool, len + 1);
  209|    780|	if (*rbuf == NULL) {
  ------------------
  |  Branch (209:6): [True: 0, False: 780]
  ------------------
  210|      0|		oidc_error(r, "could not allocate memory for %lu bytes of POST data.", (unsigned long)len);
  ------------------
  |  |  173|      0|#define oidc_error(r, fmt, ...) oidc_log(r, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|      0|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|      0|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|      0|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|      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 (196:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|      0|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),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:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  212|      0|	}
  213|    780|	(*rbuf)[len] = '\0';
  214|       |
  215|    780|	bytes_read = 0;
  216|    780|	bytes_left = len;
  217|  1.44k|	while (bytes_left > 0) {
  ------------------
  |  Branch (217:9): [True: 664, False: 780]
  ------------------
  218|    664|		read_length = ap_get_client_block(r, &(*rbuf)[bytes_read], bytes_left);
  219|    664|		if (read_length == 0) {
  ------------------
  |  Branch (219:7): [True: 0, False: 664]
  ------------------
  220|      0|			(*rbuf)[bytes_read] = '\0';
  221|      0|			break;
  222|    664|		} else if (read_length < 0) {
  ------------------
  |  Branch (222:14): [True: 0, False: 664]
  ------------------
  223|      0|			oidc_error(r, "failed to read POST data from client");
  ------------------
  |  |  173|      0|#define oidc_error(r, fmt, ...) oidc_log(r, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|      0|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|      0|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|      0|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|      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 (196:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|      0|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),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:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      0|			return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  225|      0|		}
  226|    664|		bytes_read += read_length;
  227|    664|		bytes_left -= read_length;
  228|    664|	}
  229|       |
  230|    780|	return TRUE;
  ------------------
  |  |   55|    780|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|    780|#define FALSE 0
  |  |  ------------------
  ------------------
  231|    780|}

fuzz_post_preserve.c:fuzz_strndup:
   43|    780|static inline char *fuzz_strndup(apr_pool_t *pool, const uint8_t *data, size_t size) {
   44|    780|	char *s = apr_palloc(pool, size + 1);
   45|    780|	if (size > 0)
  ------------------
  |  Branch (45:6): [True: 780, False: 0]
  ------------------
   46|    780|		memcpy(s, data, size);
   47|    780|	s[size] = '\0';
   48|    780|	return s;
   49|    780|}

LLVMFuzzerInitialize:
   43|      2|int LLVMFuzzerInitialize(int *argc, char ***argv) {
   44|      2|	(void)argc;
   45|      2|	(void)argv;
   46|      2|	if (!g_ready) {
  ------------------
  |  Branch (46:6): [True: 2, False: 0]
  ------------------
   47|      2|		oidc_test_setup();
   48|       |		/* OIDCPreservePost On for the fixture's location: off, the function returns before it
   49|       |		 * reads a single byte of the body */
   50|      2|		request_rec *r = oidc_test_request_get();
   51|      2|		oidc_dir_cfg_t *dir_cfg = ap_get_module_config(r->per_dir_config, &auth_openidc_module);
  ------------------
  |  |  551|      2|    (((void **)(v))[(m)->module_index])
  ------------------
   52|      2|		oidc_cmd_dir_preserve_post_set(oidc_test_cmd_get(OIDCPreservePost), dir_cfg, "On");
  ------------------
  |  |  186|      2|#define OIDCPreservePost "OIDCPreservePost"
  ------------------
   53|      2|		g_ready = 1;
   54|      2|	}
   55|      2|	return 0;
   56|      2|}
LLVMFuzzerTestOneInput:
   58|    780|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   59|    780|	if (!g_ready)
  ------------------
  |  Branch (59:6): [True: 0, False: 780]
  ------------------
   60|      0|		LLVMFuzzerInitialize(NULL, NULL);
   61|       |
   62|    780|	apr_pool_t *pool = NULL;
   63|    780|	apr_pool_create(&pool, oidc_test_pool_get());
  ------------------
  |  |  323|    780|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
   64|       |
   65|       |	/* shallow copy of the fixture request with a per-input pool and its own headers_in */
   66|    780|	request_rec r = *oidc_test_request_get();
   67|    780|	r.pool = pool;
   68|    780|	r.headers_in = apr_table_copy(pool, r.headers_in);
   69|       |
   70|    780|	char *input = fuzz_strndup(pool, data, size);
   71|    780|	char *body = "";
   72|    780|	char *nl = strchr(input, '\n');
   73|    780|	if (nl != NULL) {
  ------------------
  |  Branch (73:6): [True: 665, False: 115]
  ------------------
   74|    665|		*nl = '\0';
   75|    665|		body = nl + 1;
   76|    665|	}
   77|    780|	const char *location = (input[0] != '\0') ? input : NULL;
  ------------------
  |  Branch (77:25): [True: 131, False: 649]
  ------------------
   78|       |
   79|       |	/* a form POST, the only shape the function preserves; the test stubs serve the body
   80|       |	 * out of r->args */
   81|    780|	r.method_number = M_POST;
  ------------------
  |  |  594|    780|#define M_POST                  2
  ------------------
   82|    780|	r.method = "POST";
   83|    780|	apr_table_set(r.headers_in, "Content-Type", "application/x-www-form-urlencoded");
   84|    780|	r.args = body;
   85|    780|	r.remaining = (apr_off_t)strlen(body);
   86|       |
   87|    780|	char *javascript = NULL;
   88|    780|	char *javascript_method = NULL;
   89|    780|	oidc_response_post_preserve_javascript(&r, location, &javascript, &javascript_method);
   90|       |
   91|    780|	apr_pool_destroy(pool);
   92|    780|	return 0;
   93|    780|}

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|}
ap_get_client_block:
   75|    664|AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz) {
   76|       |	/* tests stash the POST body in r->args (and r->remaining tracks bytes left); copy
   77|       |	 * from there into the caller's buffer so oidc_util_read can drive the form parser */
   78|    664|	if (r->args == NULL || r->remaining == 0)
  ------------------
  |  Branch (78:6): [True: 0, False: 664]
  |  Branch (78:25): [True: 0, False: 664]
  ------------------
   79|      0|		return 0;
   80|       |	/* r->remaining is signed (apr_off_t) and is only ever positive here, but compare and
   81|       |	 * assign in one type so the narrowing is explicit rather than a signedness surprise */
   82|    664|	apr_size_t remaining = (apr_size_t)r->remaining;
   83|    664|	apr_size_t off = strlen(r->args) - remaining;
   84|    664|	apr_size_t n = (bufsiz < remaining) ? bufsiz : remaining;
  ------------------
  |  Branch (84:17): [True: 0, False: 664]
  ------------------
   85|    664|	memcpy(buffer, r->args + off, n);
   86|    664|	r->remaining -= n;
   87|    664|	return (long)n;
   88|    664|}
ap_getword:
   90|  14.6k|AP_DECLARE(char *) ap_getword(apr_pool_t *atrans, const char **line, char stop) {
   91|  14.6k|	const char *pos = *line;
   92|  14.6k|	int len;
   93|  14.6k|	char *res;
   94|       |
   95|  41.5M|	while ((*pos != stop) && *pos) {
  ------------------
  |  Branch (95:9): [True: 41.5M, False: 8.32k]
  |  Branch (95:27): [True: 41.5M, False: 6.31k]
  ------------------
   96|  41.5M|		++pos;
   97|  41.5M|	}
   98|       |
   99|  14.6k|	len = (int)(pos - *line);
  100|  14.6k|	res = apr_pstrmemdup(atrans, *line, len);
  101|       |
  102|  14.6k|	if (stop) {
  ------------------
  |  Branch (102:6): [True: 14.6k, False: 0]
  ------------------
  103|  23.8k|		while (*pos == stop) {
  ------------------
  |  Branch (103:10): [True: 9.18k, False: 14.6k]
  ------------------
  104|  9.18k|			++pos;
  105|  9.18k|		}
  106|  14.6k|	}
  107|  14.6k|	*line = pos;
  108|       |
  109|  14.6k|	return res;
  110|  14.6k|}
ap_setup_client_block:
  362|    780|AP_DECLARE(int) ap_setup_client_block(request_rec *r, int read_policy) {
  363|    780|	return 0;
  364|    780|}
ap_should_client_block:
  366|    780|AP_DECLARE(int) ap_should_client_block(request_rec *r) {
  367|    780|	return 1;
  368|    780|}

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|    780|apr_pool_t *oidc_test_pool_get(void) {
  224|    780|	return pool;
  225|    780|}
oidc_test_request_get:
  227|    784|request_rec *oidc_test_request_get(void) {
  228|    784|	return request;
  229|    784|}
oidc_test_cmd_get:
  235|      2|cmd_parms *oidc_test_cmd_get(const char *primitive) {
  236|      2|	request_rec *r = oidc_test_request_get();
  237|      2|	cmd_parms *cmd = apr_pcalloc(r->pool, sizeof(cmd_parms));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  238|      2|	cmd->server = r->server;
  239|      2|	cmd->pool = r->pool;
  240|      2|	cmd->temp_pool = r->pool;
  241|      2|	cmd->directive = apr_pcalloc(cmd->pool, sizeof(ap_directive_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  242|      2|	cmd->directive->directive = primitive;
  243|      2|	return cmd;
  244|      2|}
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|}

