Skip to content

Commit ef7fd24

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 e733dc9 commit ef7fd24

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
@@ -117,6 +117,10 @@ class D88ImageReader : public ImageReader
117117
int ddam = sectorHeaderReader.seek(7).read_8();
118118
int fddStatusCode = sectorHeaderReader.seek(8).read_8();
119119
int rpm = sectorHeaderReader.seek(13).read_8();
120+
int dataLength = sectorHeaderReader.seek(14).read_le16();
121+
if (dataLength < sectorSize) {
122+
dataLength = sectorSize;
123+
}
120124
// D88 provides much more sector information that is currently
121125
// ignored
122126
if (ddam != 0)
@@ -188,6 +192,7 @@ class D88ImageReader : public ImageReader
188192
}
189193
Bytes data(sectorSize);
190194
inputFile.read((char*)data.begin(), data.size());
195+
inputFile.seekg(dataLength-sectorSize, std::ios_base::cur);
191196
const auto& sector = image->put(track, head, sectorId);
192197
sector->status = Sector::OK;
193198
sector->logicalTrack = track;

0 commit comments

Comments
 (0)