diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 8e9bb4e04c..e2c2bd1cef 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -791,6 +791,7 @@ void asst::Controller::clear_info() noexcept m_minitouch_avaiable = false; m_scale_size = { WindowWidthDefault, WindowHeightDefault }; m_minitouch_props = decltype(m_minitouch_props)(); + m_screencap_data_general_size = 0; } void asst::Controller::close_socket() noexcept @@ -1009,6 +1010,10 @@ bool asst::Controller::screencap(const std::string& cmd, const DecodeFunc& decod return false; } auto& data = ret.value(); + if (m_screencap_data_general_size && data.size() < m_screencap_data_general_size * 0.1) { + Log.error("data is too small!"); + return false; + } bool tried_conversion = false; if (m_adb.screencap_end_of_line == AdbProperty::ScreencapEndOfLine::CRLF) { @@ -1024,7 +1029,6 @@ bool asst::Controller::screencap(const std::string& cmd, const DecodeFunc& decod Log.info("screencap_end_of_line is LF"); m_adb.screencap_end_of_line = AdbProperty::ScreencapEndOfLine::LF; } - return true; } else { Log.info("data is not empty, but image is empty"); @@ -1051,8 +1055,9 @@ bool asst::Controller::screencap(const std::string& cmd, const DecodeFunc& decod Log.info("screencap_end_of_line is changed to CRLF"); } m_adb.screencap_end_of_line = AdbProperty::ScreencapEndOfLine::CRLF; - return true; } + m_screencap_data_general_size = data.size(); + return true; } void asst::Controller::clear_lf_info() diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 21ba3428f8..2f8f133f13 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -187,6 +187,7 @@ namespace asst bool m_support_socket = false; bool m_server_started = false; bool m_inited = false; + size_t m_screencap_data_general_size = 0; inline static int m_instance_count = 0;