summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkx <kx@radix-linux.su>2026-09-09 07:43:41 +0300
committerkx <kx@radix-linux.su>2026-09-09 07:43:41 +0300
commit8d24b3059c99c2defe59e078a170a87ff1f0403c (patch)
tree93b20c4b99dcbb8918013d4cc3fccbd6b5b23ede
parent95fd63ca5616ef80f5700019de790fa50de8a141 (diff)
downloadlibmpu-8d24b3059c99c2defe59e078a170a87ff1f0403c.tar.xz
Fixed: EMUSHORT overflow in multiword division normalization scale calculation
-rw-r--r--mpu/mpu-integer.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/mpu/mpu-integer.c b/mpu/mpu-integer.c
index acfaabf..0844920 100644
--- a/mpu/mpu-integer.c
+++ b/mpu/mpu-integer.c
@@ -10531,9 +10531,9 @@ void idiv_np( EMUSHORT *quot, EMUSHORT *rem, EMUSHORT *num, EMUSHORT *den, int n
m = bnum - bden;
#if MPU_WORD_ORDER_BIG_ENDIAN == 1
- scale = BASE / (y[np-bden] + 1); /* коэффициент нормализации */
+ scale = BASE / ((EMULONG)y[np-bden] + 1); /* коэффициент нормализации */
#else
- scale = BASE / (y[bden] + 1); /* коэффициент нормализации */
+ scale = BASE / ((EMULONG)y[bden] + 1); /* коэффициент нормализации */
#endif
if( scale > 1 )
{
@@ -11080,9 +11080,9 @@ void isdiv_np( EMUSHORT *quot, EMUSHORT *rem, EMUSHORT *num, EMUSHORT *den, int
m = bnum - bden;
#if MPU_WORD_ORDER_BIG_ENDIAN == 1
- scale = BASE / (y[np-bden] + 1); /* коэффициент нормализации */
+ scale = BASE / ((EMULONG)y[np-bden] + 1); /* коэффициент нормализации */
#else
- scale = BASE / (y[bden] + 1); /* коэффициент нормализации */
+ scale = BASE / ((EMULONG)y[bden] + 1); /* коэффициент нормализации */
#endif
if( scale > 1 )
{