Skip to content

Commit f8257e6

Browse files
committed
D88: Use the data length field to seek past any extra data.
This will effectively ignore the field length if it is shorter than the sector size (or 0).
1 parent 0ddfd3b commit f8257e6

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

lib/imagereader/d88imagereader.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ class D88ImageReader : public ImageReader
115115
int ddam = sectorHeaderReader.seek(7).read_8();
116116
int fddStatusCode = sectorHeaderReader.seek(8).read_8();
117117
int rpm = sectorHeaderReader.seek(13).read_8();
118+
int dataLength = sectorHeaderReader.seek(14).read_le16();
119+
if (dataLength < sectorSize) {
120+
dataLength = sectorSize;
121+
}
118122
// D88 provides much more sector information that is currently
119123
// ignored
120124
if (ddam != 0)
@@ -190,6 +194,7 @@ class D88ImageReader : public ImageReader
190194
}
191195
Bytes data(sectorSize);
192196
inputFile.read((char*)data.begin(), data.size());
197+
inputFile.seekg(dataLength-sectorSize, std::ios_base::cur);
193198
physical->add_sector(sectorId);
194199
const auto& sector = image->put(track, head, sectorId);
195200
sector->status = Sector::OK;

0 commit comments

Comments
 (0)