diff --git a/.golangci.yml b/.golangci.yml index 43af4c3..1fbb8db 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -41,6 +41,7 @@ linters: - maintidx # maintidx measures the maintainability index of each function. - makezero # Finds slice declarations with non-zero initial length - misspell # Finds commonly misspelled English words in comments + - modernize # Replace and suggests simplifications to code - nakedret # Finds naked returns in functions greater than a specified function length - nestif # Reports deeply nested if statements - nilerr # Finds the code that returns nil even if it checks that the error is not nil. diff --git a/codecs/av1/obu/leb128.go b/codecs/av1/obu/leb128.go index 7662bc0..271dc6e 100644 --- a/codecs/av1/obu/leb128.go +++ b/codecs/av1/obu/leb128.go @@ -72,7 +72,7 @@ func ReadLeb128(in []byte) (uint, uint, error) { func WriteToLeb128(in uint) []byte { b := make([]byte, 10) - for i := 0; i < len(b); i++ { + for i := range len(b) { b[i] = byte(in & 0x7f) in >>= 7 if in == 0 { diff --git a/codecs/av1/obu/leb128_test.go b/codecs/av1/obu/leb128_test.go index 3a00be6..d0455d2 100644 --- a/codecs/av1/obu/leb128_test.go +++ b/codecs/av1/obu/leb128_test.go @@ -21,8 +21,6 @@ func TestLEB128(t *testing.T) { {5, 5}, {999999, 0xBF843D}, } { - test := test - encoded := EncodeLEB128(test.Value) assert.Equal(t, test.Encoded, encoded) diff --git a/codecs/av1/obu/obu_test.go b/codecs/av1/obu/obu_test.go index e70f3a8..b1d909e 100644 --- a/codecs/av1/obu/obu_test.go +++ b/codecs/av1/obu/obu_test.go @@ -27,7 +27,6 @@ func TestOBUType(t *testing.T) { {Type(0), 0, "OBU_RESERVED"}, {Type(9), 9, "OBU_RESERVED"}, } { - test := test assert.Equal(t, test.Str, test.Type.String()) assert.Equal(t, test.TypeValue, uint8(test.Type)) } @@ -55,8 +54,6 @@ func TestOBUHeader_NoExtension(t *testing.T) { } for _, test := range tests { - test := test - buff := []byte{test.Value} header, err := ParseOBUHeader(buff) assert.NoError(t, err) @@ -115,8 +112,6 @@ func TestOBUHeader_Extension(t *testing.T) { } for _, test := range tests { - test := test - buff := []byte{test.HeaderValue, test.ExtensionHeaderValue} header, err := ParseOBUHeader(buff) assert.NoError(t, err) @@ -213,7 +208,7 @@ func TestOBUMarshal_HasOBUSize(t *testing.T) { const payloadSize = 128 payload := make([]byte, payloadSize) - for i := 0; i < payloadSize; i++ { + for i := range payloadSize { payload[i] = byte(i) } diff --git a/codecs/av1_packet_test.go b/codecs/av1_packet_test.go index 86e8892..5809c0e 100644 --- a/codecs/av1_packet_test.go +++ b/codecs/av1_packet_test.go @@ -1564,7 +1564,7 @@ func TestAV1Payloader_SequenceHeader(t *testing.T) { func TestAv1Payloader_FragmentedEdgeLeb128Size(t *testing.T) { size := uint16(128) payload := make([]byte, 0, size) - for i := uint16(0); i < size; i++ { + for i := range size { payload = append(payload, byte(i)) } @@ -1836,7 +1836,6 @@ func TestAV1_Unmarshal_Error(t *testing.T) { {obu.ErrFailedToReadLEB128, []byte{byte(0b10000000), 0xFF, 0xFF}}, {errShortPacket, []byte{byte(0b10000000), 0xFF, 0x0F, 0x00, 0x00}}, } { - test := test av1Pkt := &AV1Packet{} _, err := av1Pkt.Unmarshal(test.input) @@ -2082,7 +2081,7 @@ func FuzzAV1PayloaderPayloadMTU(f *testing.F) { largePayload := make([]byte, 0, 5000) largePayload = append(largePayload, frameHeader...) largePayload = append(largePayload, 0xFF, 0x26) - for i := 0; i < 5000; i++ { + for i := range 5000 { largePayload = append(largePayload, byte(i%256)) } f.Add(uint16(1500), largePayload) diff --git a/codecs/h264_packet_test.go b/codecs/h264_packet_test.go index e6afe17..a8639ce 100644 --- a/codecs/h264_packet_test.go +++ b/codecs/h264_packet_test.go @@ -64,14 +64,14 @@ func TestH264Payloader_Payload(t *testing.T) { // Multiple NALU in a single payload res = pck.Payload(5, multiplepayload) assert.Len(t, res, 2, "2 nal units should be broken out") - for i := 0; i < 2; i++ { + for i := range 2 { assert.Lenf(t, res[i], 1, "Payload %d of 2 is packed incorrectly", i+1) } // Multiple NALU in a single payload with 3-byte and 4-byte start sequences res = pck.Payload(5, mixednalupayload) assert.Len(t, res, 4, "4 nal units should be broken out") - for i := 0; i < 4; i++ { + for i := range 4 { assert.Lenf(t, res[i], 1, "Payload %d of 4 is packed incorrectly", i+1) } diff --git a/codecs/h265_packet_test.go b/codecs/h265_packet_test.go index 7d1d657..c729b15 100644 --- a/codecs/h265_packet_test.go +++ b/codecs/h265_packet_test.go @@ -370,7 +370,7 @@ func TestH265Payloader_Real(t *testing.T) { func TestH265_FragmentationMtu(t *testing.T) { payload := make([]byte, 2000) - for i := 0; i < 2000; i++ { + for i := range 2000 { payload[i] = uint8(i) //nolint: gosec // idc } @@ -429,7 +429,7 @@ func TestH265_FragmentationRoundtrip(t *testing.T) { payload := make([]byte, 0) testDonl := uint16(100) - for i := 0; i < 200; i++ { + for i := range 200 { payload = append(payload, uint8(i)) //nolint: gosec // idc } @@ -497,7 +497,7 @@ func TestH265_AggregationRoundtrip(t *testing.T) { withDonlCount := uint16(4) withDonl := make([]h265SingleNALUnitPacket, withDonlCount) - for i := uint16(0); i < withDonlCount; i++ { + for i := range withDonlCount { donlVal := i withDonl[i] = h265SingleNALUnitPacket{ createTestH265Header(0, 0, 1, false), @@ -610,7 +610,7 @@ func TestH265_SingleRoundtrip(t *testing.T) { withDonlCount := uint16(4) withDonl := make([]h265SingleNALUnitPacket, withDonlCount) - for i := uint16(0); i < withDonlCount; i++ { + for i := range withDonlCount { donlVal := i withDonl[i] = h265SingleNALUnitPacket{ createTestH265Header(0, 0, 1, false), @@ -691,7 +691,7 @@ func TestH265Packetizer_Fragmented(t *testing.T) { bigPacket = binary.BigEndian.AppendUint16(bigPacket, uint16(header)) payload := make([]byte, 0) - for i := 0; i < 50; i++ { + for range 50 { payload = append(payload, 0xff) } bigPacket = append(bigPacket, payload...) @@ -793,7 +793,7 @@ func TestH265Depacketizer_Roundtrip(t *testing.T) { nil, make([]byte, 0), } - for i := 0; i < 512; i++ { + for i := range 512 { largePacket.payload = append(largePacket.payload, uint8(i)) // nolint:gosec } diff --git a/codecs/h266_packet_test.go b/codecs/h266_packet_test.go index ed6cd86..d0a2df0 100644 --- a/codecs/h266_packet_test.go +++ b/codecs/h266_packet_test.go @@ -218,7 +218,7 @@ func TestH266_FragmentationRoundtrip(t *testing.T) { payload := make([]byte, 0) testDonl := uint16(100) - for i := 0; i < 200; i++ { + for i := range 200 { payload = append(payload, uint8(i)) //nolint: gosec // idc } @@ -253,7 +253,7 @@ func TestH266_FragmentationHeader(t *testing.T) { make([]byte, 0), } - for i := 0; i < 1000; i++ { + for i := range 1000 { simplePacket.payload = append(simplePacket.payload, uint8(i)) //nolint: gosec // idc } @@ -281,7 +281,7 @@ func TestH266_FragmentationEdgeCase(t *testing.T) { make([]byte, 0), } - for i := 0; i < 200; i++ { + for i := range 200 { simplePacket.payload = append(simplePacket.payload, uint8(i)) //nolint: gosec // idc } @@ -294,7 +294,7 @@ func TestH266_FragmentationEdgeCase(t *testing.T) { // Exactly large enough to fill one FU simplePacket.payload = make([]byte, 0) - for i := 0; i < 100; i++ { + for i := range 100 { simplePacket.payload = append(simplePacket.payload, uint8(i)) //nolint: gosec // idc } @@ -510,7 +510,7 @@ func TestH266Packetizer_Fragmented(t *testing.T) { bigPacket = binary.BigEndian.AppendUint16(bigPacket, uint16(header)) payload := make([]byte, 0) - for i := 0; i < 50; i++ { + for range 50 { payload = append(payload, 0xff) } bigPacket = append(bigPacket, payload...) @@ -613,7 +613,7 @@ func TestH266Depacketizer_Roundtrip(t *testing.T) { nil, make([]byte, 0), } - for i := 0; i < 512; i++ { + for i := range 512 { largePacket.payload = append(largePacket.payload, uint8(i)) // nolint:gosec } diff --git a/codecs/vp8_packet.go b/codecs/vp8_packet.go index 8538098..569853c 100644 --- a/codecs/vp8_packet.go +++ b/codecs/vp8_packet.go @@ -163,14 +163,17 @@ func (p *VP8Packet) Unmarshal(payload []byte) ([]byte, error) { //nolint:gocogni if payloadIndex >= payloadLen { return nil, errShortPacket } + //nolint:gosec // G602: payloadIndex bounds checked above if payload[payloadIndex]&0x80 > 0 { // M == 1, PID is 16bit if payloadIndex+1 >= payloadLen { return nil, errShortPacket } - p.PictureID = (uint16(payload[payloadIndex]&0x7F) << 8) | uint16(payload[payloadIndex+1]) + //nolint:gosec // G602: payloadIndex bounds checked above + p.PictureID = (uint16(payload[payloadIndex]&0x7F) << 8) | + uint16(payload[payloadIndex+1]) payloadIndex += 2 } else { - p.PictureID = uint16(payload[payloadIndex]) + p.PictureID = uint16(payload[payloadIndex]) //nolint:gosec payloadIndex++ } } else { diff --git a/codecs/vp8_packet_test.go b/codecs/vp8_packet_test.go index 6b23817..eb2d6cf 100644 --- a/codecs/vp8_packet_test.go +++ b/codecs/vp8_packet_test.go @@ -145,7 +145,6 @@ func TestVP8Payloader_Payload(t *testing.T) { }, } for name, testCase := range testCases { - testCase := testCase t.Run(name, func(t *testing.T) { pck := testCase.payloader diff --git a/codecs/vp9_packet.go b/codecs/vp9_packet.go index fbb2d07..23c1e56 100644 --- a/codecs/vp9_packet.go +++ b/codecs/vp9_packet.go @@ -98,7 +98,7 @@ func (p *VP9Payloader) payloadFlexible(mtu uint16, payload []byte) [][]byte { } out[1] = byte(p.pictureID>>8) | 0x80 - out[2] = byte(p.pictureID) + out[2] = byte(p.pictureID) //nolint:gosec copy(out[headerSize:], payload[payloadDataIndex:payloadDataIndex+currentFragmentSize]) payloads = append(payloads, out) @@ -169,7 +169,7 @@ func (p *VP9Payloader) payloadNonFlexible(mtu uint16, payload []byte) [][]byte { } out[1] = byte(p.pictureID>>8) | 0x80 - out[2] = byte(p.pictureID) + out[2] = byte(p.pictureID) //nolint:gosec off := 3 if !header.NonKeyFrame && payloadDataIndex == 0 { diff --git a/codecs/vp9_packet_test.go b/codecs/vp9_packet_test.go index d793798..53ca92a 100644 --- a/codecs/vp9_packet_test.go +++ b/codecs/vp9_packet_test.go @@ -206,8 +206,6 @@ func TestVP9Packet_Unmarshal(t *testing.T) { }, } for name, testCase := range cases { - testCase := testCase - t.Run(name, func(t *testing.T) { p := VP9Packet{} raw, err := p.Unmarshal(testCase.b) @@ -226,8 +224,8 @@ func TestVP9Packet_Unmarshal(t *testing.T) { func TestVP9Payloader_Payload(t *testing.T) { r0 := int(rand.New(rand.NewSource(0)).Int31n(0x7FFF)) //nolint:gosec var rands [][2]byte - for i := 0; i < 10; i++ { - rands = append(rands, [2]byte{byte(r0>>8) | 0x80, byte(r0 & 0xFF)}) + for range 10 { + rands = append(rands, [2]byte{byte(r0>>8) | 0x80, byte(r0 & 0xFF)}) //nolint:gosec // r0 is bounded to 0x7FFF r0++ } @@ -376,7 +374,7 @@ func TestVP9Payloader_Payload(t *testing.T) { }, } pPrev := VP9Packet{} - for i := 0; i < 0x8000; i++ { + for i := range 0x8000 { res := pck.Payload(4, []byte{0x01}) packet := VP9Packet{} _, err := packet.Unmarshal(res[0]) diff --git a/packetizer_test.go b/packetizer_test.go index 23d1076..eea51da 100644 --- a/packetizer_test.go +++ b/packetizer_test.go @@ -23,7 +23,7 @@ func TestPacketizer(t *testing.T) { if len(packets) != expectedLen { var packetlengths strings.Builder for i := range packets { - packetlengths.WriteString(fmt.Sprintf("Packet %d length %d\n", i, len(packets[i].Payload))) + fmt.Fprintf(&packetlengths, "Packet %d length %d\n", i, len(packets[i].Payload)) } assert.Failf( t, "Packetize failed", "Generated %d packets instead of %d\n%s", diff --git a/playoutdelayextension.go b/playoutdelayextension.go index bb728ff..299e52d 100644 --- a/playoutdelayextension.go +++ b/playoutdelayextension.go @@ -43,8 +43,8 @@ func (p PlayoutDelayExtension) MarshalTo(buf []byte) (int, error) { return 0, io.ErrShortBuffer } buf[0] = byte(p.MinDelay >> 4) - buf[1] = byte(p.MinDelay<<4) | byte(p.MaxDelay>>8) - buf[2] = byte(p.MaxDelay) + buf[1] = byte(p.MinDelay<<4) | byte(p.MaxDelay>>8) //nolint:gosec + buf[2] = byte(p.MaxDelay) //nolint:gosec return playoutDelayExtensionSize, nil } @@ -57,8 +57,8 @@ func (p PlayoutDelayExtension) Marshal() ([]byte, error) { return []byte{ byte(p.MinDelay >> 4), - byte(p.MinDelay<<4) | byte(p.MaxDelay>>8), - byte(p.MaxDelay), + byte(p.MinDelay<<4) | byte(p.MaxDelay>>8), //nolint:gosec + byte(p.MaxDelay), //nolint:gosec }, nil } diff --git a/vlaextension.go b/vlaextension.go index 7b9646c..ba5a2e1 100644 --- a/vlaextension.go +++ b/vlaextension.go @@ -158,7 +158,7 @@ func (v VLA) MarshalTo(buf []byte) (int, error) { //nolint:cyclop,gocognit offset := 0 // RID, NS, sl_bm fields - buf[offset] = byte(v.RTPStreamID<<6) | byte(v.RTPStreamCount-1)<<4 | ctx.commonSLBM + buf[offset] = byte(v.RTPStreamID<<6) | byte(v.RTPStreamCount-1)<<4 | ctx.commonSLBM //nolint:gosec // values are small if ctx.commonSLBM == 0 { offset++ @@ -182,6 +182,7 @@ func (v VLA) MarshalTo(buf []byte) (int, error) { //nolint:cyclop,gocognit temporalLayerIndex = 0 offset++ } + //nolint:gosec // values are small buf[offset] |= byte(len(v.ActiveSpatialLayer[idx].TargetBitrates)-1) << (2 * (3 - temporalLayerIndex)) temporalLayerIndex++ } @@ -205,7 +206,7 @@ func (v VLA) MarshalTo(buf []byte) (int, error) { //nolint:cyclop,gocognit for _, sl := range v.ActiveSpatialLayer { binary.BigEndian.PutUint16(buf[offset+0:], uint16(sl.Width-1)) //nolint:gosec binary.BigEndian.PutUint16(buf[offset+2:], uint16(sl.Height-1)) //nolint:gosec - buf[offset+4] = byte(sl.Framerate) + buf[offset+4] = byte(sl.Framerate) //nolint:gosec offset += 5 } }