Skip to content

Commit 7422325

Browse files
committed
better missing header check
1 parent 818fae9 commit 7422325

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

internal/ota/decoder.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929

3030
var (
3131
ErrCRC32Mismatch = fmt.Errorf("CRC32 mismatch")
32+
ErrNoHeader = fmt.Errorf("no header found")
3233
)
3334

3435
type OtaFirmwareHeader struct {
@@ -108,9 +109,6 @@ func DecodeOtaFirmwareHeader(binaryFilePath string) (*OtaFirmwareHeader, error)
108109
if err != nil {
109110
return nil, err
110111
}
111-
if computedsum != readsum {
112-
return nil, ErrCRC32Mismatch
113-
}
114112

115113
// Get PID+VID (uint32)
116114
buff, err = readBytes(otafileptr, 8, 8)
@@ -123,6 +121,15 @@ func DecodeOtaFirmwareHeader(binaryFilePath string) (*OtaFirmwareHeader, error)
123121
pid := extractXID(buff[:2])
124122
vid := extractXID(buff[2:])
125123

124+
if vid != ArduinoVendorID && vid != Esp32MagicNumberPart1 {
125+
return nil, ErrNoHeader
126+
}
127+
128+
if computedsum != readsum {
129+
// Check if CRC32 is matching, otherwise return error
130+
return nil, ErrCRC32Mismatch
131+
}
132+
126133
boardType, fqbn, isArduino := getBoardType(completeMagicNumber, pid)
127134

128135
return &OtaFirmwareHeader{

internal/ota/decoder_test.go

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ func TestDecodeWithNoHeader(t *testing.T) {
2929
header, err := DecodeOtaFirmwareHeader("testdata/cloud.bin")
3030
assert.Nil(t, header)
3131
assert.NotNil(t, err)
32+
assert.Equal(t, ErrNoHeader, err)
33+
34+
header, err = DecodeOtaFirmwareHeader("testdata/blink.bin")
35+
assert.Nil(t, header)
36+
assert.NotNil(t, err)
37+
assert.Equal(t, ErrNoHeader, err)
3238

3339
}
3440

0 commit comments

Comments
 (0)