diff --git a/extern/decNumber/decBasic.c b/extern/decNumber/decBasic.c index 56396f8da7f..7645d6e658a 100644 --- a/extern/decNumber/decBasic.c +++ b/extern/decNumber/decBasic.c @@ -1120,7 +1120,7 @@ decFloat * decFloatAdd(decFloat *result, // the following buffers hold coefficients with various alignments // (see commentary and diagrams below) uByte acc[4+2+DECPMAX*3+8]; - uByte buf[4+2+DECPMAX*2]; + uByte buf[4+2+DECPMAX*2+4]; uByte *umsd, *ulsd; // local MSD and LSD pointers #if DECLITEND diff --git a/extern/decNumber/decCommon.c b/extern/decNumber/decCommon.c index e16d6ee2d1d..1a5df969d45 100644 --- a/extern/decNumber/decCommon.c +++ b/extern/decNumber/decCommon.c @@ -461,7 +461,8 @@ static decFloat * decFinalize(decFloat *df, bcdnum *num, uByte *t=buffer; // safe target uByte *tlsd=buffer+(ulsd-umsd)+shift; // target LSD // printf("folddown shift=%ld\n", (LI)shift); - for (; s<=ulsd; s+=4, t+=4) UBFROMUI(t, UBTOUI(s)); + for (; s+3<=ulsd; s+=4, t+=4) UBFROMUI(t, UBTOUI(s)); + for (; s<=ulsd; s++, t++) *t=*s; for (t=tlsd-shift+1; t<=tlsd; t+=4) UBFROMUI(t, 0); // pad 0s num->exponent-=shift; umsd=buffer;