1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-08 15:29:09 +00:00

Fixed off-by-one error on filename lengths and order-of-operations mistake preventing data CRC from being checked.

This commit is contained in:
Thomas Harte 2016-09-05 18:15:15 -04:00
parent e25fee2332
commit 6239297212

View File

@ -196,14 +196,15 @@ static std::unique_ptr<File::Chunk> GetNextChunk(Acorn1200BaudTapeParser &parser
parser.reset_error_flag(); parser.reset_error_flag();
// read out name // read out name
char name[10]; char name[11];
int name_ptr = 0; int name_ptr = 0;
while(!parser.is_at_end() && name_ptr < 10) while(!parser.is_at_end() && name_ptr < 11)
{ {
name[name_ptr] = (char)parser.get_next_byte(); name[name_ptr] = (char)parser.get_next_byte();
if(!name[name_ptr]) break; if(!name[name_ptr]) break;
name_ptr++; name_ptr++;
} }
name[10] = '\0';
new_chunk->name = name; new_chunk->name = name;
// addresses // addresses
@ -226,7 +227,7 @@ static std::unique_ptr<File::Chunk> GetNextChunk(Acorn1200BaudTapeParser &parser
new_chunk->data.push_back((uint8_t)parser.get_next_byte()); new_chunk->data.push_back((uint8_t)parser.get_next_byte());
} }
if(new_chunk->block_length && !new_chunk->block_flag&0x40) if(new_chunk->block_length && !(new_chunk->block_flag&0x40))
{ {
uint16_t calculated_data_crc = parser.get_crc(); uint16_t calculated_data_crc = parser.get_crc();
uint16_t stored_data_crc = (uint16_t)parser.get_next_short(); uint16_t stored_data_crc = (uint16_t)parser.get_next_short();