]> granicus.if.org Git - icu/commitdiff
ICU-12532 Avoid potential memory mis-alignment of stack-allocated decNum instance.
authorAndy Heninger <andy.heninger@gmail.com>
Mon, 16 May 2016 21:57:34 +0000 (21:57 +0000)
committerAndy Heninger <andy.heninger@gmail.com>
Mon, 16 May 2016 21:57:34 +0000 (21:57 +0000)
X-SVN-Rev: 38746

icu4c/source/i18n/visibledigits.cpp

index a6cbd0fdce276ee73a34bda6fdce5c20c94829d8..59832d6da0db0f881baee76ea247f5db41770b99 100644 (file)
@@ -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();