Skip to content

Commit a31f305

Browse files
committed
fix spiTransferBytesNL() writes past end of data_out
Fixes: #4935
1 parent 35643bd commit a31f305

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

Diff for: cores/esp32/esp32-hal-spi.c

+14-2
Original file line numberDiff line numberDiff line change
@@ -914,8 +914,20 @@ void spiTransferBytesNL(spi_t * spi, const void * data_in, uint8_t * data_out, u
914914
spi->dev->cmd.usr = 1;
915915
while(spi->dev->cmd.usr);
916916
if(result){
917-
for (int i=0; i<c_longs; i++) {
918-
result[i] = spi->dev->data_buf[i];
917+
if(c_len & 3){
918+
for (int i=0; i<(c_longs-1); i++) {
919+
result[i] = spi->dev->data_buf[i];
920+
}
921+
uint32_t last_data = spi->dev->data_buf[c_longs-1];
922+
uint8_t * last_out8 = &result[c_longs-1];
923+
uint8_t * last_data8 = &last_data;
924+
for (int i=0; i<(c_len & 3); i++) {
925+
last_out8[i] = last_data8[i];
926+
}
927+
} else {
928+
for (int i=0; i<c_longs; i++) {
929+
result[i] = spi->dev->data_buf[i];
930+
}
919931
}
920932
}
921933
if(data){

0 commit comments

Comments
 (0)