diff --git a/frameworks/native/sensor/src/sensor_service_proxy.cpp b/frameworks/native/sensor/src/sensor_service_proxy.cpp index b0406b7a1ab6b066779538011780cffac1b1a41c..76be0c8cd338fd05cc1e39708a17a2827d895fbb 100755 --- a/frameworks/native/sensor/src/sensor_service_proxy.cpp +++ b/frameworks/native/sensor/src/sensor_service_proxy.cpp @@ -177,7 +177,11 @@ std::vector SensorServiceProxy::GetSensorList() SEN_HILOGE("failed, ret:%{public}d", ret); return sensors; } - int32_t sensorCount = reply.ReadInt32(); + int32_t sensorCount; + if (!reply.ReadInt32(sensorCount)) { + SEN_HILOGE("Parcel read failed"); + return sensors; + } SEN_HILOGD("sensorCount:%{public}d", sensorCount); if (sensorCount > MAX_SENSOR_COUNT) { sensorCount = MAX_SENSOR_COUNT; diff --git a/utils/include/sensor_basic_data_channel.h b/utils/include/sensor_basic_data_channel.h index a98543c28e7a8ba8cb9fda9cd160421e39fd01aa..783eae33fe4d52e74cfd41607a7f67bc880d5b84 100644 --- a/utils/include/sensor_basic_data_channel.h +++ b/utils/include/sensor_basic_data_channel.h @@ -42,6 +42,7 @@ public: bool GetSensorStatus() const; void SetSensorStatus(bool isActive); const std::unordered_map &GetDataCacheBuf() const; + int32_t CloseFdWhenErr(int32_t &sockFd); private: int32_t sendFd_; diff --git a/utils/src/sensor.cpp b/utils/src/sensor.cpp index 3c0c2b7c38a25c65cab8881b580366f6b8d78722..6dcb9f9c2c4d71deb24b6b9b1879b2a662f32ce9 100644 --- a/utils/src/sensor.cpp +++ b/utils/src/sensor.cpp @@ -241,19 +241,22 @@ std::unique_ptr Sensor::Unmarshalling(Parcel &parcel) bool Sensor::ReadFromParcel(Parcel &parcel) { - sensorId_ = parcel.ReadUint32(); - sensorTypeId_ = parcel.ReadUint32(); - sensorName_ = parcel.ReadString(); - vendorName_ = parcel.ReadString(); - firmwareVersion_ = parcel.ReadString(); - hardwareVersion_ = parcel.ReadString(); - power_ = parcel.ReadFloat(); - maxRange_ = parcel.ReadFloat(); - resolution_ = parcel.ReadFloat(); - flags_ = parcel.ReadUint32(); - fifoMaxEventCount_ = parcel.ReadInt32(); - minSamplePeriodNs_ = parcel.ReadInt64(); - maxSamplePeriodNs_ = parcel.ReadInt64(); + + if ((!parcel.ReadUint32(sensorId_)) || + (!parcel.ReadUint32(sensorTypeId_)) || + (!parcel.ReadString(sensorName_)) || + (!parcel.ReadString(vendorName_)) || + (!parcel.ReadString(firmwareVersion_)) || + (!parcel.ReadString(hardwareVersion_)) || + (!parcel.ReadFloat(power_)) || + (!parcel.ReadFloat(maxRange_)) || + (!parcel.ReadFloat(resolution_)) || + (!parcel.ReadUint32(flags_)) || + (!parcel.ReadInt32(fifoMaxEventCount_)) || + (!parcel.ReadInt64(minSamplePeriodNs_)) || + (!parcel.ReadInt64(maxSamplePeriodNs_))) { + return false; + } return true; } } // namespace Sensors diff --git a/utils/src/sensor_basic_data_channel.cpp b/utils/src/sensor_basic_data_channel.cpp index 29bfd5913d243b54bc133e70f195b0571198a5a7..dd571fd48ee1610cda09e6c0fbfc717867592a64 100755 --- a/utils/src/sensor_basic_data_channel.cpp +++ b/utils/src/sensor_basic_data_channel.cpp @@ -38,6 +38,13 @@ SensorBasicDataChannel::SensorBasicDataChannel() : sendFd_(-1), receiveFd_(-1), SEN_HILOGD("isActive_:%{public}d,sendFd:%{public}d", isActive_, sendFd_); } +int32_t SensorBasicDataChannel::CloseFdWhenErr(int32_t &sockFd) +{ + close(sockFd); + sockFd = -1; + return SENSOR_CHANNEL_SOCKET_CREATE_ERR; +} + int32_t SensorBasicDataChannel::CreateSensorBasicChannel() { if ((sendFd_ != -1) || (receiveFd_ != -1)) { @@ -58,34 +65,34 @@ int32_t SensorBasicDataChannel::CreateSensorBasicChannel() int32_t ret = setsockopt(socketPair[0], SOL_SOCKET, SO_SNDBUF, &SENSOR_READ_DATA_SIZE, sizeof(SENSOR_READ_DATA_SIZE)); if (ret != 0) { - SEN_HILOGE("setsockopt socketpair 0 failed"); - return SENSOR_CHANNEL_SOCKET_CREATE_ERR; + SEN_HILOGE("setsockopt socketpair 0 failed, ret: %{public}d, errno: %{public}d", ret, errno); + return CloseFdWhenErr(socketPair[0]); } ret = setsockopt(socketPair[1], SOL_SOCKET, SO_RCVBUF, &SENSOR_READ_DATA_SIZE, sizeof(SENSOR_READ_DATA_SIZE)); if (ret != 0) { - SEN_HILOGE("setsockopt socketpair 1 failed"); - return SENSOR_CHANNEL_SOCKET_CREATE_ERR; + SEN_HILOGE("setsockopt socketpair 1 failed, ret: %{public}d, errno: %{public}d", ret, errno); + return CloseFdWhenErr(socketPair[1]); } int32_t bufferSize = DEFAULT_CHANNEL_SIZE; ret = setsockopt(socketPair[0], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize)); if (ret != 0) { - SEN_HILOGE("setsockopt socketpair 0 failed"); - return SENSOR_CHANNEL_SOCKET_CREATE_ERR; + SEN_HILOGE("setsockopt socketpair 0 failed, ret: %{public}d, errno: %{public}d", ret, errno); + return CloseFdWhenErr(socketPair[0]); } ret = setsockopt(socketPair[1], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize)); if (ret != 0) { - SEN_HILOGE("setsockopt socketpair 1 failed"); - return SENSOR_CHANNEL_SOCKET_CREATE_ERR; + SEN_HILOGE("setsockopt socketpair 1 failed, ret: %{public}d, errno: %{public}d", ret, errno); + return CloseFdWhenErr(socketPair[1]); } ret = fcntl(socketPair[0], F_SETFL, O_NONBLOCK); if (ret != 0) { - SEN_HILOGE("fcntl socketpair 0 failed"); - return SENSOR_CHANNEL_SOCKET_CREATE_ERR; + SEN_HILOGE("fcntl socketpair 0 failed, ret: %{public}d, errno: %{public}d", ret, errno); + return CloseFdWhenErr(socketPair[0]); } ret = fcntl(socketPair[1], F_SETFL, O_NONBLOCK); if (ret != 0) { - SEN_HILOGE("fcntl socketpair 1 failed"); - return SENSOR_CHANNEL_SOCKET_CREATE_ERR; + SEN_HILOGE("fcntl socketpair 1 failed, ret: %{public}d, errno: %{public}d", ret, errno); + return CloseFdWhenErr(socketPair[1]); } sendFd_ = socketPair[0]; receiveFd_ = socketPair[1]; @@ -96,7 +103,7 @@ int32_t SensorBasicDataChannel::CreateSensorBasicChannel() int32_t SensorBasicDataChannel::CreateSensorBasicChannel(MessageParcel &data) { CALL_LOG_ENTER; - if ((sendFd_ != -1) || (receiveFd_ != -1)) { + if (sendFd_ != -1) { SEN_HILOGD("already create socketpair"); return ERR_OK; }