fix: Potential crashes when pasting with no clipboard content

This commit is contained in:
WerWolv 2022-10-06 09:35:18 +02:00
parent e0c35e0002
commit f039ea68d0
2 changed files with 9 additions and 4 deletions

View File

@ -164,7 +164,10 @@ static void ImGui_ImplGlfw_ShutdownPlatformInterface();
// Functions
static const char* ImGui_ImplGlfw_GetClipboardText(void* user_data)
{
return glfwGetClipboardString((GLFWwindow*)user_data);
// IMHEX PATCH BEGIN
const char *data = glfwGetClipboardString((GLFWwindow*)user_data);
return data == nullptr ? "" : data;
// IMHEX PATCH END
}
static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text)
@ -179,12 +182,12 @@ static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text)
ImGuiContext& g = *GImGui;
g.ClipboardHandlerData.clear();
if (!::OpenClipboard(NULL))
return NULL;
return "";
HANDLE wbuf_handle = ::GetClipboardData(CF_UNICODETEXT);
if (wbuf_handle == NULL)
{
::CloseClipboard();
return NULL;
return "";
}
if (const WCHAR* wbuf_global = (const WCHAR*)::GlobalLock(wbuf_handle))
{
@ -194,7 +197,7 @@ static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text)
}
::GlobalUnlock(wbuf_handle);
::CloseClipboard();
return g.ClipboardHandlerData.Data;
return g.ClipboardHandlerData.Data == nullptr ? "" : g.ClipboardHandlerData.Data;
}
static void ImGui_ImplWin_SetClipboardText(void*, const char* text)

View File

@ -1222,6 +1222,8 @@ namespace hex::plugin::builtin {
auto provider = ImHexApi::Provider::get();
std::string clipboard = ImGui::GetClipboardText();
if (clipboard.empty())
return;
// Check for non-hex characters
bool isValidHexString = std::find_if(clipboard.begin(), clipboard.end(), [](char c) {