Skip to content

Commit 16cb35a

Browse files
committed
Fixed live view regex causing a crash when regex is invalid
1 parent 657e008 commit 16cb35a

File tree

3 files changed

+36
-11
lines changed

3 files changed

+36
-11
lines changed

UE4SS/include/ExceptionHandling.hpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
#include <DynamicOutput/DynamicOutput.hpp>
66
#include <Helpers/String.hpp>
77

8+
#define UE4SS_ERROR_OUTPUTTER() \
9+
if (!Output::has_internal_error()) \
10+
{ \
11+
Output::send<LogLevel::Error>(STR("Error: {}\n"), to_wstring(e.what())); \
12+
} \
13+
else \
14+
{ \
15+
printf_s("Internal Error: %s\n", e.what()); \
16+
}
17+
818
namespace RC
919
{
1020
// Will try some code and properly propagate any exceptions
@@ -18,14 +28,7 @@ namespace RC
1828
}
1929
catch (std::exception& e)
2030
{
21-
if (!Output::has_internal_error())
22-
{
23-
Output::send<LogLevel::Error>(STR("Error: {}\n"), to_wstring(e.what()));
24-
}
25-
else
26-
{
27-
printf_s("Internal Error: %s\n", e.what());
28-
}
31+
UE4SS_ERROR_OUTPUTTER()
2932

3033
using LambdaReturnType = decltype(code_to_try());
3134
if constexpr (!std::is_same_v<LambdaReturnType, void>)

UE4SS/include/GUI/LiveView.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,14 @@ namespace RC::GUI
195195
-> void;
196196

197197
public:
198+
auto set_is_searching_by_name(bool new_value) -> void
199+
{
200+
m_is_searching_by_name = new_value;
201+
}
202+
auto set_search_field_clear_requested(bool new_value) -> void
203+
{
204+
m_search_field_clear_requested = new_value;
205+
}
198206
auto was_search_field_clear_requested() -> bool
199207
{
200208
return m_search_field_clear_requested;

UE4SS/src/GUI/LiveView.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ namespace RC::GUI
8888
bool LiveView::s_watches_loaded_from_disk{};
8989
bool LiveView::s_use_regex_for_search{};
9090

91+
static LiveView* s_live_view{};
92+
9193
static auto get_object_full_name_cxx_string(UObject* object) -> std::string;
9294

9395
static auto filter_out_objects(UObject* object) -> bool
@@ -149,10 +151,20 @@ namespace RC::GUI
149151

150152
if (LiveView::s_use_regex_for_search)
151153
{
152-
if (std::regex_search(object_full_name.begin(), object_full_name.end(), std::regex(name_to_search_by)))
154+
try
155+
{
156+
if (std::regex_search(object_full_name.begin(), object_full_name.end(), std::regex(name_to_search_by)))
157+
{
158+
LiveView::s_name_search_results.emplace_back(object);
159+
LiveView::s_name_search_results_set.emplace(object);
160+
}
161+
}
162+
catch (std::exception& e)
153163
{
154-
LiveView::s_name_search_results.emplace_back(object);
155-
LiveView::s_name_search_results_set.emplace(object);
164+
UE4SS_ERROR_OUTPUTTER()
165+
LiveView::s_name_to_search_by.clear();
166+
s_live_view->set_is_searching_by_name(false);
167+
s_live_view->set_search_field_clear_requested(true);
156168
}
157169
return;
158170
}
@@ -874,6 +886,8 @@ namespace RC::GUI
874886
m_default_search_buffer.size() + sizeof(char),
875887
m_default_search_buffer.data(),
876888
m_default_search_buffer.size() + sizeof(char));
889+
890+
s_live_view = this;
877891
}
878892

879893
LiveView::~LiveView()

0 commit comments

Comments
 (0)