MCPcopy Create free account
hub / github.com/GlobedGD/globed2 / decode

Method decode

src/modules/scripting/data/EmbeddedScript.cpp:29–63  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

27namespace globed {
28
29Result<EmbeddedScript> EmbeddedScript::decode(std::span<const uint8_t> data) {
30 EmbeddedScript script{};
31
32 auto offsetRes = decodeHeader(data);
33 if (!offsetRes) {
34 return Err("Failed to parse embedded script header");
35 }
36
37 auto offset = *offsetRes;
38 data = data.subspan(offset);
39
40 qn::ByteReader reader{data};
41 size_t decompressedLen = MAP_UNWRAP(reader.readU32());
42 data = data.subspan(4);
43
44 if (decompressedLen > 512 * 1024) {
45 return Err("not decoding a script over 512kib: {} bytes", decompressedLen);
46 }
47
48 auto decompressedBuf = std::make_unique<uint8_t[]>(decompressedLen);
49 MAP_UNWRAP(qn::decompressZstd(data.data(), data.size(), decompressedBuf.get(), decompressedLen));
50 log::debug("Decompressed: {}", hexEncode(decompressedBuf.get(), decompressedLen));
51
52 reader = qn::ByteReader{decompressedBuf.get(), decompressedLen};
53 script.main = MAP_UNWRAP(reader.readBool());
54 script.filename = MAP_UNWRAP(reader.readStringU16());
55 script.content = MAP_UNWRAP(reader.readStringU32());
56
57 if (MAP_UNWRAP(reader.readBool())) {
58 script.signature = std::array<uint8_t, 32>{};
59 MAP_UNWRAP(reader.readBytes(script.signature->data(), 32));
60 }
61
62 return Ok(std::move(script));
63}
64
65std::optional<size_t> EmbeddedScript::decodeHeader(std::span<const uint8_t> data) {
66 // scan until a null byte is found

Callers

nothing calls this directly

Calls 3

hexEncodeFunction · 0.85
sizeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected