sensord: check if the event value is a valid number 89/155689/3
authorkibak.yoon <kibak.yoon@samsung.com>
Mon, 16 Oct 2017 02:47:22 +0000 (11:47 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Mon, 16 Oct 2017 04:32:44 +0000 (13:32 +0900)
Change-Id: I414f8a6f71baad87ec3dd9538d5ee60b8c3a5edf
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/client/sensor_provider.cpp
src/shared/sensor_info.cpp

index 2855b1f601df39dc6443d788a8b1fb51c139fe75..e742309525ef22366fd6d965fd21cef84892039f 100644 (file)
@@ -171,11 +171,8 @@ void sensor_provider::restore(void)
 int sensor_provider::publish(sensor_data_t *data, int len)
 {
        for (int i = 0; i < data->value_count; ++i) {
-               if (std::isnan(data->values[i]) ||
-                   std::isnan(m_sensor.get_min_range()) ||
-                   std::isnan(m_sensor.get_max_range()) ||
-                   data->values[i] < m_sensor.get_min_range() ||
-                   data->values[i] > m_sensor.get_max_range()) {
+               if (!(data->values[i] >= m_sensor.get_min_range() &&
+                     data->values[i] <= m_sensor.get_max_range())) {
                        _E("Out of range");
                        return OP_ERROR;
                }
index 855695cc4a895698dd6a07db5a84e82872d4eb9e..5a875397255c4f7d0d929fe3b56cb069bfd72c82 100644 (file)
@@ -182,8 +182,8 @@ void sensor_info::set_min_range(float min_range)
 {
        m_min_range = min_range;
 
-       if (std::isnan(m_min_range))
-               m_min_range = 0; /* set value to 0 when the value is NaN */
+       if (!std::isnormal(m_min_range))
+               m_min_range = 0; /* set value to 0 when the value is NaN, infinity, zero or subnormal */
        if (m_min_range < MIN_RANGE)
                m_min_range = MIN_RANGE;
        if (m_min_range > MAX_RANGE)
@@ -194,8 +194,8 @@ void sensor_info::set_max_range(float max_range)
 {
        m_max_range = max_range;
 
-       if (std::isnan(m_max_range))
-               m_max_range = 1; /* set value to 1 when the value is NaN */
+       if (!std::isnormal(m_max_range))
+               m_max_range = 0; /* set value to 0 when the value is NaN, infinity, zero or subnormal */
        if (m_max_range < MIN_RANGE)
                m_max_range = MIN_RANGE;
        if (m_max_range > MAX_RANGE)