private static int readTiffHeader(InputStream is, int length, TiffHeader tiffHeader)
      throws IOException {
    if (length <= 8) {
      return 0;
    }

    // read the byte order
    tiffHeader.byteOrder = StreamProcessor.readPackedInt(is, 4, false);
    length -= 4;
    if (tiffHeader.byteOrder != TIFF_BYTE_ORDER_LITTLE_END &&
        tiffHeader.byteOrder != TIFF_BYTE_ORDER_BIG_END) {
      FLog.e(TAG, "Invalid TIFF header");
      return 0;
    }
    tiffHeader.isLittleEndian = (tiffHeader.byteOrder == TIFF_BYTE_ORDER_LITTLE_END);

    // read the offset of the first IFD and check if it is reasonable
    tiffHeader.firstIfdOffset = StreamProcessor.readPackedInt(is, 4, tiffHeader.isLittleEndian);
    length -= 4;
    if (tiffHeader.firstIfdOffset < 8 || tiffHeader.firstIfdOffset - 8 > length) {
      FLog.e(TAG, "Invalid offset");
      return 0;
    }

    return length;
  }
private static int readTiffHeader ( InputStream is , int length , TiffHeader tiffHeader ) throws IOException { if ( length <= 8 ) { return 0 ; } tiffHeader . byteOrder = StreamProcessor . readPackedInt ( is , 4 , false ) ; length -= 4 ; if ( tiffHeader . byteOrder != TIFF_BYTE_ORDER_LITTLE_END && tiffHeader . byteOrder != TIFF_BYTE_ORDER_BIG_END ) { FLog . e ( TAG , "Invalid TIFF header" ) ; return 0 ; } tiffHeader . isLittleEndian = ( tiffHeader . byteOrder == TIFF_BYTE_ORDER_LITTLE_END ) ; tiffHeader . firstIfdOffset = StreamProcessor . readPackedInt ( is , 4 , tiffHeader . isLittleEndian ) ; length -= 4 ; if ( tiffHeader . firstIfdOffset < 8 || tiffHeader . firstIfdOffset - 8 > length ) { FLog . e ( TAG , "Invalid offset" ) ; return 0 ; } return length ; }
Reads the TIFF header to the provided structure.
@param is the input stream of TIFF data
@param length length of the TIFF data
@return remaining length of the data on success, 0 on failure
@throws IOException