From c195cb021ead7de765a0b37f5ab793802be46731 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Fri, 7 Jun 2024 14:05:47 -0400 Subject: track valid exception flags when calling fegetexceptflag() and check when calling fesetexceptflag() --- src/fenv/fegetexceptflag.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/fenv/fegetexceptflag.c') diff --git a/src/fenv/fegetexceptflag.c b/src/fenv/fegetexceptflag.c index 921dc1b8..ef8517f9 100644 --- a/src/fenv/fegetexceptflag.c +++ b/src/fenv/fegetexceptflag.c @@ -5,7 +5,15 @@ int fegetexceptflag(fexcept_t *flagp, int excepts) { SIGNAL_SAFE(0); ASSERT_VALID_EXCEPTION_MASK(excepts); - (void)flagp; (void)excepts; + if (!(flagp->__impl >= __fenv_h.fexcept && flagp->__impl <= __fenv_h.fexcept + __fenv_h.nfexcept)) { + struct __fexcept_t *tmp = realloc(__fenv_h.fexcept, sizeof(*__fenv_h.fexcept) * (__fenv_h.nfexcept + 1)); + if (tmp == NULL) { + abort(); + } + __fenv_h.fexcept = tmp; + flagp->__impl = &(__fenv_h.fexcept[__fenv_h.nfexcept++]); + } + flagp->__impl->mask = excepts; return 0; } -- cgit v1.2.1