@@ -337,11 +337,22 @@ static inline int oidc_metrics_get_env_int(const char *name, int dval) {
337
337
338
338
#define OIDC_METRICS_CACHE_JSON_MAX_ENV_VAR "OIDC_METRICS_CACHE_JSON_MAX"
339
339
340
+ static apr_size_t _oidc_metrics_shm_size = 0 ;
341
+
340
342
/*
341
343
* get the size of the to-be-allocated shared memory segment
342
344
*/
343
- static inline int oidc_metrics_shm_size (server_rec * s ) {
344
- return oidc_metrics_get_env_int (OIDC_METRICS_CACHE_JSON_MAX_ENV_VAR , OIDC_METRICS_CACHE_JSON_MAX_DEFAULT );
345
+ static inline apr_size_t oidc_metrics_shm_size (server_rec * s ) {
346
+ if (_oidc_metrics_shm_size == 0 ) {
347
+ int n =
348
+ oidc_metrics_get_env_int (OIDC_METRICS_CACHE_JSON_MAX_ENV_VAR , OIDC_METRICS_CACHE_JSON_MAX_DEFAULT );
349
+ if ((n < 1 ) || (n > 1024 * 256 * 4 * 100 )) {
350
+ oidc_serror (s , "environment value %s out of bounds, fallback to default" ,
351
+ OIDC_METRICS_CACHE_JSON_MAX_ENV_VAR );
352
+ _oidc_metrics_shm_size = OIDC_METRICS_CACHE_JSON_MAX_DEFAULT ;
353
+ }
354
+ }
355
+ return _oidc_metrics_shm_size ;
345
356
}
346
357
347
358
/*
@@ -354,7 +365,7 @@ static inline void oidc_metrics_storage_set(server_rec *s, const char *value) {
354
365
if (n > oidc_metrics_shm_size (s ))
355
366
oidc_serror (s ,
356
367
"json value too large: set or increase system environment variable %s to a value "
357
- "larger than %d" ,
368
+ "larger than %" APR_SIZE_T_FMT ,
358
369
OIDC_METRICS_CACHE_JSON_MAX_ENV_VAR , oidc_metrics_shm_size (s ));
359
370
else
360
371
_oidc_memcpy (p , value , n );
0 commit comments