From 54b8f0c928503d63d69ce6f14f10c7028fdb193a Mon Sep 17 00:00:00 2001 From: Andy Heninger Date: Mon, 16 May 2016 21:57:34 +0000 Subject: [PATCH] ICU-12532 Avoid potential memory mis-alignment of stack-allocated decNum instance. X-SVN-Rev: 38746 --- icu4c/source/i18n/visibledigits.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/icu4c/source/i18n/visibledigits.cpp b/icu4c/source/i18n/visibledigits.cpp index a6cbd0fdce2..59832d6da0d 100644 --- a/icu4c/source/i18n/visibledigits.cpp +++ b/icu4c/source/i18n/visibledigits.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015, International Business Machines + * Copyright (C) 2016, International Business Machines * Corporation and others. All Rights Reserved. * * file name: visibledigits.cpp @@ -84,8 +84,11 @@ double VisibleDigits::computeAbsDoubleValue() const { } // stack allocate a decNumber to hold MAX_DBL_DIGITS+3 significant digits - char rawNumber[sizeof(decNumber) + MAX_DBL_DIGITS+3]; - decNumber *numberPtr = (decNumber *) rawNumber; + struct { + decNumber decNum; + char digits[MAX_DBL_DIGITS+3]; + } decNumberWithStorage; + decNumber *numberPtr = &decNumberWithStorage.decNum; int32_t mostSig = fInterval.getMostSignificantExclusive(); int32_t mostSigNonZero = fExponent + fDigits.length(); -- 2.40.0