summaryrefslogtreecommitdiffstats
path: root/parameter/EnumParameterType.cpp
diff options
context:
space:
mode:
authorDmitry Shkurko <Dmitry.V.Shkurko@intel.com>2013-08-28 19:33:24 +0700
committerDavid Wagner <david.wagner@intel.com>2014-02-12 17:04:12 +0100
commit764ff429ac913567910e4acb1da98502f246754a (patch)
tree9c56b38f8bf48b2a969dbe38460c399548f85624 /parameter/EnumParameterType.cpp
parent9b275887f7891890c15d07e5aa90fcf2ed846bbf (diff)
downloadexternal_parameter-framework-764ff429ac913567910e4acb1da98502f246754a.zip
external_parameter-framework-764ff429ac913567910e4acb1da98502f246754a.tar.gz
external_parameter-framework-764ff429ac913567910e4acb1da98502f246754a.tar.bz2
Avoid integer overflow while calculating max values
BZ: 134249 The behavior is undefined in the case of signed integer overflow for enum and fixed point parameter types. Modify the behavior to handle correctly the signed integers. Change-Id: Idbd0798a39f826853ae1afcd05cebd897675b9a8 Signed-off-by: Dmitry Shkurko <Dmitry.V.Shkurko@intel.com>
Diffstat (limited to 'parameter/EnumParameterType.cpp')
-rw-r--r--parameter/EnumParameterType.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/parameter/EnumParameterType.cpp b/parameter/EnumParameterType.cpp
index dcdbfaa..145e556 100644
--- a/parameter/EnumParameterType.cpp
+++ b/parameter/EnumParameterType.cpp
@@ -154,7 +154,7 @@ bool CEnumParameterType::toBlackboard(const string& strValue, uint32_t& uiValue,
bool CEnumParameterType::checkValueAgainstRange(const string& strValue, int64_t value, CParameterAccessContext& parameterAccessContext, bool bHexaValue, bool bConversionSucceeded) const
{
// Enums are always signed, it means we have one less util bit
- int64_t maxValue = (1 << (getSize() * 8 - 1)) - 1;
+ int64_t maxValue = getMaxValue<uint64_t>();
int64_t minValue = -maxValue - 1;
if (!bConversionSucceeded || value < minValue || value > maxValue) {