diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index dc9c9d7ca785f98ffa09306c15ee73ebabd1db62..e4ead929318e4ed57649dd54d93d4ecdde82cf1a 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -52,7 +52,7 @@ {"_type":"issue","id":"tarantool-protobuf-58u","title":"Runtime-mode decode_unsafe support (compile parallel _reader_unsafe closures)","description":"6bb landed _decode_unsafe in full mode only. Runtime mode (pb.decode(desc, buf) and the runtime-mode codegen wrapper) currently has no unsafe path because compile_readers builds f._reader closures that capture handler.decode by value — a runtime swap of scalar.string.decode wouldn't reach them. Implementation sketch: add M.compile_readers_unsafe(desc) that builds f._reader_unsafe by passing an alternate scalar table where scalar.string = scalar.bytes. Call it from pb.finalize_message alongside compile_readers. Add M.decode_unsafe(desc, buf) as a near-clone of decode_message that uses f._reader_unsafe and routes the map-fallback scalar dispatch through the unsafe scalar table. Then emit M.\u003cName\u003e_decode_unsafe = function(b) return pb.decode_unsafe(M.\u003cName\u003e_descriptor, b) end in gen.go's runtime-mode emitMessageWrappers for API symmetry with full mode.","status":"closed","priority":3,"issue_type":"task","assignee":"Eugene Blikh","owner":"bigbes@gmail.com","created_at":"2026-05-24T18:20:01Z","created_by":"Eugene Blikh","updated_at":"2026-05-24T19:11:20Z","started_at":"2026-05-24T18:59:16Z","closed_at":"2026-05-24T19:11:20Z","close_reason":"Runtime mode now exposes pb.decode_unsafe and M.\u003cName\u003e_decode_unsafe. codec.lua adds scalar_unsafe table, parameterizes build_reader/build_repeated_reader/decode_one to accept (scalar_tbl, decode_msg_fn, decode_group_fn), and adds compile_readers_unsafe + decode_message_unsafe + decode_group_unsafe + decode_extension_unsafe as literal clones with the three substitutions documented in codec.lua. Tests parameterized over both modes (14 cases), perf microbench shows ~8% gain in runtime mode (~20% in full mode). Conformance + JIT trace gates still pass. kyt remains open for unifying with C accel.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"tarantool-protobuf-kyt","title":"C runtime: skip_utf8_validation plan flag (unblock _decode_unsafe + C accel)","description":"6bb's full-mode _decode_unsafe skips the pb.c_runtime dispatch because runtime/pb/c/c_runtime.c calls is_valid_utf8 unconditionally on every string field. Result: when PB_ENABLE_C=1 the safe _decode wins on C but _decode_unsafe runs the inline Lua path and may be slower than C. To unify: add a skip_utf8_validation flag to the decode plan (or expose pb.c_runtime.decode_unsafe(plan, buf)), gate the is_valid_utf8 call on it in c_runtime.c, and wire _decode_unsafe to take the C path when c_runtime is available.","status":"closed","priority":3,"issue_type":"task","assignee":"Eugene Blikh","owner":"bigbes@gmail.com","created_at":"2026-05-24T18:20:01Z","created_by":"Eugene Blikh","updated_at":"2026-05-24T19:48:24Z","started_at":"2026-05-24T19:41:09Z","closed_at":"2026-05-24T19:48:24Z","close_reason":"C runtime: decode_unsafe(plan, buf) entrypoint added; full-mode codegen _decode_unsafe dispatches via pb.c_runtime.decode_unsafe; pb.decode_unsafe in init.lua routes through C when c_runtime loaded. dec_ctx.skip_utf8 gates is_valid_utf8. Suites: test 766/766, test-c 1057/1057. Perf on string-heavy Person (418B, 16 emails + 16 nicknames): C-unsafe 455 MB/s vs C-safe 364 MB/s (+25%) vs Lua-unsafe 142 MB/s (3.2x).","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"tarantool-protobuf-h8x","title":"decode_group: 'inner loop in root trace' abort makes trace topology bimodal","description":"decode_group (runtime/pb/codec.lua:1089) has an 'inner loop in root trace' abort condition — the per-tag while-loop is hot enough to be a trace root itself but is reached from another root trace that tries to extend through it.\n\nObserved via bench/jit_trace.lua probe in isolation on full/WithGroup_decode (group):\n Mode A (typical, ~9/10 runs): starts=38, stops=5, aborts=33 (recompile loop)\n Mode B (rare, ~1/10 runs): starts=102, stops=100, aborts=2 (side-trace cascade)\n\nPre-existing on master (probed before/after the compile_encode_body fix landed for tarantool-protobuf-21d). Neither mode breaks the gate (both have stops\u003e0, no FATAL aborts), but the bimodal behavior is unstable and confused 21d's measurements.\n\nFix direction: same idea as 21d — emit a generated per-descriptor decode body (or at minimum, refactor decode_group so the inner while-loop is a separate function the JIT can compile as its own root trace). Mirrors compile_encode_body from the 21d fix.","status":"closed","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-05-24T09:53:50Z","created_by":"Eugene Blikh","updated_at":"2026-05-24T14:18:34Z","closed_at":"2026-05-24T14:18:34Z","close_reason":"wont_fix","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"tarantool-protobuf-3qu","title":"bench/*.lua: apply mcode arena hardening + re-snapshot baseline.json if numbers shift","description":"Sibling to 3o2 (closed). The trace gate had an intermittent 'fails silently with no JIT' mode on macOS arm64 caused by the default mcode arena being too small for our codegen footprint. The fix in 3o2 added jit.opt.start('sizemcode=64','maxmcode=4096') to bench/jit_trace.lua and 20/20 runs are now stable.\n\nThe other bench scripts have the same risk and none have the fix:\n bench/bench.lua\n bench/lazy_bench.lua\n bench/profile.lua\n bench/shapes_bench.lua\n bench/starwing_bench.lua\n bench/wire_bench.lua\n bench/alloc_probe.lua\n\nThese scripts have larger codegen footprints than the trace gate (they require more modules, run for longer, and accumulate more traces), so they're MORE likely to hit the same intermittent JIT-fails-silently mode than the gate was. When that happens the script reports throughput that includes interpreter-only iterations — underreporting the real numbers without any diagnostic.\n\nConcrete steps:\n1) Add the jit.opt.start line to each script (same comment block as 3o2, or factor into a tiny bench/_setup.lua included from each).\n2) Re-run bench/bench.lua --baseline to refresh bench/baseline.json.\n3) Re-run bench/bench.lua --print and update the MB/s tables in bench/COMPARISON.md if any number moved \u003e5%.\n4) bench/COMPARISON.md notes 'Numbers will drift run-to-run by 5–10%' — verify that variance band shrinks after the fix.\n\nalloc_probe.lua doesn't need it (allocator counters don't depend on JIT), but adding the line costs nothing and keeps the bench/ scripts uniform.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-05-18T17:29:35Z","created_by":"Eugene Blikh","updated_at":"2026-05-18T17:29:35Z","dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"tarantool-protobuf-auj","title":"Quantify and address Person_decode multi-byte varint side-trace bridge (intermittent ~1/5 runs)","description":"Trace-topology finding from bench/jit_trace.lua. The 'full/Person_decode multi-byte varint' check intermittently reports one bridge — a side trace whose linktype=interpreter, costing interp dispatch per multi-byte tag/length-prefix on the hot decode path.\n\nCaptured output (1–2 runs out of 10):\n\n [ OK ] full/Person_decode multi-byte varint (stops=10, bridges=1)\n info: bridge tr9 side-of tr5 hello_pb.lua:997 pc=55\n\ntr5 is the Person_decode while loop (entry at hello_pb.lua:997). pc=55 falls inside the wire.decode_tag inlined fast path: the guard 'if b \u003c 0x80' fails on a 2+ byte tag, exits to side trace tr9, which contains the multi-byte continuation loop but can't self-link back to the parent — drops to the interpreter to walk the rest of the dispatcher and re-enter on next iteration.\n\nExisting context:\n- wire.lua duplicates the 1-byte varint fast path at every hot decode call site precisely because LuaJIT side traces can't stitch returns from an inlined helper frame. That works for the 1-byte case. The 2+ byte case still calls decode_varint() (the multi-byte fallback) which has its own internal while loop.\n- gcy (inline nested decode) and kot (localize wire.* upvalues) are the structurally related items already filed; they don't cover this specific bridge though.\n\nWhy P3 (not P2):\n- Intermittent (~1/5 runs in the gate). The trace topology is mostly stable.\n- The multi-byte tag path is \u003c 5% of typical RPC payloads (field IDs 1..15 = 1-byte tag, lengths \u003c 128 = 1-byte length). Larger impact would require \u003e127-byte fields or field IDs \u003e= 16.\n- The 'multi-byte varint' fixture in bench/jit_trace.lua (200-byte name + lucky_numbers including 200000, 500000) was added specifically to expose this — and it does, intermittently. The intermittency is the JIT settling on different trace shapes across runs.\n\nConcrete approaches to investigate:\n1) Inline a 2-byte varint fast path inside decode_tag (and decode_string LEN prefix, etc.) — 'if b \u003c 0x80 then ... elseif b2 \u003c 0x80 then ...' — keeping the 3+ byte case in the fallback. Covers field IDs up to 4095 and length prefixes up to 16383, which is almost all real payloads.\n2) Profile-driven: run bench/jit_trace.lua 100x with a fixed seed, collect bridges by location, and decide whether the intermittency rate justifies (1) at all.\n\nAcceptance: 50 consecutive runs of bench/jit_trace.lua report bridges=0 for full/Person_decode multi-byte varint, OR a measured throughput improvement on the bench at the multi-byte-varint fixture.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-05-18T17:27:36Z","created_by":"Eugene Blikh","updated_at":"2026-05-18T17:27:36Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"tarantool-protobuf-auj","title":"Quantify and address Person_decode multi-byte varint side-trace bridge (intermittent ~1/5 runs)","description":"Trace-topology finding from bench/jit_trace.lua. The 'full/Person_decode multi-byte varint' check intermittently reports one bridge — a side trace whose linktype=interpreter, costing interp dispatch per multi-byte tag/length-prefix on the hot decode path.\n\nCaptured output (1–2 runs out of 10):\n\n [ OK ] full/Person_decode multi-byte varint (stops=10, bridges=1)\n info: bridge tr9 side-of tr5 hello_pb.lua:997 pc=55\n\ntr5 is the Person_decode while loop (entry at hello_pb.lua:997). pc=55 falls inside the wire.decode_tag inlined fast path: the guard 'if b \u003c 0x80' fails on a 2+ byte tag, exits to side trace tr9, which contains the multi-byte continuation loop but can't self-link back to the parent — drops to the interpreter to walk the rest of the dispatcher and re-enter on next iteration.\n\nExisting context:\n- wire.lua duplicates the 1-byte varint fast path at every hot decode call site precisely because LuaJIT side traces can't stitch returns from an inlined helper frame. That works for the 1-byte case. The 2+ byte case still calls decode_varint() (the multi-byte fallback) which has its own internal while loop.\n- gcy (inline nested decode) and kot (localize wire.* upvalues) are the structurally related items already filed; they don't cover this specific bridge though.\n\nWhy P3 (not P2):\n- Intermittent (~1/5 runs in the gate). The trace topology is mostly stable.\n- The multi-byte tag path is \u003c 5% of typical RPC payloads (field IDs 1..15 = 1-byte tag, lengths \u003c 128 = 1-byte length). Larger impact would require \u003e127-byte fields or field IDs \u003e= 16.\n- The 'multi-byte varint' fixture in bench/jit_trace.lua (200-byte name + lucky_numbers including 200000, 500000) was added specifically to expose this — and it does, intermittently. The intermittency is the JIT settling on different trace shapes across runs.\n\nConcrete approaches to investigate:\n1) Inline a 2-byte varint fast path inside decode_tag (and decode_string LEN prefix, etc.) — 'if b \u003c 0x80 then ... elseif b2 \u003c 0x80 then ...' — keeping the 3+ byte case in the fallback. Covers field IDs up to 4095 and length prefixes up to 16383, which is almost all real payloads.\n2) Profile-driven: run bench/jit_trace.lua 100x with a fixed seed, collect bridges by location, and decide whether the intermittency rate justifies (1) at all.\n\nAcceptance: 50 consecutive runs of bench/jit_trace.lua report bridges=0 for full/Person_decode multi-byte varint, OR a measured throughput improvement on the bench at the multi-byte-varint fixture.","status":"closed","priority":3,"issue_type":"task","assignee":"Eugene Blikh","owner":"bigbes@gmail.com","created_at":"2026-05-18T17:27:36Z","created_by":"Eugene Blikh","updated_at":"2026-05-24T20:08:54Z","started_at":"2026-05-24T19:51:38Z","closed_at":"2026-05-24T20:08:54Z","close_reason":"Codegen: extended inline tag fast path (1-byte → 1+2-byte) and inline LEN fast path (1-byte → 1+2-byte) in emitInlineDecode / emitInlineStringBytesScalar / emitInlineStringBytesRepeated. Covers field IDs 1..4095 and string/bytes lengths 0..16383 without leaving the parent trace. Acceptance: criterion #2 met — multi-byte-varint Person decode 31.6→34.7 MB/s (+10%) on the big_person fixture (200B name + multi-byte packed lucky_numbers), small Person unchanged at 14 MB/s. Bridge rate now 4/100 (down from 10-20% at issue filing). Residual bridges have migrated from the tag site to the packed-varint inner loop (wire.decode_int32 in a packed payload); fully eliminating them would require per-scalar-type inline 2-byte paths in the packed-loop emitter — diminishing-returns territory, skipped. Suites: test 766/766, test-c 1057/1057.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"tarantool-protobuf-3e6","title":"Encoder: fiber-local recycled output buffer (Tarantool-specific)","description":"The 136 B/op encode floor is the 'local out, n = {}, 0' workspace table allocated per top-level encode call. Tarantool ships a per-fiber ibuf via require('buffer'); could grab one from a pool, reset it on each top-level encode, write into it, then ffi.string(ibuf.rpos, ibuf:size()) at the end.\n\nTradeoffs:\n - Saves the workspace alloc (~136 B per top-level call + ~136 B per nested message).\n - Adds fiber-local state — non-Tarantool LuaJIT runs would need a different path or none.\n - Subsumed by lkz (single-pass two-phase) which goes directly to a single buffer without intermediate strings. Worth filing as a smaller alternative path in case lkz proves too invasive to land.\n - drm notes record two prior ibuf prototypes (stashed) that regressed by ~2x because per-byte b:alloc(1) was 20x interpreter-dispatch-bound. This proposal avoids that pitfall only because it composes with h8v (codegen FFI direct writes that bypass alloc(1)).\n\nConcrete path: only useful in combination with h8v. Without h8v this would just shift the alloc from 'out table' to 'output string' without removing any per-string varint allocation in the field bodies — net neutral on alloc and worse on speed.","notes":"Sketch: shared scratch buffer per encoding, capacity exposed as ffi cdata pointer + length. Codegen emits 'local _buf = pb.codec.acquire_buf(); local _off = 0; ...; return pb.codec.finalize_buf(_buf, _off)'. acquire_buf returns a pre-allocated buffer of growing capacity; finalize_buf returns a string and recycles. Care needed for recursive encode calls (nested message encoding into the same buffer).","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-05-18T17:15:08Z","created_by":"Eugene Blikh","updated_at":"2026-05-18T17:15:08Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"tarantool-protobuf-0gg","title":"Decoder: investigate field-id dispatch as binary search or jump table","description":"Generated Type_decode bodies use linear 'if id == 1 elseif id == 2 ...' chains. For Person (~15 fields) the chain is short and the comparisons cheap. For messages with 30+ fields the linear walk to a high-id tag costs N comparisons per occurrence.\n\nOpen question: does LuaJIT's IR already lower this to a switch/jump? If yes, no work needed. If no, three options:\n\n 1. Codegen-emit a balanced if-elseif tree (binary search) when field count exceeds threshold.\n 2. For messages where field IDs are dense and small, emit a numeric branch table: 'local _f = _dispatch[id]; if _f then return _f(buf, pos, result) end'. Closure-per-field has setup cost but avoids the dispatch cost on every tag.\n 3. Sort by frequency (impossible to know at codegen time without profiling input). Skip this option.\n\nPre-work: jit.dump on Person_decode to check whether LuaJIT collapses the if-elseif. If it does, close as won't-fix; if it doesn't, decide between (1) and (2).\n\nLowest priority of the perf items because: (a) we don't know it's a problem yet, (b) Person profile shows decode_string + decode_tag + utf8 dominate, not the if-elseif walk.","notes":"Recent profile (Person 1KB): line 1007 (decode_tag call) is 14% of generated body time, and line 1021 (list append) is 24%. Linear if-elseif walk doesn't show up as a hotspot for Person, but Person has only 15 fields. Needs a bigger fixture to manifest.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-05-18T17:15:07Z","created_by":"Eugene Blikh","updated_at":"2026-05-18T17:15:07Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"tarantool-protobuf-1bo","title":"Codegen: chunk oversized generated decode bodies into per-range helpers","description":"test_messages_proto3_pb.lua is 4212 lines — the conformance fixture has so many fields that a single Type_decode body exceeds LuaJIT's inline budget and trace size limits. Symptom (to verify): bench/jit_trace.lua trace aborts on the big conformance message, despite no NYI bytecodes in the body.\n\nFix: when a message has \u003eN fields (threshold to find empirically; LuaJIT defaults LJ_TRACE_MAX_BC=8000), codegen splits the if-elseif chain into per-range helpers: _decode_fields_1_to_15, _decode_fields_16_to_31, etc. The top-level Type_decode dispatches to the right chunk by id range:\n\n if id \u003c= 15 then\n pos = _decode_fields_1_to_15(buf, pos, id, wt, result)\n elseif id \u003c= 31 then\n pos = _decode_fields_16_to_31(buf, pos, id, wt, result)\n ...\n end\n\nEach chunk is small enough to JIT-compile cleanly. Adds one function call per tag, but only on messages large enough to need it — small messages stay inline.\n\nThe range size and split threshold need measurement. Start with: split when message has \u003e32 fields, into chunks of 16. Measure throughput on conformance message before/after to validate the trade.","notes":"Pre-work: confirm the abort is real by running bench/jit_trace.lua against a conformance-like fixture and checking the FATAL traceerr codes. If LuaJIT compiles the 4212-line body fine, this is a non-issue.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-05-18T17:14:39Z","created_by":"Eugene Blikh","updated_at":"2026-05-18T17:14:39Z","dependency_count":0,"dependent_count":0,"comment_count":0} diff --git a/cmd/protoc-gen-tarantool/internal/gen/inline.go b/cmd/protoc-gen-tarantool/internal/gen/inline.go index ddfd4a2316d14fdb2fb8786a8f33e2f770e74d41..494a16a637e984626a283639dc603784e82ffddf 100644 --- a/cmd/protoc-gen-tarantool/internal/gen/inline.go +++ b/cmd/protoc-gen-tarantool/internal/gen/inline.go @@ -853,12 +853,13 @@ } w.line(" while pos <= len do") w.line(" local _tag_start = pos") w.line(" local id, wt") - // Inline the 1-byte tag fast path. The protobuf spec encodes field - // numbers 1..15 (with any wire type) in a single byte, and the - // codegen orderings + our test corpora keep nearly every dispatch - // here on the fast branch. Removes the wire.decode_tag function - // frame for the dominant case; multi-byte tags fall back to the - // generic decoder. + // Inline the 1-byte tag fast path (field numbers 1..15) and the + // 2-byte tag fast path (field numbers 16..4095) directly. Together + // these cover almost every real RPC payload — the >=3-byte fallback + // only fires for field numbers >= 4096. Inlining literally at the + // dispatch site keeps the side trace inside the parent's own frame + // when the 1-byte guard fails, instead of bridging to interpreter + // through wire.decode_tag's frame return (auj). (kot, aah, auj) w.line(" local _b = string_byte(buf, pos)") w.line(" if _b ~= nil and _b < 0x80 then") w.line(" wt = band(_b, 7)") @@ -866,6 +867,18 @@ w.line(" if wt >= 6 then error(\"illegal wire type \" .. wt, 0) end") w.line(" id = rshift(_b, 3)") w.line(" if id == 0 then error(\"illegal field number 0\", 0) end") w.line(" pos = pos + 1") + w.line(" elseif _b ~= nil and pos < len then") + w.line(" local _b2 = string_byte(buf, pos + 1)") + w.line(" if _b2 < 0x80 then") + w.line(" if _b2 == 0 then error(\"overlong tag varint at offset \" .. pos, 0) end") + w.line(" local _v = _b - 128 + _b2 * 128") + w.line(" wt = band(_v, 7)") + w.line(" if wt >= 6 then error(\"illegal wire type \" .. wt, 0) end") + w.line(" id = rshift(_v, 3)") + w.line(" pos = pos + 2") + w.line(" else") + w.line(" id, wt, pos = wire.decode_tag(buf, pos)") + w.line(" end") w.line(" else") w.line(" id, wt, pos = wire.decode_tag(buf, pos)") w.line(" end") @@ -1121,11 +1134,12 @@ return 0 } // emitInlineStringBytesScalar emits the singular string/bytes decode with the -// 1-byte LEN fast path inlined. Falls back to `wire.decode_` for lengths -// >= 128. UTF-8 validation runs only for `string`, not `bytes`. When -// validateUTF8 is false the inline check is dropped and the >=128-byte -// fallback for strings is routed through wire.decode_bytes (same shape, no -// utf8_len call). (a6n, 6bb) +// 1-byte LEN fast path (lengths 0..127) and the 2-byte LEN fast path (lengths +// 128..16383) inlined directly. Falls back to `wire.decode_` only for +// lengths >= 16384. UTF-8 validation runs only for `string`, not `bytes`. When +// validateUTF8 is false the inline check is dropped and the fallback for +// strings is routed through wire.decode_bytes (same shape, no utf8_len call). +// (a6n, 6bb, auj) func emitInlineStringBytesScalar(w *writer, st, dst string, validateUTF8 bool) { wireCall := st if st == "string" && !validateUTF8 { @@ -1142,6 +1156,25 @@ w.line(" if utf8_len(_s) == nil then error(\"invalid UTF-8 in string field at offset \" .. pos, 0) end") } w.line(" %s = _s", dst) w.line(" pos = _epos") + w.line(" elseif _lb ~= nil and pos < len then") + w.line(" local _lb2 = string_byte(buf, pos + 1)") + w.line(" if _lb2 ~= nil and _lb2 < 0x80 then") + w.line(" if _lb2 == 0 then error(\"overlong LEN varint at offset \" .. pos, 0) end") + w.line(" local _ln = _lb - 128 + _lb2 * 128") + w.line(" local _np = pos + 2") + w.line(" local _epos = _np + _ln") + w.line(" if _epos - 1 > len then error(\"truncated LEN at offset \" .. pos, 0) end") + w.line(" local _s = buf:sub(_np, _epos - 1)") + if st == "string" && validateUTF8 { + w.line(" if utf8_len(_s) == nil then error(\"invalid UTF-8 in string field at offset \" .. pos, 0) end") + } + w.line(" %s = _s", dst) + w.line(" pos = _epos") + w.line(" else") + w.line(" local val") + w.line(" val, pos = wire.decode_%s(buf, pos)", wireCall) + w.line(" %s = val", dst) + w.line(" end") w.line(" else") w.line(" local val") w.line(" val, pos = wire.decode_%s(buf, pos)", wireCall) @@ -1150,7 +1183,9 @@ w.line(" end") } // emitInlineStringBytesRepeated mirrors emitInlineStringBytesScalar but -// appends to the per-field list via the `_n_` counter. (a6n, 6bb) +// appends to the per-field list via the `_n_` counter. Both 1-byte and +// 2-byte LEN fast paths are inlined; falls back only for lengths >= 16384. +// (a6n, 6bb, auj) func emitInlineStringBytesRepeated(w *writer, st, cnt string, validateUTF8 bool) { wireCall := st if st == "string" && !validateUTF8 { @@ -1167,6 +1202,25 @@ w.line(" if utf8_len(_s) == nil then error(\"invalid UTF-8 in string field at offset \" .. pos, 0) end") } w.line(" %s = %s + 1; list[%s] = _s", cnt, cnt, cnt) w.line(" pos = _epos") + w.line(" elseif _lb ~= nil and pos < len then") + w.line(" local _lb2 = string_byte(buf, pos + 1)") + w.line(" if _lb2 ~= nil and _lb2 < 0x80 then") + w.line(" if _lb2 == 0 then error(\"overlong LEN varint at offset \" .. pos, 0) end") + w.line(" local _ln = _lb - 128 + _lb2 * 128") + w.line(" local _np = pos + 2") + w.line(" local _epos = _np + _ln") + w.line(" if _epos - 1 > len then error(\"truncated LEN at offset \" .. pos, 0) end") + w.line(" local _s = buf:sub(_np, _epos - 1)") + if st == "string" && validateUTF8 { + w.line(" if utf8_len(_s) == nil then error(\"invalid UTF-8 in string field at offset \" .. pos, 0) end") + } + w.line(" %s = %s + 1; list[%s] = _s", cnt, cnt, cnt) + w.line(" pos = _epos") + w.line(" else") + w.line(" local val") + w.line(" val, pos = wire.decode_%s(buf, pos)", wireCall) + w.line(" %s = %s + 1; list[%s] = val", cnt, cnt, cnt) + w.line(" end") w.line(" else") w.line(" local val") w.line(" val, pos = wire.decode_%s(buf, pos)", wireCall) diff --git a/examples/expected/full/c_int64/c_int64_pb.lua b/examples/expected/full/c_int64/c_int64_pb.lua index 6e81761c8beb1ddefca590e0e719030ce222a226..962568f25184ef2a2d0e3e945b9a866d0f608e69 100644 --- a/examples/expected/full/c_int64/c_int64_pb.lua +++ b/examples/expected/full/c_int64/c_int64_pb.lua @@ -101,6 +101,7 @@ ---@param b string ---@return c_int64.Wide function M.Wide_decode(buf) + local decode_tag = wire.decode_tag local _d = M.Wide_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -122,8 +123,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -164,6 +177,7 @@ ---@param b string ---@return c_int64.Wide function M.Wide_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.Wide_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -185,8 +199,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val diff --git a/examples/expected/full/c_nested/c_nested_pb.lua b/examples/expected/full/c_nested/c_nested_pb.lua index 30156550917eaa44247bf53fffed4e0e93c83a8f..63e2c67351b3a1140d673b0d2537fe40907903d0 100644 --- a/examples/expected/full/c_nested/c_nested_pb.lua +++ b/examples/expected/full/c_nested/c_nested_pb.lua @@ -146,6 +146,7 @@ ---@param b string ---@return c_nested.L1 function M.L1_decode(buf) + local decode_tag = wire.decode_tag local _d = M.L1_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -167,8 +168,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -202,6 +215,7 @@ ---@param b string ---@return c_nested.L1 function M.L1_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.L1_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -223,8 +237,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -307,6 +333,7 @@ ---@param b string ---@return c_nested.L2 function M.L2_decode(buf) + local decode_tag = wire.decode_tag local _d = M.L2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -328,8 +355,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -363,6 +402,7 @@ ---@param b string ---@return c_nested.L2 function M.L2_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.L2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -384,8 +424,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -468,6 +520,7 @@ ---@param b string ---@return c_nested.L3 function M.L3_decode(buf) + local decode_tag = wire.decode_tag local _d = M.L3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -489,8 +542,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -524,6 +589,7 @@ ---@param b string ---@return c_nested.L3 function M.L3_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.L3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -545,8 +611,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -629,6 +707,7 @@ ---@param b string ---@return c_nested.L4 function M.L4_decode(buf) + local decode_tag = wire.decode_tag local _d = M.L4_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -650,8 +729,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -685,6 +776,7 @@ ---@param b string ---@return c_nested.L4 function M.L4_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.L4_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -706,8 +798,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -777,6 +881,7 @@ ---@param b string ---@return c_nested.L5 function M.L5_decode(buf) + local decode_tag = wire.decode_tag local _d = M.L5_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -798,8 +903,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 2 then local val @@ -824,6 +941,7 @@ ---@param b string ---@return c_nested.L5 function M.L5_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.L5_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -845,8 +963,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 2 then local val diff --git a/examples/expected/full/c_repeated/c_repeated_pb.lua b/examples/expected/full/c_repeated/c_repeated_pb.lua index 9f1d4aa11d07050d2ddf0eda3c350823e51fa9d7..53dca64d0c09a1b40dd5486eb668126389b4d411 100644 --- a/examples/expected/full/c_repeated/c_repeated_pb.lua +++ b/examples/expected/full/c_repeated/c_repeated_pb.lua @@ -135,6 +135,8 @@ ---@param b string ---@return c_repeated.Inner function M.Inner_decode(buf) + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.Inner_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -156,8 +158,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -173,9 +187,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.s = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.s = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.s = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.s = val end else @@ -197,6 +228,8 @@ ---@param b string ---@return c_repeated.Inner function M.Inner_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.Inner_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -218,8 +251,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -234,9 +279,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.s = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.s = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.s = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.s = val end else @@ -550,6 +611,7 @@ ---@param b string ---@return c_repeated.Holder function M.Holder_decode(buf) local decode_bool = wire.decode_bool + local decode_bytes = wire.decode_bytes local decode_double = wire.decode_double local decode_fixed32 = wire.decode_fixed32 local decode_fixed64 = wire.decode_fixed64 @@ -558,6 +620,8 @@ local decode_int32 = wire.decode_int32 local decode_int64 = wire.decode_int64 local decode_len = wire.decode_len local decode_sint32 = wire.decode_sint32 + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local decode_uint32 = wire.decode_uint32 local _d = M.Holder_descriptor if pb.c_runtime ~= nil then @@ -595,8 +659,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then if wt == 2 then @@ -838,9 +914,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_strings = _n_strings + 1; list[_n_strings] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_strings = _n_strings + 1; list[_n_strings] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_strings = _n_strings + 1; list[_n_strings] = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) _n_strings = _n_strings + 1; list[_n_strings] = val end elseif id == 31 then @@ -854,9 +947,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_blobs = _n_blobs + 1; list[_n_blobs] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_blobs = _n_blobs + 1; list[_n_blobs] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_blobs = _n_blobs + 1; list[_n_blobs] = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) _n_blobs = _n_blobs + 1; list[_n_blobs] = val end elseif id == 40 then @@ -894,6 +1003,7 @@ local decode_int32 = wire.decode_int32 local decode_int64 = wire.decode_int64 local decode_len = wire.decode_len local decode_sint32 = wire.decode_sint32 + local decode_tag = wire.decode_tag local decode_uint32 = wire.decode_uint32 local _d = M.Holder_descriptor if pb.c_runtime ~= nil then @@ -931,8 +1041,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then if wt == 2 then @@ -1173,6 +1295,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_strings = _n_strings + 1; list[_n_strings] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_strings = _n_strings + 1; list[_n_strings] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_strings = _n_strings + 1; list[_n_strings] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1189,6 +1327,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_blobs = _n_blobs + 1; list[_n_blobs] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_blobs = _n_blobs + 1; list[_n_blobs] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_blobs = _n_blobs + 1; list[_n_blobs] = val + end else local val val, pos = decode_bytes(buf, pos) diff --git a/examples/expected/full/conformance/conformance_pb.lua b/examples/expected/full/conformance/conformance_pb.lua index e12cab3c60363ce3a54adeb1996552f5a7e236a2..093431a76ea04b959ba69e1740eb079bf7edefb1 100644 --- a/examples/expected/full/conformance/conformance_pb.lua +++ b/examples/expected/full/conformance/conformance_pb.lua @@ -261,6 +261,7 @@ ---@param b string ---@return conformance.TestStatus function M.TestStatus_decode(buf) local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.TestStatus_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -282,8 +283,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -295,6 +308,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.name = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.name = val + end else local val val, pos = decode_string(buf, pos) @@ -310,6 +340,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.failure_message = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.failure_message = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.failure_message = val + end else local val val, pos = decode_string(buf, pos) @@ -325,6 +372,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.matched_name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.matched_name = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.matched_name = val + end else local val val, pos = decode_string(buf, pos) @@ -350,6 +414,7 @@ ---@param b string ---@return conformance.TestStatus function M.TestStatus_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.TestStatus_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -371,8 +436,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -383,6 +460,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.name = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.name = val + end else local val val, pos = decode_bytes(buf, pos) @@ -397,6 +490,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.failure_message = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.failure_message = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.failure_message = val + end else local val val, pos = decode_bytes(buf, pos) @@ -411,6 +520,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.matched_name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.matched_name = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.matched_name = val + end else local val val, pos = decode_bytes(buf, pos) @@ -481,6 +606,7 @@ ---@param b string ---@return conformance.FailureSet function M.FailureSet_decode(buf) + local decode_tag = wire.decode_tag local _d = M.FailureSet_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -503,8 +629,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 2 then local list = result.test @@ -531,6 +669,7 @@ ---@param b string ---@return conformance.FailureSet function M.FailureSet_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.FailureSet_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -553,8 +692,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 2 then local list = result.test @@ -723,7 +874,9 @@ ---@param b string ---@return conformance.ConformanceRequest function M.ConformanceRequest_decode(buf) + local decode_bytes = wire.decode_bytes local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local decode_varint = wire.decode_varint local varint_to_int32 = wire.varint_to_int32 local _d = M.ConformanceRequest_descriptor @@ -747,8 +900,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -759,9 +924,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.protobuf_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.protobuf_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.protobuf_payload = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.protobuf_payload = val end result.json_payload = nil @@ -777,6 +958,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.json_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.json_payload = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.json_payload = val + end else local val val, pos = decode_string(buf, pos) @@ -795,6 +993,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.jspb_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.jspb_payload = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.jspb_payload = val + end else local val val, pos = decode_string(buf, pos) @@ -813,6 +1028,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.text_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.text_payload = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.text_payload = val + end else local val val, pos = decode_string(buf, pos) @@ -835,6 +1067,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.message_type = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.message_type = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.message_type = val + end else local val val, pos = decode_string(buf, pos) @@ -877,6 +1126,7 @@ ---@param b string ---@return conformance.ConformanceRequest function M.ConformanceRequest_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local decode_varint = wire.decode_varint local varint_to_int32 = wire.varint_to_int32 local _d = M.ConformanceRequest_descriptor @@ -900,8 +1150,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -912,6 +1174,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.protobuf_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.protobuf_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.protobuf_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -929,6 +1207,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.json_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.json_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.json_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -946,6 +1240,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.jspb_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.jspb_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.jspb_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -963,6 +1273,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.text_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.text_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.text_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -984,6 +1310,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.message_type = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.message_type = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.message_type = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1174,7 +1516,9 @@ ---@param b string ---@return conformance.ConformanceResponse function M.ConformanceResponse_decode(buf) + local decode_bytes = wire.decode_bytes local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.ConformanceResponse_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1196,8 +1540,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -1209,6 +1565,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.parse_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.parse_error = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.parse_error = val + end else local val val, pos = decode_string(buf, pos) @@ -1232,6 +1605,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.serialize_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.serialize_error = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.serialize_error = val + end else local val val, pos = decode_string(buf, pos) @@ -1255,6 +1645,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.timeout_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.timeout_error = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.timeout_error = val + end else local val val, pos = decode_string(buf, pos) @@ -1278,6 +1685,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.runtime_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.runtime_error = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.runtime_error = val + end else local val val, pos = decode_string(buf, pos) @@ -1300,9 +1724,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.protobuf_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.protobuf_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.protobuf_payload = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.protobuf_payload = val end result.parse_error = nil @@ -1323,6 +1763,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.json_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.json_payload = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.json_payload = val + end else local val val, pos = decode_string(buf, pos) @@ -1346,6 +1803,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.skipped = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.skipped = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.skipped = val + end else local val val, pos = decode_string(buf, pos) @@ -1369,6 +1843,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.jspb_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.jspb_payload = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.jspb_payload = val + end else local val val, pos = decode_string(buf, pos) @@ -1392,6 +1883,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.text_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.text_payload = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.text_payload = val + end else local val val, pos = decode_string(buf, pos) @@ -1425,6 +1933,7 @@ ---@param b string ---@return conformance.ConformanceResponse function M.ConformanceResponse_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.ConformanceResponse_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1446,8 +1955,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -1458,6 +1979,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.parse_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.parse_error = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.parse_error = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1480,6 +2017,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.serialize_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.serialize_error = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.serialize_error = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1502,6 +2055,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.timeout_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.timeout_error = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.timeout_error = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1524,6 +2093,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.runtime_error = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.runtime_error = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.runtime_error = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1546,6 +2131,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.protobuf_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.protobuf_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.protobuf_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1568,6 +2169,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.json_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.json_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.json_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1590,6 +2207,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.skipped = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.skipped = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.skipped = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1612,6 +2245,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.jspb_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.jspb_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.jspb_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1634,6 +2283,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.text_payload = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.text_payload = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.text_payload = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1702,6 +2367,7 @@ ---@param b string ---@return conformance.JspbEncodingConfig function M.JspbEncodingConfig_decode(buf) + local decode_tag = wire.decode_tag local _d = M.JspbEncodingConfig_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1723,8 +2389,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -1749,6 +2427,7 @@ ---@param b string ---@return conformance.JspbEncodingConfig function M.JspbEncodingConfig_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.JspbEncodingConfig_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1770,8 +2449,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val diff --git a/examples/expected/full/hello/hello_pb.lua b/examples/expected/full/hello/hello_pb.lua index fddbb8075023bd700284118bcb86945ca3285ed8..1b6978e0da1f5a546ca653a38a3c41c6bbc3c6bc 100644 --- a/examples/expected/full/hello/hello_pb.lua +++ b/examples/expected/full/hello/hello_pb.lua @@ -278,6 +278,8 @@ ---@param b string ---@return hello.Result function M.Result_decode(buf) local decode_int32 = wire.decode_int32 + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.Result_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -299,8 +301,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -316,9 +330,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.text = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.text = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.text = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.text = val end result.code = nil @@ -359,7 +390,9 @@ ---@param b string ---@return hello.Result function M.Result_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes local decode_int32 = wire.decode_int32 + local decode_tag = wire.decode_tag local _d = M.Result_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -381,8 +414,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -397,9 +442,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.text = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.text = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.text = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.text = val end result.code = nil @@ -482,6 +543,8 @@ ---@param b string ---@return hello.HelloRequest function M.HelloRequest_decode(buf) + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.HelloRequest_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -503,8 +566,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -516,9 +591,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.name = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.name = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.name = val end else @@ -540,6 +632,8 @@ ---@param b string ---@return hello.HelloRequest function M.HelloRequest_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.HelloRequest_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -561,8 +655,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -573,9 +679,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.name = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.name = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.name = val end else @@ -639,6 +761,8 @@ ---@param b string ---@return hello.HelloReply function M.HelloReply_decode(buf) + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.HelloReply_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -660,8 +784,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -673,9 +809,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.greeting = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.greeting = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.greeting = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.greeting = val end else @@ -697,6 +850,8 @@ ---@param b string ---@return hello.HelloReply function M.HelloReply_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.HelloReply_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -718,8 +873,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -730,9 +897,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.greeting = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.greeting = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.greeting = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.greeting = val end else @@ -941,6 +1124,8 @@ ---@param b string ---@return hello.Event function M.Event_decode(buf) local decode_len = wire.decode_len + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.Event_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -962,8 +1147,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -975,9 +1172,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.title = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.title = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.title = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.title = val end elseif id == 2 then @@ -1043,7 +1257,9 @@ ---@param b string ---@return hello.Event function M.Event_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.Event_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1065,8 +1281,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -1077,9 +1305,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.title = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.title = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.title = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.title = val end elseif id == 2 then @@ -1219,6 +1463,7 @@ ---@param b string ---@return hello.Address function M.Address_decode(buf) local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.Address_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1240,8 +1485,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -1253,6 +1510,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.street = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.street = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.street = val + end else local val val, pos = decode_string(buf, pos) @@ -1268,6 +1542,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.city = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.city = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.city = val + end else local val val, pos = decode_string(buf, pos) @@ -1287,6 +1578,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.apartment = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.apartment = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.apartment = val + end else local val val, pos = decode_string(buf, pos) @@ -1312,6 +1620,7 @@ ---@param b string ---@return hello.Address function M.Address_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.Address_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1333,8 +1642,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -1345,6 +1666,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.street = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.street = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.street = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1359,6 +1696,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.city = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.city = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.city = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1377,6 +1730,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.apartment = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.apartment = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.apartment = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1643,6 +2012,7 @@ ---@param b string ---@return hello.Person function M.Person_decode(buf) + local decode_bytes = wire.decode_bytes local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len local decode_string = wire.decode_string @@ -1672,6 +2042,18 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else id, wt, pos = decode_tag(buf, pos) end @@ -1685,6 +2067,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.name = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.name = val + end else local val val, pos = decode_string(buf, pos) @@ -1706,6 +2105,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_emails = _n_emails + 1; list[_n_emails] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_emails = _n_emails + 1; list[_n_emails] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_emails = _n_emails + 1; list[_n_emails] = val + end else local val val, pos = decode_string(buf, pos) @@ -1758,9 +2174,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.avatar = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.avatar = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.avatar = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.avatar = val end elseif id == 9 then @@ -1882,6 +2314,18 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else id, wt, pos = decode_tag(buf, pos) end @@ -1894,6 +2338,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.name = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.name = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1914,6 +2374,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_emails = _n_emails + 1; list[_n_emails] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_emails = _n_emails + 1; list[_n_emails] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_emails = _n_emails + 1; list[_n_emails] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -1966,6 +2442,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.avatar = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.avatar = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.avatar = val + end else local val val, pos = decode_bytes(buf, pos) diff --git a/examples/expected/full/proto2_basic/proto2_basic_pb.lua b/examples/expected/full/proto2_basic/proto2_basic_pb.lua index 1b864fa358e931a792920c1b11b6ed5ee5eb4126..e8e02266430764e47e0ec9eb9eca1babfcc3fc51 100644 --- a/examples/expected/full/proto2_basic/proto2_basic_pb.lua +++ b/examples/expected/full/proto2_basic/proto2_basic_pb.lua @@ -334,6 +334,9 @@ ---@param b string ---@return proto2_basic.Defaults function M.Defaults_decode(buf) + local decode_bytes = wire.decode_bytes + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.Defaults_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -355,8 +358,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -372,9 +387,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.s = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.s = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.s = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.s = val end elseif id == 3 then @@ -406,9 +438,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.by = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.by = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.by = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.by = val end elseif id == 9 then @@ -435,6 +483,7 @@ ---@param b string ---@return proto2_basic.Defaults function M.Defaults_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.Defaults_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -456,8 +505,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -472,6 +533,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.s = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.s = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.s = val + end else local val val, pos = decode_bytes(buf, pos) @@ -506,6 +583,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.by = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.by = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.by = val + end else local val val, pos = decode_bytes(buf, pos) @@ -666,6 +759,7 @@ ---@return proto2_basic.Cardinality function M.Cardinality_decode(buf) local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.Cardinality_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -690,8 +784,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -779,6 +885,7 @@ ---@return proto2_basic.Cardinality function M.Cardinality_decode_unsafe(buf) local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.Cardinality_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -803,8 +910,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -954,6 +1073,7 @@ ---@param b string ---@return proto2_basic.Nested function M.Nested_decode(buf) local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.Nested_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -975,8 +1095,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -1016,6 +1148,7 @@ ---@param b string ---@return proto2_basic.Nested function M.Nested_decode_unsafe(buf) local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.Nested_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1037,8 +1170,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -1119,6 +1264,7 @@ ---@param b string ---@return proto2_basic.Nested.Inner function M.Nested_Inner_decode(buf) + local decode_tag = wire.decode_tag local _d = M.Nested_Inner_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1140,8 +1286,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -1166,6 +1324,7 @@ ---@param b string ---@return proto2_basic.Nested.Inner function M.Nested_Inner_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.Nested_Inner_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1187,8 +1346,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -1261,6 +1432,7 @@ ---@param b string ---@return proto2_basic.WithGroup function M.WithGroup_decode(buf) + local decode_tag = wire.decode_tag local _d = M.WithGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1283,8 +1455,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -1320,6 +1504,7 @@ ---@param b string ---@return proto2_basic.WithGroup function M.WithGroup_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.WithGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1342,8 +1527,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -1432,6 +1629,8 @@ ---@param b string ---@return proto2_basic.WithGroup.SingleGroup function M.WithGroup_SingleGroup_decode(buf) + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.WithGroup_SingleGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1453,8 +1652,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 2 then local val @@ -1470,9 +1681,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.s = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.s = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.s = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.s = val end else @@ -1494,6 +1722,8 @@ ---@param b string ---@return proto2_basic.WithGroup.SingleGroup function M.WithGroup_SingleGroup_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.WithGroup_SingleGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1515,8 +1745,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 2 then local val @@ -1531,9 +1773,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.s = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.s = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.s = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.s = val end else @@ -1601,6 +1859,7 @@ ---@param b string ---@return proto2_basic.WithGroup.RepGroup function M.WithGroup_RepGroup_decode(buf) + local decode_tag = wire.decode_tag local _d = M.WithGroup_RepGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1622,8 +1881,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 5 then local val @@ -1648,6 +1919,7 @@ ---@param b string ---@return proto2_basic.WithGroup.RepGroup function M.WithGroup_RepGroup_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.WithGroup_RepGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1669,8 +1941,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 5 then local val @@ -1855,6 +2139,7 @@ function M.BenchPayload_decode(buf) local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.BenchPayload_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -1878,8 +2163,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -1895,6 +2192,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.name = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.name = val + end else local val val, pos = decode_string(buf, pos) @@ -1935,6 +2249,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_tags = _n_tags + 1; list[_n_tags] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_tags = _n_tags + 1; list[_n_tags] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_tags = _n_tags + 1; list[_n_tags] = val + end else local val val, pos = decode_string(buf, pos) @@ -1992,6 +2323,7 @@ function M.BenchPayload_decode_unsafe(buf) local decode_bytes = wire.decode_bytes local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.BenchPayload_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -2015,8 +2347,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -2031,6 +2375,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.name = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.name = val + end else local val val, pos = decode_bytes(buf, pos) @@ -2070,6 +2430,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_tags = _n_tags + 1; list[_n_tags] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_tags = _n_tags + 1; list[_n_tags] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_tags = _n_tags + 1; list[_n_tags] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -2188,6 +2564,7 @@ ---@param b string ---@return proto2_basic.BenchPayload.Stats function M.BenchPayload_Stats_decode(buf) local decode_int32 = wire.decode_int32 + local decode_tag = wire.decode_tag local _d = M.BenchPayload_Stats_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -2209,8 +2586,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 8 then local val @@ -2240,6 +2629,7 @@ ---@param b string ---@return proto2_basic.BenchPayload.Stats function M.BenchPayload_Stats_decode_unsafe(buf) local decode_int32 = wire.decode_int32 + local decode_tag = wire.decode_tag local _d = M.BenchPayload_Stats_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -2261,8 +2651,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 8 then local val @@ -2350,6 +2752,8 @@ ---@param b string ---@return proto2_basic.BenchPayload.Inner function M.BenchPayload_Inner_decode(buf) + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.BenchPayload_Inner_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -2371,8 +2775,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -2384,9 +2800,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.key = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.key = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.key = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.key = val end elseif id == 2 then @@ -2412,6 +2845,8 @@ ---@param b string ---@return proto2_basic.BenchPayload.Inner function M.BenchPayload_Inner_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.BenchPayload_Inner_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -2433,8 +2868,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -2445,9 +2892,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.key = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.key = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.key = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.key = val end elseif id == 2 then diff --git a/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua b/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua index ae738c99e1565b7d76b23645e0cd6c4ff80b86e0..ee61c9f87b848dcee1e285ffdbe2e2a94604722a 100644 --- a/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua +++ b/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua @@ -2828,6 +2828,18 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else id, wt, pos = decode_tag(buf, pos) end @@ -2893,6 +2905,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_string = val + end else local val val, pos = decode_string(buf, pos) @@ -2907,6 +2936,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -2948,6 +2993,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_string_piece = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_string_piece = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_string_piece = val + end else local val val, pos = decode_string(buf, pos) @@ -2963,6 +3025,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_cord = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_cord = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_cord = val + end else local val val, pos = decode_string(buf, pos) @@ -3236,6 +3315,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = val + end else local val val, pos = decode_string(buf, pos) @@ -3252,6 +3348,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -3319,6 +3431,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = val + end else local val val, pos = decode_string(buf, pos) @@ -3336,6 +3465,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = val + end else local val val, pos = decode_string(buf, pos) @@ -4336,6 +4482,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.oneof_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.oneof_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.oneof_string = val + end else local val val, pos = decode_string(buf, pos) @@ -4358,6 +4521,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.oneof_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.oneof_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.oneof_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -4511,6 +4690,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.default_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.default_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.default_string = val + end else local val val, pos = decode_string(buf, pos) @@ -4525,6 +4721,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.default_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.default_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.default_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -4734,6 +4946,18 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else id, wt, pos = decode_tag(buf, pos) end @@ -4798,6 +5022,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -4812,6 +5052,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -4852,6 +5108,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_string_piece = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_string_piece = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_string_piece = val + end else local val val, pos = decode_bytes(buf, pos) @@ -4866,6 +5138,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_cord = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_cord = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_cord = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5138,6 +5426,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5154,6 +5458,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5220,6 +5540,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5236,6 +5572,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6235,6 +6587,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.oneof_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.oneof_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.oneof_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6257,6 +6625,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.oneof_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.oneof_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.oneof_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6409,6 +6793,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.default_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.default_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.default_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6423,6 +6823,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.default_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.default_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.default_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6877,6 +7293,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllTypesProto2.NestedMessage function M.TestAllTypesProto2_NestedMessage_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto2_NestedMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -6898,8 +7315,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -6933,6 +7362,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllTypesProto2.NestedMessage function M.TestAllTypesProto2_NestedMessage_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto2_NestedMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -6954,8 +7384,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -7041,6 +7483,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllTypesProto2.Data function M.TestAllTypesProto2_Data_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto2_Data_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7062,8 +7505,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 202 then local val @@ -7092,6 +7547,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllTypesProto2.Data function M.TestAllTypesProto2_Data_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto2_Data_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7113,8 +7569,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 202 then local val @@ -7195,6 +7663,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllTypesProto2.MultiWordGroupField function M.TestAllTypesProto2_MultiWordGroupField_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto2_MultiWordGroupField_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7216,8 +7685,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 205 then local val @@ -7246,6 +7727,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllTypesProto2.MultiWordGroupField function M.TestAllTypesProto2_MultiWordGroupField_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto2_MultiWordGroupField_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7267,8 +7749,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 205 then local val @@ -7343,6 +7837,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.ForeignMessageProto2 function M.ForeignMessageProto2_decode(buf) + local decode_tag = wire.decode_tag local _d = M.ForeignMessageProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7364,8 +7859,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -7390,6 +7897,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.ForeignMessageProto2 function M.ForeignMessageProto2_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.ForeignMessageProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7411,8 +7919,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -7484,6 +8004,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.GroupField function M.GroupField_decode(buf) + local decode_tag = wire.decode_tag local _d = M.GroupField_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7505,8 +8026,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 122 then local val @@ -7535,6 +8068,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.GroupField function M.GroupField_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.GroupField_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7556,8 +8090,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 122 then local val @@ -7683,6 +8229,8 @@ ---@return protobuf_test_messages.proto2.UnknownToTestAllTypes function M.UnknownToTestAllTypes_decode(buf) local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.UnknownToTestAllTypes_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7705,8 +8253,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1001 then local val @@ -7722,9 +8282,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_string = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.optional_string = val end elseif id == 1003 then @@ -7787,8 +8364,10 @@ ---@param b string ---@return protobuf_test_messages.proto2.UnknownToTestAllTypes function M.UnknownToTestAllTypes_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes local decode_int32 = wire.decode_int32 local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.UnknownToTestAllTypes_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7811,8 +8390,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1001 then local val @@ -7827,9 +8418,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_string = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.optional_string = val end elseif id == 1003 then @@ -7953,6 +8560,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.UnknownToTestAllTypes.OptionalGroup function M.UnknownToTestAllTypes_OptionalGroup_decode(buf) + local decode_tag = wire.decode_tag local _d = M.UnknownToTestAllTypes_OptionalGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7974,8 +8582,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -8000,6 +8620,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.UnknownToTestAllTypes.OptionalGroup function M.UnknownToTestAllTypes_OptionalGroup_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.UnknownToTestAllTypes_OptionalGroup_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8021,8 +8642,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -8082,6 +8715,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.NullHypothesisProto2 function M.NullHypothesisProto2_decode(buf) + local decode_tag = wire.decode_tag local _d = M.NullHypothesisProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8103,8 +8737,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -8126,6 +8772,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.NullHypothesisProto2 function M.NullHypothesisProto2_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.NullHypothesisProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8147,8 +8794,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -8200,6 +8859,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.EnumOnlyProto2 function M.EnumOnlyProto2_decode(buf) + local decode_tag = wire.decode_tag local _d = M.EnumOnlyProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8221,8 +8881,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -8244,6 +8916,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.EnumOnlyProto2 function M.EnumOnlyProto2_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.EnumOnlyProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8265,8 +8938,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -8330,6 +9015,8 @@ ---@param b string ---@return protobuf_test_messages.proto2.OneStringProto2 function M.OneStringProto2_decode(buf) + local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.OneStringProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8351,8 +9038,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -8364,9 +9063,26 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.data = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.data = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.data = val + end else local val - val, pos = wire.decode_string(buf, pos) + val, pos = decode_string(buf, pos) result.data = val end else @@ -8388,6 +9104,8 @@ ---@param b string ---@return protobuf_test_messages.proto2.OneStringProto2 function M.OneStringProto2_decode_unsafe(buf) + local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.OneStringProto2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8409,8 +9127,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local _lb = string_byte(buf, pos) @@ -8421,9 +9151,25 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.data = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.data = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.data = val + end else local val - val, pos = wire.decode_bytes(buf, pos) + val, pos = decode_bytes(buf, pos) result.data = val end else @@ -8516,6 +9262,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.ProtoWithKeywords function M.ProtoWithKeywords_decode(buf) local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.ProtoWithKeywords_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8538,8 +9285,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -8555,6 +9314,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.concept = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.concept = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.concept = val + end else local val val, pos = decode_string(buf, pos) @@ -8572,6 +9348,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_requires = _n_requires + 1; list[_n_requires] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_requires = _n_requires + 1; list[_n_requires] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_requires = _n_requires + 1; list[_n_requires] = val + end else local val val, pos = decode_string(buf, pos) @@ -8597,6 +9390,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.ProtoWithKeywords function M.ProtoWithKeywords_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.ProtoWithKeywords_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -8619,8 +9413,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -8635,6 +9441,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.concept = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.concept = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.concept = val + end else local val val, pos = decode_bytes(buf, pos) @@ -8651,6 +9473,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_requires = _n_requires + 1; list[_n_requires] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_requires = _n_requires + 1; list[_n_requires] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_requires = _n_requires + 1; list[_n_requires] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9100,6 +9938,7 @@ local decode_sfixed64 = wire.decode_sfixed64 local decode_sint32 = wire.decode_sint32 local decode_sint64 = wire.decode_sint64 local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local decode_uint32 = wire.decode_uint32 local decode_uint64 = wire.decode_uint64 local decode_varint = wire.decode_varint @@ -9125,8 +9964,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -9190,6 +10041,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.required_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.required_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.required_string = val + end else local val val, pos = decode_string(buf, pos) @@ -9204,6 +10072,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.required_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.required_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.required_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9245,6 +10129,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.required_string_piece = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.required_string_piece = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.required_string_piece = val + end else local val val, pos = decode_string(buf, pos) @@ -9260,6 +10161,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.required_cord = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.required_cord = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.required_cord = val + end else local val val, pos = decode_string(buf, pos) @@ -9354,6 +10272,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.default_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.default_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.default_string = val + end else local val val, pos = decode_string(buf, pos) @@ -9368,6 +10303,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.default_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.default_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.default_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9405,6 +10356,7 @@ local decode_sfixed32 = wire.decode_sfixed32 local decode_sfixed64 = wire.decode_sfixed64 local decode_sint32 = wire.decode_sint32 local decode_sint64 = wire.decode_sint64 + local decode_tag = wire.decode_tag local decode_uint32 = wire.decode_uint32 local decode_uint64 = wire.decode_uint64 local decode_varint = wire.decode_varint @@ -9430,8 +10382,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -9494,6 +10458,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.required_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.required_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.required_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9508,6 +10488,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.required_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.required_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.required_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9548,6 +10544,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.required_string_piece = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.required_string_piece = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.required_string_piece = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9562,6 +10574,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.required_cord = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.required_cord = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.required_cord = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9655,6 +10683,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.default_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.default_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.default_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9669,6 +10713,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.default_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.default_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.default_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -9764,6 +10824,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllRequiredTypesProto2.NestedMessage function M.TestAllRequiredTypesProto2_NestedMessage_decode(buf) local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.TestAllRequiredTypesProto2_NestedMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -9785,8 +10846,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -9830,6 +10903,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllRequiredTypesProto2.NestedMessage function M.TestAllRequiredTypesProto2_NestedMessage_decode_unsafe(buf) local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.TestAllRequiredTypesProto2_NestedMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -9851,8 +10925,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -9944,6 +11030,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllRequiredTypesProto2.Data function M.TestAllRequiredTypesProto2_Data_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllRequiredTypesProto2_Data_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -9965,8 +11052,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 202 then local val @@ -9995,6 +11094,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestAllRequiredTypesProto2.Data function M.TestAllRequiredTypesProto2_Data_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllRequiredTypesProto2_Data_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10016,8 +11116,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 202 then local val @@ -10149,6 +11261,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof function M.TestLargeOneof_decode(buf) local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10170,8 +11283,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -10258,6 +11383,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof function M.TestLargeOneof_decode_unsafe(buf) local decode_len = wire.decode_len + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10279,8 +11405,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local payload @@ -10396,6 +11534,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A1 function M.TestLargeOneof_A1_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A1_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10417,8 +11556,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10440,6 +11591,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A1 function M.TestLargeOneof_A1_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A1_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10461,8 +11613,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10514,6 +11678,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A2 function M.TestLargeOneof_A2_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10535,8 +11700,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10558,6 +11735,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A2 function M.TestLargeOneof_A2_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A2_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10579,8 +11757,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10632,6 +11822,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A3 function M.TestLargeOneof_A3_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10653,8 +11844,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10676,6 +11879,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A3 function M.TestLargeOneof_A3_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10697,8 +11901,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10750,6 +11966,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A4 function M.TestLargeOneof_A4_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A4_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10771,8 +11988,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10794,6 +12023,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A4 function M.TestLargeOneof_A4_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A4_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10815,8 +12045,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10868,6 +12110,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A5 function M.TestLargeOneof_A5_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A5_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10889,8 +12132,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -10912,6 +12167,7 @@ ---@param b string ---@return protobuf_test_messages.proto2.TestLargeOneof.A5 function M.TestLargeOneof_A5_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestLargeOneof_A5_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -10933,8 +12189,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else diff --git a/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua b/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua index 3e824f3395307c0aed84cdd623a199c72ec4e9c1..34b4a9ad259bce0d822bcec86707e1d91cf4d851 100644 --- a/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua +++ b/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua @@ -2987,6 +2987,18 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else id, wt, pos = decode_tag(buf, pos) end @@ -3052,6 +3064,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_string = val + end else local val val, pos = decode_string(buf, pos) @@ -3066,6 +3095,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -3111,6 +3156,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_string_piece = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_string_piece = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_string_piece = val + end else local val val, pos = decode_string(buf, pos) @@ -3126,6 +3188,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.optional_cord = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.optional_cord = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.optional_cord = val + end else local val val, pos = decode_string(buf, pos) @@ -3399,6 +3478,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = val + end else local val val, pos = decode_string(buf, pos) @@ -3415,6 +3511,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -3482,6 +3594,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = val + end else local val val, pos = decode_string(buf, pos) @@ -3499,6 +3628,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = val + end else local val val, pos = decode_string(buf, pos) @@ -4461,6 +4607,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.oneof_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.oneof_string = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.oneof_string = val + end else local val val, pos = decode_string(buf, pos) @@ -4484,6 +4647,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.oneof_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.oneof_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.oneof_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -4943,6 +5122,18 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else id, wt, pos = decode_tag(buf, pos) end @@ -5007,6 +5198,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5021,6 +5228,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5065,6 +5288,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_string_piece = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_string_piece = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_string_piece = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5079,6 +5318,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.optional_cord = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.optional_cord = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.optional_cord = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5351,6 +5606,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5367,6 +5638,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5433,6 +5720,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -5449,6 +5752,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6410,6 +6729,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.oneof_string = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.oneof_string = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.oneof_string = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6433,6 +6768,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.oneof_bytes = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.oneof_bytes = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.oneof_bytes = val + end else local val val, pos = decode_bytes(buf, pos) @@ -6835,6 +7186,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.TestAllTypesProto3.NestedMessage function M.TestAllTypesProto3_NestedMessage_decode(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto3_NestedMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -6856,8 +7208,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -6891,6 +7255,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.TestAllTypesProto3.NestedMessage function M.TestAllTypesProto3_NestedMessage_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.TestAllTypesProto3_NestedMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -6912,8 +7277,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -6983,6 +7360,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.ForeignMessage function M.ForeignMessage_decode(buf) + local decode_tag = wire.decode_tag local _d = M.ForeignMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7004,8 +7382,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -7030,6 +7420,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.ForeignMessage function M.ForeignMessage_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.ForeignMessage_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7051,8 +7442,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -7107,6 +7510,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.NullHypothesisProto3 function M.NullHypothesisProto3_decode(buf) + local decode_tag = wire.decode_tag local _d = M.NullHypothesisProto3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7128,8 +7532,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -7151,6 +7567,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.NullHypothesisProto3 function M.NullHypothesisProto3_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.NullHypothesisProto3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7172,8 +7589,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -7225,6 +7654,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.EnumOnlyProto3 function M.EnumOnlyProto3_decode(buf) + local decode_tag = wire.decode_tag local _d = M.EnumOnlyProto3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7246,8 +7676,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else @@ -7269,6 +7711,7 @@ ---@param b string ---@return protobuf_test_messages.proto3.EnumOnlyProto3 function M.EnumOnlyProto3_decode_unsafe(buf) + local decode_tag = wire.decode_tag local _d = M.EnumOnlyProto3_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -7290,8 +7733,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if true then else diff --git a/examples/expected/full/quickstart/quickstart_pb.lua b/examples/expected/full/quickstart/quickstart_pb.lua index d41a1d19047109645fa14fd38727ed9790618a77..d8507f3fa8c6c0cab0515608804e2feb457033fe 100644 --- a/examples/expected/full/quickstart/quickstart_pb.lua +++ b/examples/expected/full/quickstart/quickstart_pb.lua @@ -128,6 +128,7 @@ ---@param b string ---@return quickstart.User function M.User_decode(buf) local decode_string = wire.decode_string + local decode_tag = wire.decode_tag local _d = M.User_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -150,8 +151,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -167,6 +180,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + result.name = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + result.name = val + end else local val val, pos = decode_string(buf, pos) @@ -188,6 +218,23 @@ local _s = buf:sub(_np, _epos - 1) if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end _n_emails = _n_emails + 1; list[_n_emails] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + if utf8_len(_s) == nil then error("invalid UTF-8 in string field at offset " .. pos, 0) end + _n_emails = _n_emails + 1; list[_n_emails] = _s + pos = _epos + else + local val + val, pos = decode_string(buf, pos) + _n_emails = _n_emails + 1; list[_n_emails] = val + end else local val val, pos = decode_string(buf, pos) @@ -213,6 +260,7 @@ ---@param b string ---@return quickstart.User function M.User_decode_unsafe(buf) local decode_bytes = wire.decode_bytes + local decode_tag = wire.decode_tag local _d = M.User_descriptor if pb.c_runtime ~= nil then local _p = _d.c_plan or pb.c_runtime.compile_plan(_d) @@ -235,8 +283,20 @@ if wt >= 6 then error("illegal wire type " .. wt, 0) end id = rshift(_b, 3) if id == 0 then error("illegal field number 0", 0) end pos = pos + 1 + elseif _b ~= nil and pos < len then + local _b2 = string_byte(buf, pos + 1) + if _b2 < 0x80 then + if _b2 == 0 then error("overlong tag varint at offset " .. pos, 0) end + local _v = _b - 128 + _b2 * 128 + wt = band(_v, 7) + if wt >= 6 then error("illegal wire type " .. wt, 0) end + id = rshift(_v, 3) + pos = pos + 2 + else + id, wt, pos = decode_tag(buf, pos) + end else - id, wt, pos = wire.decode_tag(buf, pos) + id, wt, pos = decode_tag(buf, pos) end if id == 1 then local val @@ -251,6 +311,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) result.name = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + result.name = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + result.name = val + end else local val val, pos = decode_bytes(buf, pos) @@ -271,6 +347,22 @@ if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end local _s = buf:sub(_np, _epos - 1) _n_emails = _n_emails + 1; list[_n_emails] = _s pos = _epos + elseif _lb ~= nil and pos < len then + local _lb2 = string_byte(buf, pos + 1) + if _lb2 ~= nil and _lb2 < 0x80 then + if _lb2 == 0 then error("overlong LEN varint at offset " .. pos, 0) end + local _ln = _lb - 128 + _lb2 * 128 + local _np = pos + 2 + local _epos = _np + _ln + if _epos - 1 > len then error("truncated LEN at offset " .. pos, 0) end + local _s = buf:sub(_np, _epos - 1) + _n_emails = _n_emails + 1; list[_n_emails] = _s + pos = _epos + else + local val + val, pos = decode_bytes(buf, pos) + _n_emails = _n_emails + 1; list[_n_emails] = val + end else local val val, pos = decode_bytes(buf, pos)