From 4f2b60df7f9a923dd155a39ed1a2e90a231835c9 Mon Sep 17 00:00:00 2001 From: Jin Xiao Date: Fri, 23 Oct 2026 09:14:13 +0800 Subject: [PATCH 1/2] fix(reference): patch protobufjs and align safe prefix diagnostics --- .github/workflows/ci.yml | 2 + docs/THIRD_PARTY_DEPENDENCIES.json | 2 +- kafka/protobuf/protobuf.go | 23 ++-- kafka/protobuf/protobuf_test.go | 22 +++ kafka/protobuf/testdata/README.md | 2 +- .../protobuf/testdata/typescript-v2.35.0.json | 126 +++++++++--------- tools/reference/package-lock.json | 30 ++--- tools/reference/package.json | 2 +- 8 files changed, 113 insertions(+), 96 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce3870e..32ca4e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -173,6 +173,8 @@ jobs: run: uv run --no-project python tools/test_runtime_ci.py - name: Install pinned TypeScript reference dependencies run: npm ci --prefix tools/reference + - name: Audit pinned reference dependencies against the official registry + run: npm audit --prefix tools/reference --registry=https://registry.npmjs.org --audit-level=low - name: Build both architectures and run Lambda, streaming, and Valkey simulations run: uv run --no-project python integration/local/run.py --skip-module-checks - name: Verify Batch logs and spans from this run diff --git a/docs/THIRD_PARTY_DEPENDENCIES.json b/docs/THIRD_PARTY_DEPENDENCIES.json index e840d22..2ec767b 100644 --- a/docs/THIRD_PARTY_DEPENDENCIES.json +++ b/docs/THIRD_PARTY_DEPENDENCIES.json @@ -644,7 +644,7 @@ }, { "package": "protobufjs", - "version": "7.5.4", + "version": "7.6.6", "license": "BSD-3-Clause", "source": "protobufjs/protobuf.js", "scope": "Development reference generator only" diff --git a/kafka/protobuf/protobuf.go b/kafka/protobuf/protobuf.go index 1efa5f2..a6d571a 100644 --- a/kafka/protobuf/protobuf.go +++ b/kafka/protobuf/protobuf.go @@ -182,20 +182,21 @@ func longSchemaID(id any) bool { return false } -// uint32Prefix matches protobufjs's five-byte low-word read and ten-byte skip, -// including its reported position on truncated input. It is not a uint64 parser. +// uint32Prefix matches patched protobufjs's five-byte low-word read and ten-byte +// skip, including its one-byte near-end diagnostic. It is not a uint64 parser. func uint32Prefix(buffer []byte) (uint32, int, error) { var value uint32 for i := 0; i < 5; i++ { - if i < len(buffer) { - mask := byte(127) - if i == 4 { - mask = 15 - } - value |= uint32(buffer[i]&mask) << uint(7*i) - if buffer[i] < 128 { - return value, i + 1, nil - } + if i >= len(buffer) { + return 0, len(buffer), rangeError(len(buffer), 1, len(buffer)) + } + mask := byte(127) + if i == 4 { + mask = 15 + } + value |= uint32(buffer[i]&mask) << uint(7*i) + if buffer[i] < 128 { + return value, i + 1, nil } } if len(buffer) < 10 { diff --git a/kafka/protobuf/protobuf_test.go b/kafka/protobuf/protobuf_test.go index 73e77a0..ddf44ee 100644 --- a/kafka/protobuf/protobuf_test.go +++ b/kafka/protobuf/protobuf_test.go @@ -27,6 +27,28 @@ func bytesValue(data []byte) []any { return out } +func TestPatchedPrefixReadBounds(t *testing.T) { + for length := 0; length < 10; length++ { + buffer := make([]byte, length) + for i := range buffer { + buffer[i] = 0x80 + } + _, position, err := uint32Prefix(buffer) + readSize := 1 + if length >= 5 { + readSize = 10 + } + expected := fmt.Sprintf("index out of range: %d + %d > %d", length, readSize, length) + if position != length || err == nil || err.Error() != expected { + t.Fatalf("length %d: position=%d error=%v; want %s", length, position, err, expected) + } + } + value, position, err := uint32Prefix([]byte{0xac, 0x02}) + if err != nil || value != 300 || position != 2 { + t.Fatalf("valid near-end varint changed: %d, %d, %v", value, position, err) + } +} + func TestTypeScriptReference(t *testing.T) { data, err := os.ReadFile("testdata/typescript-v2.35.0.json") if err != nil { diff --git a/kafka/protobuf/testdata/README.md b/kafka/protobuf/testdata/README.md index 41a74d5..8cf9414 100644 --- a/kafka/protobuf/testdata/README.md +++ b/kafka/protobuf/testdata/README.md @@ -1,6 +1,6 @@ # Protobuf differential scenarios -Generate with `node generate-kafka-protobuf.mjs` in tools/reference. The fixtures execute the actual CommonJS Kafka v2.35.0 consumer with protobufjs 7.5.4. The ESM import issue is recorded in the parent Kafka fixture README. +Generate with `node generate-kafka-protobuf.mjs` in tools/reference. The fixtures execute the actual CommonJS Kafka v2.35.0 consumer with protobufjs 7.6.6. The security update from 7.5.4 records the patched tool version and its one-byte bounds diagnostic for truncated prefixes shorter than five bytes. Successful values, callback positions, error categories, the schema and nine native-message results remain unchanged. The ESM import issue is recorded in the parent Kafka fixture README. The 220 prefix scenarios use an application-supplied message decoder, as supported by the public messageType contract. They compare original buffers, reader positions, explicit length arguments, both decoding attempts, results and complete errors. Preference state persists across scenarios. Cases cover absent/null metadata, missing/null/numeric/Unicode schema IDs, Glue uint32 consumption, Confluent byte skips, negative positions, truncation, permissive Base64, successful preference reversals and first-error retention when both attempts fail. The additional 97 scenarios cover object length coercion, array IDs and primitive metadata. These cases prove wrapper behavior, not protobufjs's internal wire decoder. diff --git a/kafka/protobuf/testdata/typescript-v2.35.0.json b/kafka/protobuf/testdata/typescript-v2.35.0.json index f7cf5fb..c6fcae1 100644 --- a/kafka/protobuf/testdata/typescript-v2.35.0.json +++ b/kafka/protobuf/testdata/typescript-v2.35.0.json @@ -1,6 +1,6 @@ { "version": "2.35.0", - "protobufVersion": "7.5.4", + "protobufVersion": "7.6.6", "cases": [ { "name": "prefix-0", @@ -773,7 +773,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -896,7 +896,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -981,7 +981,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -1104,7 +1104,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -1189,7 +1189,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -1316,7 +1316,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -1399,7 +1399,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -1526,7 +1526,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -1609,7 +1609,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -1732,7 +1732,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -1817,7 +1817,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -1940,7 +1940,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -2025,7 +2025,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -2148,7 +2148,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -2233,7 +2233,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -2360,7 +2360,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -2763,7 +2763,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -2777,7 +2777,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3039,7 +3039,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3055,7 +3055,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3132,7 +3132,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3148,7 +3148,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3225,7 +3225,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3241,7 +3241,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3318,7 +3318,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3334,7 +3334,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3411,7 +3411,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3427,7 +3427,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3503,7 +3503,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3519,7 +3519,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3595,7 +3595,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3611,7 +3611,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3688,7 +3688,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3704,7 +3704,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3781,7 +3781,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3797,7 +3797,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3873,7 +3873,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3889,7 +3889,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -3965,7 +3965,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -3981,7 +3981,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4057,7 +4057,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4073,7 +4073,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4149,7 +4149,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4165,7 +4165,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4241,7 +4241,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4257,7 +4257,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4334,7 +4334,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4350,7 +4350,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4427,7 +4427,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4443,7 +4443,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4525,7 +4525,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4543,7 +4543,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4625,7 +4625,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4643,7 +4643,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4731,7 +4731,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4751,7 +4751,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4837,7 +4837,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4856,7 +4856,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -4933,7 +4933,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -4949,7 +4949,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { @@ -5032,7 +5032,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 10 > 1, message: gA==, messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 1 + 1 > 1, message: gA==, messageType: {}" } }, { @@ -5050,7 +5050,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {}" } }, { diff --git a/tools/reference/package-lock.json b/tools/reference/package-lock.json index b5265db..7e2d278 100644 --- a/tools/reference/package-lock.json +++ b/tools/reference/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "name": "powertools-go-reference-fixtures", + "license": "MIT", "dependencies": { "@aws-lambda-powertools/logger": "2.35.0" }, @@ -25,10 +26,9 @@ "@aws-sdk/client-ssm": "3.1131.0", "@aws-sdk/util-dynamodb": "3.996.9", "avro-js": "1.12.1", - "protobufjs": "7.5.4", + "protobufjs": "7.6.6", "zod": "4.1.12" - }, - "license": "MIT" + } }, "node_modules/@aws-crypto/branch-keystore-node": { "version": "5.0.2", @@ -942,13 +942,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@protobufjs/inquire/-/inquire-1.1.2.tgz", - "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/@protobufjs/path/-/path-1.1.2.tgz", @@ -1268,25 +1261,24 @@ } }, "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmmirror.com/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.6.tgz", + "integrity": "sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==", "dev": true, "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", - "long": "^5.0.0" + "long": "^5.3.2" }, "engines": { "node": ">=12.0.0" diff --git a/tools/reference/package.json b/tools/reference/package.json index 45a6f9a..3cfdf4d 100644 --- a/tools/reference/package.json +++ b/tools/reference/package.json @@ -37,7 +37,7 @@ "@aws-sdk/client-ssm": "3.1131.0", "@aws-sdk/util-dynamodb": "3.996.9", "avro-js": "1.12.1", - "protobufjs": "7.5.4", + "protobufjs": "7.6.6", "zod": "4.1.12" }, "license": "MIT" From d668b414b868c726395346bdd76036a6aa04ac5c Mon Sep 17 00:00:00 2001 From: Jin Xiao Date: Fri, 23 Oct 2026 09:29:30 +0800 Subject: [PATCH 2/2] test(kafka): refresh mixed-event patched reader diagnostics --- integration/kafkamodes/testdata/README.md | 2 +- integration/kafkamodes/testdata/typescript-v2.35.0.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/integration/kafkamodes/testdata/README.md b/integration/kafkamodes/testdata/README.md index 4c540d6..b9137e9 100644 --- a/integration/kafkamodes/testdata/README.md +++ b/integration/kafkamodes/testdata/README.md @@ -1,6 +1,6 @@ # Kafka event mode reference corpus -Generate from tools/reference with `node generate-kafka-modes.mjs`. The generator executes the installed CommonJS export of Powertools TypeScript v2.35.0 with avro-js 1.12.1 and protobufjs 7.5.4. No upstream implementation is patched. +Generate from tools/reference with `node generate-kafka-modes.mjs`. The generator executes the installed CommonJS export of Powertools TypeScript v2.35.0 with avro-js 1.12.1 and protobufjs 7.6.6. No upstream implementation is patched. The protobufjs security update changes four short-prefix error strings in two events; all remaining event fields, decoded values, callback positions and error categories are unchanged. The 172 constructed events cover MSK and self-managed sources, SOURCE and JSON delivery, Glue/Confluent schema metadata, missing registry metadata, every key/value pair of text/JSON/Avro/Protobuf, parser transformations, repeated lazy reads, byte headers, retained original values and metadata, unknown fields, nulls, empty strings and missing fields. A FileDescriptorSet supplies the same proto2 schema to the official Go Protobuf runtime. Successful native messages compare protojson with protobufjs JSON; Avro bytes retain explicit byte tags. Errors compare complete names and messages, including the supplied Protobuf schema description. diff --git a/integration/kafkamodes/testdata/typescript-v2.35.0.json b/integration/kafkamodes/testdata/typescript-v2.35.0.json index 031e069..b9049e7 100644 --- a/integration/kafkamodes/testdata/typescript-v2.35.0.json +++ b/integration/kafkamodes/testdata/typescript-v2.35.0.json @@ -11262,7 +11262,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" } }, { @@ -11293,7 +11293,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" } } ], @@ -22635,7 +22635,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" } }, { @@ -22666,7 +22666,7 @@ "value": null, "error": { "name": "KafkaConsumerDeserializationError", - "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 10 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" + "message": "Failed to deserialize Protobuf message: RangeError: index out of range: 0 + 1 > 0, message: , messageType: {\"edition\":\"proto2\",\"fields\":{\"id\":{\"type\":\"string\",\"id\":1},\"count\":{\"type\":\"int32\",\"id\":2},\"raw\":{\"type\":\"bytes\",\"id\":3}}}" } } ],