readExthHeader static method
Implementation
static Future<MobiExthHeader> readExthHeader(MobiBuffer buffer) async {
final exthMagic = buffer.getString(4);
final exthLength = buffer.getInt32() - 12;
final recCount = buffer.getInt32();
if (exthMagic != exthMagic ||
exthLength + buffer.offset > buffer.maxlen ||
recCount == 0 ||
recCount > exthMaxCount) {
throw MobiInvalidDataException("Invalid EXTH Header");
}
final savedMaxLen = buffer.maxlen;
buffer.maxlen = exthLength + buffer.offset;
final header = MobiExthHeader();
var curr = header;
for (int i = 0; i < recCount; i++) {
if (curr.data != null) {
curr.next = MobiExthHeader();
curr = curr.next!;
}
curr.tag = buffer.getInt32();
curr.size = buffer.getInt32() - 8;
if (curr.size == 0) {
continue;
}
if (buffer.offset + curr.size! > buffer.maxlen) {
throw MobiInvalidDataException("record ${curr.tag} too long");
}
curr.data = buffer.getStringAsByte(curr.size!);
curr.next = null;
}
buffer.maxlen = savedMaxLen;
return header;
}