public bool Read(Stream stream) { if (stream == null) { return(false); } Debug.Assert(_woffVersion == WoffUtils.Woff1Version || _woffVersion == WoffUtils.Woff2Version); var headerSize = this.HeaderSize; var header = new byte[headerSize]; var sizeRead = stream.Read(header, 0, headerSize); Debug.Assert(sizeRead == headerSize); var bufferSize = header.Length; _signature = WoffBuffer.ReadUInt32BE(header, 0); _flavor = WoffBuffer.ReadUInt32BE(header, 4); _length = WoffBuffer.ReadUInt32BE(header, 8); _numTables = WoffBuffer.ReadUInt16BE(header, 12); _reserved = WoffBuffer.ReadUInt16BE(header, 14); _totalSfntSize = WoffBuffer.ReadUInt32BE(header, 16); if (_woffVersion == WoffUtils.Woff1Version) { _majorVersion = WoffBuffer.ReadUInt16BE(header, 20); _minorVersion = WoffBuffer.ReadUInt16BE(header, 22); _metaOffset = WoffBuffer.ReadUInt32BE(header, 24); _metaLength = WoffBuffer.ReadUInt32BE(header, 28); _metaOrigLength = WoffBuffer.ReadUInt32BE(header, 32); _privateOffset = WoffBuffer.ReadUInt32BE(header, 36); _privateLength = WoffBuffer.ReadUInt32BE(header, 40); } else { _totalCompressedSize = WoffBuffer.ReadUInt32BE(header, 20); _majorVersion = WoffBuffer.ReadUInt16BE(header, 24); _minorVersion = WoffBuffer.ReadUInt16BE(header, 26); _metaOffset = WoffBuffer.ReadUInt32BE(header, 28); _metaLength = WoffBuffer.ReadUInt32BE(header, 32); _metaOrigLength = WoffBuffer.ReadUInt32BE(header, 36); _privateOffset = WoffBuffer.ReadUInt32BE(header, 40); _privateLength = WoffBuffer.ReadUInt32BE(header, 44); } // The signature field in the WOFF-1 header must contain the "magic number" 0x774F4646. // If the field does not contain this value, user agents must reject the file as invalid. Debug.Assert((bufferSize == WoffUtils.Woff1HeaderSize) ? _signature == WoffUtils.Woff1Signature : _signature == WoffUtils.Woff2Signature); // The header includes a reserved field; this must be set to zero. // If this field is non-zero, a conforming user agent must reject the file as invalid. Debug.Assert(_reserved == 0); return(true); }