diff --git a/services/miscdevice_service/src/miscdevice_dump.cpp b/services/miscdevice_service/src/miscdevice_dump.cpp index 695c412ff49fd0cc038ba423264c110d253f7567..ebaf1618ba295922dcfb857b70a8767dac5b27db 100644 --- a/services/miscdevice_service/src/miscdevice_dump.cpp +++ b/services/miscdevice_service/src/miscdevice_dump.cpp @@ -44,9 +44,15 @@ void MiscdeviceDump::ParseCommand(int32_t fd, const std::vector& ar {"help", no_argument, 0, 'h'}, {NULL, 0, 0, 0} }; - char **argv = new char *[args.size()]; + char **argv = new (std::nothrow) char *[args.size()]; + CHKPV(argv); + memset_s(argv, args.size() * sizeof(char *), 0, args.size() * sizeof(char *)); for (size_t i = 0; i < args.size(); ++i) { - argv[i] = new char[args[i].size() + 1]; + argv[i] = new (std::nothrow) char[args[i].size() + 1]; + if (argv[i] == nullptr) { + MISC_HILOGE("alloc failure"); + goto RELEASE_RES; + } if (strcpy_s(argv[i], args[i].size() + 1, args[i].c_str()) != EOK) { MISC_HILOGE("strcpy_s error"); goto RELEASE_RES; diff --git a/services/miscdevice_service/src/miscdevice_service.cpp b/services/miscdevice_service/src/miscdevice_service.cpp index 6d1987901c5c76cc441607cc9200cd6afde3d9fa..fc6fa19c4f73240520485b958cf383d7fef884b5 100644 --- a/services/miscdevice_service/src/miscdevice_service.cpp +++ b/services/miscdevice_service/src/miscdevice_service.cpp @@ -29,6 +29,7 @@ constexpr HiLogLabel LABEL = { LOG_CORE, MISC_LOG_DOMAIN, "MiscdeviceService" }; constexpr int32_t MIN_VIBRATOR_TIME = 0; constexpr int32_t MAX_VIBRATOR_TIME = 1800000; constexpr int32_t DEFAULT_VIBRATOR_ID = 123; +constexpr int32_t MAX_DUMP_PARAMETERS = 32; } // namespace bool MiscdeviceService::ready_ = false; @@ -89,6 +90,7 @@ MiscdeviceService::~MiscdeviceService() vibratorThread_->NotifyExitSync(); } delete vibratorThread_; + vibratorThread_ = nullptr; } } @@ -414,8 +416,8 @@ void MiscdeviceService::VibratorEffectThread::UpdateVibratorEffectData(const std int32_t MiscdeviceService::Dump(int32_t fd, const std::vector &args) { CALL_LOG_ENTER; - if (fd < 0) { - MISC_HILOGE("fd is invalid"); + if (fd < 0 || args.size() > MAX_DUMP_PARAMETERS) { + MISC_HILOGE("fd is invalid or wrong number of parameters"); return DUMP_PARAM_ERR; } if (args.empty()) {