Skip to content

Commit

Permalink
InputText: Improved sturdiness if the ResizeCallback purposefully mod…
Browse files Browse the repository at this point in the history
…ify data->BufTextLen or data->BufSize. (#2006, #1443, #1008)
  • Loading branch information
ocornut committed Aug 22, 2018
1 parent 7d9d9bc commit 7011d87
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
9 changes: 6 additions & 3 deletions imgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11163,15 +11163,18 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize;
callback_data.Flags = flags;
callback_data.Buf = buf;
callback_data.BufTextLen = edit_state.CurLenA;
callback_data.BufTextLen = apply_new_text_length;
callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1);
callback_data.UserData = callback_user_data;
callback(&callback_data);
buf = callback_data.Buf;
buf_size = callback_data.BufSize;
apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1);
IM_ASSERT(apply_new_text_length <= buf_size);
}
IM_ASSERT(apply_new_text_length <= buf_size);
ImStrncpy(buf, edit_state.TempBuffer.Data, apply_new_text_length + 1);

// If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
ImStrncpy(buf, edit_state.TempBuffer.Data, ImMin(apply_new_text_length + 1, buf_size));
value_changed = true;
}

Expand Down
2 changes: 2 additions & 0 deletions misc/stl/imgui_stl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ static int InputTextCallback(ImGuiInputTextCallbackData* data)

bool ImGui::InputText(const char* label, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
{
IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
flags |= ImGuiInputTextFlags_CallbackResize;

InputTextCallback_UserData cb_user_data;
Expand All @@ -45,6 +46,7 @@ bool ImGui::InputText(const char* label, std::string* str, ImGuiInputTextFlags f

bool ImGui::InputTextMultiline(const char* label, std::string* str, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
{
IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
flags |= ImGuiInputTextFlags_CallbackResize;

InputTextCallback_UserData cb_user_data;
Expand Down

0 comments on commit 7011d87

Please sign in to comment.