diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2025-05-31 06:33:11 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2025-05-31 06:33:11 +1000 |
commit | c8aea48d84a1da84759a6a15b95212ca43082581 (patch) | |
tree | 8ad60e10fc5ff24bddf6b7bea7c74caad266c31c /source | |
parent | d4f886eed6015fcadc572092c6d5e8680bd11149 (diff) |
fix Lua strings inside JSON always being null-terminated
Diffstat (limited to 'source')
-rw-r--r-- | source/core/StarLua.cpp | 12 | ||||
-rw-r--r-- | source/core/StarLua.hpp | 4 | ||||
-rw-r--r-- | source/game/StarInput.hpp | 1 |
3 files changed, 12 insertions, 5 deletions
diff --git a/source/core/StarLua.cpp b/source/core/StarLua.cpp index b70fe59..bd27129 100644 --- a/source/core/StarLua.cpp +++ b/source/core/StarLua.cpp @@ -159,7 +159,7 @@ Maybe<Json> LuaConverter<Json>::to(LuaEngine&, LuaValue const& v) { return Json(*f); if (auto s = v.ptr<LuaString>()) - return Json(s->ptr()); + return Json(s->toString()); if (v.is<LuaTable>()) return LuaDetail::tableToJsonContainer(v.get<LuaTable>()); @@ -474,16 +474,20 @@ lua_Debug const& LuaEngine::debugInfo(int level, const char* what) { return debug; } -LuaString LuaEngine::createString(String const& str) { +LuaString LuaEngine::createString(std::string const& str) { lua_checkstack(m_state, 1); if (m_nullTerminated > 0) - lua_pushstring(m_state, str.utf8Ptr()); + lua_pushstring(m_state, str.data()); else - lua_pushlstring(m_state, str.utf8Ptr(), str.utf8Size()); + lua_pushlstring(m_state, str.data(), str.size()); return LuaString(LuaDetail::LuaHandle(RefPtr<LuaEngine>(this), popHandle(m_state))); } +LuaString LuaEngine::createString(String const& str) { + return createString(str.utf8()); +} + LuaString LuaEngine::createString(char const* str) { lua_checkstack(m_state, 1); diff --git a/source/core/StarLua.hpp b/source/core/StarLua.hpp index 1f0dc43..f53c9db 100644 --- a/source/core/StarLua.hpp +++ b/source/core/StarLua.hpp @@ -414,6 +414,7 @@ struct LuaNullTermWrapper : T { class LuaNullEnforcer { public: LuaNullEnforcer(LuaEngine& engine); + LuaNullEnforcer(LuaNullEnforcer const&) = delete; LuaNullEnforcer(LuaNullEnforcer&&); ~LuaNullEnforcer(); private: @@ -543,6 +544,7 @@ public: template <typename T> T luaTo(LuaValue&& v); + LuaString createString(std::string const& str); LuaString createString(String const& str); LuaString createString(char const* str); @@ -858,7 +860,7 @@ struct LuaConverter<String> { template <> struct LuaConverter<std::string> { static LuaValue from(LuaEngine& engine, std::string const& v) { - return engine.createString(v.c_str()); + return engine.createString(v); } static Maybe<std::string> to(LuaEngine& engine, LuaValue v) { diff --git a/source/game/StarInput.hpp b/source/game/StarInput.hpp index 05b20eb..7e8fdb1 100644 --- a/source/game/StarInput.hpp +++ b/source/game/StarInput.hpp @@ -184,6 +184,7 @@ public: class ClipboardUnlock { public: ClipboardUnlock(Input& input); + ClipboardUnlock(ClipboardUnlock const&) = delete; ClipboardUnlock(ClipboardUnlock&&); ~ClipboardUnlock(); |