[HAM] fix crash when read pedometer data. 44/107544/1
authorjk.pu <jk.pu@samsung.com>
Wed, 28 Dec 2016 11:21:31 +0000 (20:21 +0900)
committerjk.pu <jk.pu@samsung.com>
Wed, 28 Dec 2016 11:24:07 +0000 (20:24 +0900)
when read pedometer data, pedometer_data->diffs_count has invalid value.
it make infinite roof and make crash issue.

verification: HAM auto tct 100% passed.

Change-Id: I74ab3f49b7b5103c9f8fa24cf1f8ddcb163471de
Signed-off-by: jk.pu <jk.pu@samsung.com>
src/humanactivitymonitor/humanactivitymonitor_manager.cc

index c8e1ab9982d4a562ed8f1c5d56af4178406bb399..526bef7b33f251630307ed393ee8bd6ec80095b8 100755 (executable)
@@ -665,6 +665,12 @@ class HumanActivityMonitorManager::Monitor::SensorMonitor : public HumanActivity
                                 ("Failed to get (%d) sensor data, error: %d (%s)", sensor_, ret, get_error_message(ret)));
     }
 
+    if (SENSOR_HUMAN_PEDOMETER == sensor_ ){
+       //read data of pedometer does not have valid diff[] , so diff_count set 0
+       const auto pedometer_data =  (PedometerDataWrapper *)(&event);
+       pedometer_data->diffs_count = 0;
+    }
+
     *data = picojson::value(picojson::object());
     auto result = converter_(&event, &data->get<picojson::object>());
     if (!result) {
@@ -1327,7 +1333,7 @@ HumanActivityMonitorManager::HumanActivityMonitorManager()
     data->insert(std::make_pair(kAccumulativeRunStepCount, picojson::value(pedometer_data->run_steps())));
 
     auto& diffs = data->insert(std::make_pair(kStepCountDifferences, picojson::value{picojson::array{}})).first->second.get<picojson::array>();
-
+    LOGGER(DEBUG) << "  pedometer_data->diffs_coun: " << pedometer_data->diffs_count;
     if (pedometer_data->diffs_count > 0) {
       for (int i = 0; i < pedometer_data->diffs_count; ++i) {
         InsertStepDifference(pedometer_data->diffs[i].steps, getCurrentTimeStamp(pedometer_data->diffs[i].timestamp) / 1000, &diffs);