From d3084892b7363255a53d87b0f5618e36e53553b4 Mon Sep 17 00:00:00 2001 From: w30042960 Date: Fri, 2 Jun 2023 18:36:07 +0800 Subject: [PATCH 1/2] modify fuzz Signed-off-by: w30042960 --- common/include/daudio_util.h | 1 + common/src/daudio_util.cpp | 15 +++++++++++++++ .../managersink/src/daudio_sink_manager.cpp | 3 ++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/common/include/daudio_util.h b/common/include/daudio_util.h index 77f1a6f1..186d8c71 100644 --- a/common/include/daudio_util.h +++ b/common/include/daudio_util.h @@ -46,6 +46,7 @@ int64_t CalculateOffset(const int64_t frameIndex, const int64_t framePeriodNs, c int64_t UpdateTimeOffset(const int64_t frameIndex, const int64_t framePeriodNs, int64_t &startTime); void GetCurrentTime(int64_t &tvSec, int64_t &tvNSec); bool CheckIsNum(const std::string &jsonString); +bool CheckDevIdIsLegal(const std::string &devId); } // namespace DistributedHardware } // namespace OHOS #endif // OHOS_DAUDIO_UTIL_H diff --git a/common/src/daudio_util.cpp b/common/src/daudio_util.cpp index a1dbaa49..84419659 100644 --- a/common/src/daudio_util.cpp +++ b/common/src/daudio_util.cpp @@ -295,5 +295,20 @@ bool CheckIsNum(const std::string &jsonString) } return true; } + +bool CheckDevIdIsLegal(const std::string &devId) +{ + if (devId.empty() || devId.size() > DAUDIO_MAX_DEVICE_ID_LEN) { + DHLOGE("DevId size %d, is zero or too long.", devId.size()); + return false; + } + for (char const &c : devId) { + if (!std::isalnum(c)) { + DHLOGE("DevId is not number or letter."); + return false; + } + } + return true; +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/audiomanager/managersink/src/daudio_sink_manager.cpp b/services/audiomanager/managersink/src/daudio_sink_manager.cpp index a7da4414..18ec54a5 100644 --- a/services/audiomanager/managersink/src/daudio_sink_manager.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_manager.cpp @@ -92,7 +92,8 @@ int32_t DAudioSinkManager::HandleDAudioNotify(const std::string &devId, const st { DHLOGI("Receive audio event from devId: %s, event type: %d.", GetAnonyString(devId).c_str(), eventType); - if (eventContent.length() > DAUDIO_MAX_JSON_LEN || eventContent.empty()) { + if (eventContent.length() > DAUDIO_MAX_JSON_LEN || eventContent.empty() || !CheckIsNum(dhId) + || !CheckDevIdIsLegal(devId)) { return ERR_DH_AUDIO_FAILED; } -- Gitee From 95c9196559bbcc025ac425da828208743fb5f801 Mon Sep 17 00:00:00 2001 From: w30042960 Date: Fri, 2 Jun 2023 19:46:20 +0800 Subject: [PATCH 2/2] modify fuzz Signed-off-by: w30042960 --- common/include/daudio_constants.h | 1 + services/audiomanager/managersink/src/daudio_sink_manager.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/common/include/daudio_constants.h b/common/include/daudio_constants.h index ed2b9bb6..5b84d568 100644 --- a/common/include/daudio_constants.h +++ b/common/include/daudio_constants.h @@ -51,6 +51,7 @@ constexpr int32_t PIN_IN_MIC = 1 << 27 | 1 << 0; constexpr int32_t NONE_ITEM = 0; constexpr int32_t SINGLE_ITEM = 1; +constexpr int32_t MAX_EVENT_TYPE_NUM = 100; constexpr uint32_t SAMPLE_RATE_DEFAULT = 48000; constexpr uint32_t CHANNEL_COUNT_DEFAULT = 2; diff --git a/services/audiomanager/managersink/src/daudio_sink_manager.cpp b/services/audiomanager/managersink/src/daudio_sink_manager.cpp index 18ec54a5..53597bda 100644 --- a/services/audiomanager/managersink/src/daudio_sink_manager.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_manager.cpp @@ -93,7 +93,7 @@ int32_t DAudioSinkManager::HandleDAudioNotify(const std::string &devId, const st DHLOGI("Receive audio event from devId: %s, event type: %d.", GetAnonyString(devId).c_str(), eventType); if (eventContent.length() > DAUDIO_MAX_JSON_LEN || eventContent.empty() || !CheckIsNum(dhId) - || !CheckDevIdIsLegal(devId)) { + || !CheckDevIdIsLegal(devId) || eventType < 0 || eventType > MAX_EVENT_TYPE_NUM) { return ERR_DH_AUDIO_FAILED; } -- Gitee