Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2025-05-31 06:33:11 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2025-05-31 06:33:11 +1000
commitc8aea48d84a1da84759a6a15b95212ca43082581 (patch)
tree8ad60e10fc5ff24bddf6b7bea7c74caad266c31c /source
parentd4f886eed6015fcadc572092c6d5e8680bd11149 (diff)
fix Lua strings inside JSON always being null-terminated
Diffstat (limited to 'source')
-rw-r--r--source/core/StarLua.cpp12
-rw-r--r--source/core/StarLua.hpp4
-rw-r--r--source/game/StarInput.hpp1
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();