From d125921c2455dae95f059943b177469c72489e88 Mon Sep 17 00:00:00 2001 From: EngineerSmith <56016593+EngineerSmith@users.noreply.github.com> Date: Fri, 9 Feb 2024 00:29:12 +0000 Subject: [PATCH 1/5] Added container type to w_hash --- src/modules/data/wrap_DataModule.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/modules/data/wrap_DataModule.cpp b/src/modules/data/wrap_DataModule.cpp index 0b6ecff16..eafd37931 100644 --- a/src/modules/data/wrap_DataModule.cpp +++ b/src/modules/data/wrap_DataModule.cpp @@ -302,25 +302,37 @@ int w_decode(lua_State *L) int w_hash(lua_State *L) { - const char *fstr = luaL_checkstring(L, 1); + ContainerType ctype = luax_checkcontainertype(L, 1); + const char *fstr = luaL_checkstring(L, 2); HashFunction::Function function; if (!HashFunction::getConstant(fstr, function)) return luax_enumerror(L, "hash function", HashFunction::getConstants(function), fstr); HashFunction::Value hashvalue; - if (lua_isstring(L, 2)) + if (lua_isstring(L, 3)) { size_t rawsize = 0; - const char *rawbytes = luaL_checklstring(L, 2, &rawsize); + const char *rawbytes = luaL_checklstring(L, 3, &rawsize); luax_catchexcept(L, [&](){ love::data::hash(function, rawbytes, rawsize, hashvalue); }); } else { - Data *rawdata = luax_checktype(L, 2); + Data *rawdata = luax_checktype(L, 3); luax_catchexcept(L, [&](){ love::data::hash(function, rawdata, hashvalue); }); } - lua_pushlstring(L, hashvalue.data, hashvalue.size); + if (ctype == CONTAINER_DATA) + { + Data* d = nullptr; + luax_catchexcept(L, [&]() { d = instance()->newByteData(hashvalue.size); }); + memcpy(d->getData(), hashvalue.data, hashvalue.size); + + luax_pushtype(L, Data::type, d); + d->release(); + } + else + lua_pushlstring(L, hashvalue.data, hashvalue.size); + return 1; } From 666fd886313a735c8c471bdb5112516a220942a3 Mon Sep 17 00:00:00 2001 From: EngineerSmith <56016593+EngineerSmith@users.noreply.github.com> Date: Fri, 9 Feb 2024 00:55:57 +0000 Subject: [PATCH 2/5] Altered tests to account for additional container argument in love.data.hash --- testing/tests/data.lua | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/testing/tests/data.lua b/testing/tests/data.lua index 0e21a7713..06a68ed50 100644 --- a/testing/tests/data.lua +++ b/testing/tests/data.lua @@ -196,19 +196,33 @@ end -- love.data.hash love.test.data.hash = function(test) -- setup all the different hashing types - local str1 = love.data.hash('md5', 'helloworld') - local str2 = love.data.hash('sha1', 'helloworld') - local str3 = love.data.hash('sha224', 'helloworld') - local str4 = love.data.hash('sha256', 'helloworld') - local str5 = love.data.hash('sha384', 'helloworld') - local str6 = love.data.hash('sha512', 'helloworld') + local str1 = love.data.hash('string', 'md5', 'helloworld') + local str2 = love.data.hash('string', 'sha1', 'helloworld') + local str3 = love.data.hash('string', 'sha224', 'helloworld') + local str4 = love.data.hash('string', 'sha256', 'helloworld') + local str5 = love.data.hash('string', 'sha384', 'helloworld') + local str6 = love.data.hash('string', 'sha512', 'helloworld') + local data1 = love.data.hash('data', 'md5', 'helloworld') + local data2 = love.data.hash('data', 'sha1', 'helloworld') + local data3 = love.data.hash('data', 'sha224', 'helloworld') + local data4 = love.data.hash('data', 'sha256', 'helloworld') + local data5 = love.data.hash('data', 'sha384', 'helloworld') + local data6 = love.data.hash('data', 'sha512', 'helloworld') -- check encoded hash value matches what's expected for that algo - test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", str1), 'check md5 encode') - test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", str2), 'check sha1 encode') - test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", str3), 'check sha224 encode') - test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", str4), 'check sha256 encode') - test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", str5), 'check sha384 encode') - test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", str6), 'check sha512 encode') + -- test container string + test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", str1), 'check md5 encode container string') + test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", str2), 'check sha1 encode container string') + test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", str3), 'check sha224 encode container string') + test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", str4), 'check sha256 encode container string') + test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", str5), 'check sha384 encode container string') + test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", str6), 'check sha512 encode container string') + -- test container data + test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", data1), 'check md5 encode container data') + test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", data2), 'check sha1 encode container data') + test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", data3), 'check sha224 encode container data') + test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", data4), 'check sha256 encode container data') + test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", data5), 'check sha384 encode container data') + test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", data6), 'check sha512 encode container data') end From f00a86dc9f909a9f4c7f86dee933a106d5287e69 Mon Sep 17 00:00:00 2001 From: EngineerSmith <56016593+EngineerSmith@users.noreply.github.com> Date: Fri, 9 Feb 2024 01:15:45 +0000 Subject: [PATCH 3/5] Added change to changes.txt --- changes.txt | 1 + testing/tests/data.lua | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/changes.txt b/changes.txt index 83966c68f..8e0fb7af1 100644 --- a/changes.txt +++ b/changes.txt @@ -101,6 +101,7 @@ Released: N/A * Changed RevoluteJoint:getMotorTorque and WheelJoint:getMotorTorque to take 'dt' as a parameter instead of 'inverse_dt'. * Changed love.math.perlinNoise and simplexNoise to use higher precision numbers for its internal calculations. * Changed t.accelerometerjoystick startup flag in love.conf to unset by default. +* Changed love.data.hash to take in a container type * Renamed 'display' field to 'displayindex' in love.window.setMode/updateMode/getMode and love.conf. * Renamed love.graphics Text objects to TextBatch. diff --git a/testing/tests/data.lua b/testing/tests/data.lua index 06a68ed50..21b66b609 100644 --- a/testing/tests/data.lua +++ b/testing/tests/data.lua @@ -210,19 +210,19 @@ love.test.data.hash = function(test) local data6 = love.data.hash('data', 'sha512', 'helloworld') -- check encoded hash value matches what's expected for that algo -- test container string - test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", str1), 'check md5 encode container string') - test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", str2), 'check sha1 encode container string') - test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", str3), 'check sha224 encode container string') - test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", str4), 'check sha256 encode container string') - test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", str5), 'check sha384 encode container string') - test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", str6), 'check sha512 encode container string') + test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", str1), 'check string md5 encode') + test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", str2), 'check string sha1 encode') + test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", str3), 'check string sha224 encode') + test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", str4), 'check string sha256 encode') + test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", str5), 'check string sha384 encode') + test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", str6), 'check string sha512 encode') -- test container data - test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", data1), 'check md5 encode container data') - test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", data2), 'check sha1 encode container data') - test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", data3), 'check sha224 encode container data') - test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", data4), 'check sha256 encode container data') - test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", data5), 'check sha384 encode container data') - test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", data6), 'check sha512 encode container data') + test:assertEquals('fc5e038d38a57032085441e7fe7010b0', love.data.encode("string", "hex", data1), 'check data md5 encode') + test:assertEquals('6adfb183a4a2c94a2f92dab5ade762a47889a5a1', love.data.encode("string", "hex", data2), 'check data sha1 encode') + test:assertEquals('b033d770602994efa135c5248af300d81567ad5b59cec4bccbf15bcc', love.data.encode("string", "hex", data3), 'check data sha224 encode') + test:assertEquals('936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af', love.data.encode("string", "hex", data4), 'check data sha256 encode') + test:assertEquals('97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9', love.data.encode("string", "hex", data5), 'check data sha384 encode') + test:assertEquals('1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60', love.data.encode("string", "hex", data6), 'check data sha512 encode') end From cbf7e5680acd58ffe67910adc407a06e8617596e Mon Sep 17 00:00:00 2001 From: EngineerSmith <56016593+EngineerSmith@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:01:18 +0000 Subject: [PATCH 4/5] Added old functionality back, and marked it as deprecated --- src/modules/data/wrap_DataModule.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/modules/data/wrap_DataModule.cpp b/src/modules/data/wrap_DataModule.cpp index eafd37931..d77186563 100644 --- a/src/modules/data/wrap_DataModule.cpp +++ b/src/modules/data/wrap_DataModule.cpp @@ -302,22 +302,37 @@ int w_decode(lua_State *L) int w_hash(lua_State *L) { - ContainerType ctype = luax_checkcontainertype(L, 1); - const char *fstr = luaL_checkstring(L, 2); + int narg = 0; // used to change the arg position when using the deprecated function variant + + ContainerType ctype = CONTAINER_STRING; HashFunction::Function function; + + const char *str = luaL_checkstring(L, 1); + if (!getConstant(str, ctype)) + { + if (HashFunction::getConstant(str, function)) + { // check if the argument at 1 is a hash function; deprecated function variant + luax_markdeprecated(L, 1, "love.data.hash", API_FUNCTION_VARIANT, DEPRECATED_REPLACED, "variant with container return type parameter"); + narg = -1; + } + else + luax_enumerror(L, "container type", getConstants(ctype), str); + } + + const char *fstr = luaL_checkstring(L, 2 + narg); if (!HashFunction::getConstant(fstr, function)) return luax_enumerror(L, "hash function", HashFunction::getConstants(function), fstr); HashFunction::Value hashvalue; - if (lua_isstring(L, 3)) + if (lua_isstring(L, 3 + narg)) { size_t rawsize = 0; - const char *rawbytes = luaL_checklstring(L, 3, &rawsize); + const char *rawbytes = luaL_checklstring(L, 3 + narg, &rawsize); luax_catchexcept(L, [&](){ love::data::hash(function, rawbytes, rawsize, hashvalue); }); } else { - Data *rawdata = luax_checktype(L, 3); + Data *rawdata = luax_checktype(L, 3 + narg); luax_catchexcept(L, [&](){ love::data::hash(function, rawdata, hashvalue); }); } From 2aa4e4b3ea1522961f51d44a9f01f33b1db43030 Mon Sep 17 00:00:00 2001 From: EngineerSmith <56016593+EngineerSmith@users.noreply.github.com> Date: Tue, 13 Feb 2024 01:20:10 +0000 Subject: [PATCH 5/5] Updated changes.txt --- changes.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/changes.txt b/changes.txt index 8e0fb7af1..359a4cb34 100644 --- a/changes.txt +++ b/changes.txt @@ -101,7 +101,7 @@ Released: N/A * Changed RevoluteJoint:getMotorTorque and WheelJoint:getMotorTorque to take 'dt' as a parameter instead of 'inverse_dt'. * Changed love.math.perlinNoise and simplexNoise to use higher precision numbers for its internal calculations. * Changed t.accelerometerjoystick startup flag in love.conf to unset by default. -* Changed love.data.hash to take in a container type +* Changed love.data.hash to take in a container type. * Renamed 'display' field to 'displayindex' in love.window.setMode/updateMode/getMode and love.conf. * Renamed love.graphics Text objects to TextBatch. @@ -121,6 +121,7 @@ Released: N/A * Deprecated t.accelerometerjoystick in love.conf (replaced by love.sensor module). * Deprecated the variants of Mesh:attachAttribute and SpriteBatch:attachAttribute which accept a Mesh (replaced by variants which accept a Buffer). * Deprecated Texture:newImageData (replaced by love.graphics.readbackTexture). +* Deprecated love.data.hash (replaced by function variant, which takes container type). * Removed the variant of SpriteBatch:setColor() which turns off all previously set colors. * Removed the no-argument variant of love.graphics.setColorMask.