From 35cff6c45911258b1e7cfe5c3103bec71c8e66e9 Mon Sep 17 00:00:00 2001 From: Tuan Tran Date: Sat, 15 Jun 2024 15:38:30 +0700 Subject: [PATCH 1/4] adjust the initial offset of variables offset --- mod/primitives/pkg/ssz/v2/lib/helpers.go | 2 +- mod/primitives/pkg/ssz/v2/lib/spec_test.go | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/mod/primitives/pkg/ssz/v2/lib/helpers.go b/mod/primitives/pkg/ssz/v2/lib/helpers.go index 4775cafc4d..101f2dc146 100644 --- a/mod/primitives/pkg/ssz/v2/lib/helpers.go +++ b/mod/primitives/pkg/ssz/v2/lib/helpers.go @@ -188,11 +188,11 @@ func InterleaveOffsets( offsetSum := sumIntArr(fixedLengths) variableOffsets := make([][]byte, len(variableParts)) for i := range len(variableParts) { + variableOffsets[i] = ssz.MarshalU32(uint32(offsetSum)) offsetSum += variableLengths[i] // #nosec:G701 // converting an int of max is 4294967295 to uint64 max // of 2147483647. // Wont realisticially overflow. - variableOffsets[i] = ssz.MarshalU32(uint32(offsetSum)) } fixedPartsWithOffsets := make([][]byte, len(fixedParts)) diff --git a/mod/primitives/pkg/ssz/v2/lib/spec_test.go b/mod/primitives/pkg/ssz/v2/lib/spec_test.go index 860641ccb3..3b7edb75f1 100644 --- a/mod/primitives/pkg/ssz/v2/lib/spec_test.go +++ b/mod/primitives/pkg/ssz/v2/lib/spec_test.go @@ -166,10 +166,7 @@ func TestParityBellatrix(t *testing.T) { res, err4 := sszState.MarshalSSZ() require.NoError(t, err4) - // TODO: Fixme - doesnt match fastssz 100% - // debugDiff(res, o2) - // require.Equal(t, o2, res, defaultErrMsg) - + require.Equal(t, o2, res, defaultErrMsg) require.Equal(t, len(o2), len(res), defaultErrMsg) } From efbb77f75c3e3cb69c0197294b42bf6c5d3ea1ba Mon Sep 17 00:00:00 2001 From: Tuan Tran Date: Sat, 15 Jun 2024 15:43:38 +0700 Subject: [PATCH 2/4] remove comment --- mod/primitives/pkg/ssz/v2/lib/helpers.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/mod/primitives/pkg/ssz/v2/lib/helpers.go b/mod/primitives/pkg/ssz/v2/lib/helpers.go index 101f2dc146..a56608e780 100644 --- a/mod/primitives/pkg/ssz/v2/lib/helpers.go +++ b/mod/primitives/pkg/ssz/v2/lib/helpers.go @@ -190,9 +190,6 @@ func InterleaveOffsets( for i := range len(variableParts) { variableOffsets[i] = ssz.MarshalU32(uint32(offsetSum)) offsetSum += variableLengths[i] - // #nosec:G701 // converting an int of max is 4294967295 to uint64 max - // of 2147483647. - // Wont realisticially overflow. } fixedPartsWithOffsets := make([][]byte, len(fixedParts)) From 44c835a4d86d768893142715efd5c1f2397f1a85 Mon Sep 17 00:00:00 2001 From: Tuan Tran Date: Sat, 15 Jun 2024 15:45:39 +0700 Subject: [PATCH 3/4] update comment --- mod/primitives/pkg/ssz/v2/lib/helpers.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mod/primitives/pkg/ssz/v2/lib/helpers.go b/mod/primitives/pkg/ssz/v2/lib/helpers.go index a56608e780..a24370fce5 100644 --- a/mod/primitives/pkg/ssz/v2/lib/helpers.go +++ b/mod/primitives/pkg/ssz/v2/lib/helpers.go @@ -182,9 +182,9 @@ func InterleaveOffsets( ) } - // Interleave offsets of variable-size parts with fixed-size parts. - // variable_offsets = [serialize(uint32(sum(fixed_lengths + - // variable_lengths[:i]))) for i in range(len(value))]. + // Compute the offsets for the variable-size parts by summing up the fixed + // lengthsand the variable lengths up to each index. The offsets are then + // serialized as uint32 values and stored in the variableOffsets slice. offsetSum := sumIntArr(fixedLengths) variableOffsets := make([][]byte, len(variableParts)) for i := range len(variableParts) { From 1cd88cd9d1033c463903f78018b3d6c464e9e266 Mon Sep 17 00:00:00 2001 From: Tuan Tran Date: Sat, 15 Jun 2024 15:51:53 +0700 Subject: [PATCH 4/4] fix gosec --- mod/primitives/pkg/ssz/v2/lib/helpers.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mod/primitives/pkg/ssz/v2/lib/helpers.go b/mod/primitives/pkg/ssz/v2/lib/helpers.go index a24370fce5..fd3138cc9b 100644 --- a/mod/primitives/pkg/ssz/v2/lib/helpers.go +++ b/mod/primitives/pkg/ssz/v2/lib/helpers.go @@ -187,8 +187,15 @@ func InterleaveOffsets( // serialized as uint32 values and stored in the variableOffsets slice. offsetSum := sumIntArr(fixedLengths) variableOffsets := make([][]byte, len(variableParts)) + const uint32Mask = 0xFFFFFFFF + for i := range len(variableParts) { - variableOffsets[i] = ssz.MarshalU32(uint32(offsetSum)) + // Convert offsetSum to uint32 by applying the uint32Mask. + // This ensures that only the lower 32 bits of offsetSum are used, + // effectively preventing integer overflow. + variableOffsets[i] = ssz.MarshalU32(uint32(offsetSum & uint32Mask)) + + // Increment offsetSum by the length of the current variable part. offsetSum += variableLengths[i] }