sensord: check the range of values provided from the client 12/151812/2
authorkibak.yoon <kibak.yoon@samsung.com>
Fri, 22 Sep 2017 05:15:32 +0000 (14:15 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Fri, 22 Sep 2017 07:55:03 +0000 (16:55 +0900)
Change-Id: Ib6102f684dd1b5ee877b28aa871f7b6b169adf23
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/client/sensor_provider.cpp
src/shared/sensor_info.cpp

index 50772d5..aec9c22 100644 (file)
 #include <sensor_utils.h>
 #include <ipc_client.h>
 #include <command_types.h>
+#include <cfloat>
 
 #include "sensor_provider_channel_handler.h"
 
+#define DEFAULT_RESOLUTION 0.1
+
 using namespace sensor;
 
 sensor_provider::sensor_provider(const char *uri)
@@ -57,9 +60,9 @@ bool sensor_provider::init(const char *uri)
        }
 
        m_sensor.set_uri(uri);
-       m_sensor.set_min_range(0);
-       m_sensor.set_max_range(1);
-       m_sensor.set_resolution(1);
+       m_sensor.set_min_range(-FLT_MAX);
+       m_sensor.set_max_range(FLT_MAX);
+       m_sensor.set_resolution(DEFAULT_RESOLUTION);
        /* TODO: temporary walkaround */
        const char *priv = sensor::utils::get_privilege(uri);
        m_sensor.set_privilege(priv);
@@ -166,6 +169,14 @@ 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 (data->values[i] < m_sensor.get_min_range() ||
+                   data->values[i] > m_sensor.get_max_range()) {
+                       _E("Out of range");
+                       return OP_ERROR;
+               }
+       }
+
        ipc::message msg;
        msg.set_type(CMD_PROVIDER_PUBLISH);
        msg.enclose((const char *)data, len);
index e56be7e..bcb1930 100644 (file)
 #include <sensor_types.h>
 #include <sensor_types_private.h>
 #include <sensor_log.h>
+#include <cfloat>
 #include <algorithm>
 #include <string>
 
 #include "sensor_utils.h"
 
+#define MIN_RANGE -FLT_MAX
+#define MAX_RANGE FLT_MAX
+
 using namespace sensor;
 
 sensor_info::sensor_info()
@@ -176,11 +180,21 @@ void sensor_info::set_vendor(const char *vendor)
 void sensor_info::set_min_range(float min_range)
 {
        m_min_range = min_range;
+
+       if (m_min_range < MIN_RANGE)
+               m_min_range = MIN_RANGE;
+       if (m_min_range > MAX_RANGE)
+               m_min_range = MAX_RANGE;
 }
 
 void sensor_info::set_max_range(float max_range)
 {
        m_max_range = max_range;
+
+       if (m_max_range < MIN_RANGE)
+               m_max_range = MIN_RANGE;
+       if (m_max_range > MAX_RANGE)
+               m_max_range = MAX_RANGE;
 }
 
 void sensor_info::set_resolution(float resolution)