diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-19 11:01:14 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-19 11:02:04 +0100 |
commit | 1eef324dc9ffcd0bc115b283a038cc175f64deb5 (patch) | |
tree | 104b76f9e8d246b246322b97ce6a9c25b05cb260 /editor | |
parent | aadd93718a851ac36a6eefbfec273c81ebf7cc14 (diff) |
editor, main: assert StringView null termination
Diffstat (limited to 'editor')
-rw-r--r-- | editor/imgui-raii.cpp | 16 | ||||
-rw-r--r-- | editor/imgui-raii.hpp | 2 | ||||
-rw-r--r-- | editor/inspect.cpp | 4 |
3 files changed, 16 insertions, 6 deletions
diff --git a/editor/imgui-raii.cpp b/editor/imgui-raii.cpp index e499f21c..c348eea6 100644 --- a/editor/imgui-raii.cpp +++ b/editor/imgui-raii.cpp @@ -1,4 +1,5 @@ #include "imgui-raii.hpp" +#include "compat/assert.hpp" #include <Corrade/Containers/StringView.h> #include <Magnum/Magnum.h> #include <Magnum/Math/Color.h> @@ -23,7 +24,10 @@ font_saver::font_saver(float size) : font_saver{*ImGui::GetCurrentContext(), siz style_saver::style_saver() : style{ImGui::GetStyle()} {} style_saver::~style_saver() { ImGui::GetStyle() = style; } -void text(StringView str, ImGuiTextFlags flags) { ImGui::TextEx(str.data(), str.data() + str.size(), flags); } +void text(StringView str, ImGuiTextFlags flags) +{ + ImGui::TextEx(str.data(), str.data() + str.size(), flags); +} raii_wrapper::raii_wrapper(raii_wrapper::F fn) : dtor{fn} {} raii_wrapper::~raii_wrapper() { if (dtor) dtor(); } @@ -61,6 +65,7 @@ raii_wrapper push_style_var(ImGuiStyleVar_ var, Vector2 value) raii_wrapper tree_node(Containers::StringView name, ImGuiTreeNodeFlags flags) { + fm_assert(name.flags() & StringViewFlag::NullTerminated); if (ImGui::TreeNodeEx(name.data(), flags)) return {&ImGui::TreePop}; else @@ -75,6 +80,8 @@ raii_wrapper begin_disabled(bool is_disabled) raii_wrapper begin_combo(StringView name, StringView preview, ImGuiComboFlags flags) { + fm_assert(name.flags() & StringViewFlag::NullTerminated); + fm_assert(preview.flags() & StringViewFlag::NullTerminated); if (ImGui::BeginCombo(name.data(), preview.data(), flags)) return {&ImGui::EndCombo}; else @@ -83,6 +90,7 @@ raii_wrapper begin_combo(StringView name, StringView preview, ImGuiComboFlags fl raii_wrapper begin_popup(StringView name, ImGuiWindowFlags flags) { + fm_assert(name.flags() & StringViewFlag::NullTerminated); if (ImGui::BeginPopup(name.data(), flags)) return {&ImGui::EndPopup}; else @@ -91,15 +99,17 @@ raii_wrapper begin_popup(StringView name, ImGuiWindowFlags flags) raii_wrapper begin_list_box(Containers::StringView name, ImVec2 size) { + fm_assert(name.flags() & StringViewFlag::NullTerminated); if (ImGui::BeginListBox(name.data(), size)) return {&ImGui::EndListBox}; else return {}; } -raii_wrapper begin_table(const char* id, int ncols, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width) +raii_wrapper begin_table(StringView id, int ncols, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width) { - if (ImGui::BeginTable(id, ncols, flags, outer_size, inner_width)) + fm_assert(id.flags() & StringViewFlag::NullTerminated); + if (ImGui::BeginTable(id.data(), ncols, flags, outer_size, inner_width)) return {&ImGui::EndTable}; else return {}; diff --git a/editor/imgui-raii.hpp b/editor/imgui-raii.hpp index 9888b70b..05f4239d 100644 --- a/editor/imgui-raii.hpp +++ b/editor/imgui-raii.hpp @@ -27,7 +27,7 @@ private: [[nodiscard]] raii_wrapper begin_main_menu(); [[nodiscard]] raii_wrapper begin_menu(StringView name, bool enabled = true); [[nodiscard]] raii_wrapper begin_list_box(StringView name, ImVec2 size = {}); -[[nodiscard]] raii_wrapper begin_table(const char* id, int ncols, ImGuiTableFlags flags = 0, const ImVec2& outer_size = {}, float inner_width = 0); +[[nodiscard]] raii_wrapper begin_table(StringView id, int ncols, ImGuiTableFlags flags = 0, const ImVec2& outer_size = {}, float inner_width = 0); [[nodiscard]] raii_wrapper tree_node(StringView name, ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None); [[nodiscard]] raii_wrapper begin_disabled(bool is_disabled = true); [[nodiscard]] raii_wrapper begin_combo(StringView name, StringView preview, ImGuiComboFlags flags = 0); diff --git a/editor/inspect.cpp b/editor/inspect.cpp index 0609c4be..df286391 100644 --- a/editor/inspect.cpp +++ b/editor/inspect.cpp @@ -108,12 +108,12 @@ bool do_inspect_field(void* datum, const erased_accessor& accessor, field_repr r case field_repr::cbx: { if constexpr(std::is_integral_v<T>) { - const char* preview = "<invalid>"; + StringView preview = "<invalid>"_s; const auto old_value = (size_t)static_cast<std::make_unsigned_t<T>>(value); for (const auto& [str, x] : list) if (x == old_value) { - preview = str.data(); + preview = str; break; } if (auto b = begin_combo(label, preview)) |