OpenEXR v3.0.0-beta Release Notes

Release Date: 2021-03-16 // 10 months ago
  • ๐Ÿš€ Major release with major build restructing, security improvements, and ๐Ÿ†• new features:

    • Restructuring:

      • The IlmBase/PyIlmBase submodules have been separated into the Imath project, now included by OpenEXR via a CMake submodule dependency, fetched automatically via CMake's FetchContent if necessary.
      • The library is now called libOpenEXR (instead of libIlmImf). No header files have been renamed, they retain the Imf prefix.
      • Symbol linkage visibility is limited to specific public symbols. See [SymbolVisibility.md](docs/SymbolVisibility.md) for more details.
    • ๐Ÿ— Build improvements:

      • No more simultaneous static/shared build option.
      • Community-provided support for bazel.
    • ๐Ÿ†• New Features:

    • ๐Ÿ”„ Changes:

      • EXR files with no channels are no longer allowed.
      • Hard limit on the size of deep tile sizes; tiles must be less than 230 pixels.
      • Tiled DWAB files used STATIC_HUFFMAN compression.
      • Int64 and SInt64 types are deprecated in favor of uint64_t and int64_t.
      • Header files have been pruned of extraneous #include's ("Include What You Use"), which may generate compiler errors in application source code from undefined symbols or partially-defined types. These can be resolved by identifying and including the appropriate header.
      • See the porting guide for details about differences from previous releases and how to address them.
      • Also refer to the porting guide for details about changes to Imath.

    Specific OSS-fuzz issues addressed include:

    • OSS-fuzz 31539 Out-of-memory in openexr_exrcheck_fuzzer (946)
    • OSS-fuzz 31390 Out-of-memory in openexr_exrcheck_fuzzer (939)
    • OSS-fuzz 31293 Segv on unknown address in Imf_2_5::copyIntoFrameBuffer (932)
    • OSS-fuzz 31291 Sanitizer CHECK failure in "((0 && "Address is not in memory and not in shadow?")) != (0)" (0x0, 0x0) (932)
    • OSS-fuzz 31228 Integer-overflow in bool Imf_2_5::readDeepTile (930)
    • OSS-fuzz 31221 Integer-overflow in bool Imf_2_5::readDeepTile (930)
    • OSS-fuzz 31072 Out-of-memory in openexr_exrcheck_fuzzer (928)
    • OSS-fuzz 31044 Timeout in openexr_exrcheck_fuzzer (926)
    • OSS-fuzz 31015 Direct-leak in Imf_2_5::TypedAttribute::readValueFrom (925)
    • OSS-fuzz 30969 Direct-leak in Imf_2_5::DwaCompressor::LossyDctDecoderBase::execute (923)
    • OSS-fuzz 30616 Timeout in openexr_exrcheck_fuzzer (919)
    • OSS-fuzz 30605 Out-of-memory in openexr_exrcheck_fuzzer (920)
    • OSS-fuzz 30249 Out-of-memory in openexr_exrcheck_fuzzer (915)
    • OSS-fuzz 29682 Out-of-memory in openexr_exrcheck_fuzzer (902)
    • OSS-fuzz 29393 Timeout in openexr_exrcheck_fuzzer (902)
    • OSS-fuzz 28419 Out-of-memory in openexr_exrcheck_fuzzer (895)
    • OSS-fuzz 28155 Crash in Imf_2_5::PtrIStream::read (872)
    • OSS-fuzz 28051 Heap-buffer-overflow in Imf_2_5::copyIntoFrameBuffer (872)
    • OSS-fuzz 27409 Out-of-memory in openexr_exrcheck_fuzzer (863)
    • OSS-fuzz 26641 Invalid-enum-value in readSingleImage (859)
    • OSS-fuzz 25648 Out-of-memory in openexr_scanlines_fuzzer (839)
    • OSS-fuzz 25156 Out-of-memory in openexr_scanlines_fuzzer (824)
    • OSS-fuzz 25002 Out-of-memory in openexr_deepscanlines_fuzzer (824)
    • OSS-fuzz 24959 Integer-overflow in Imf_2_5::cachePadding (824)
    • OSS-fuzz 24857 Out-of-memory in openexr_exrheader_fuzzer (824)
    • OSS-fuzz 24573 Out-of-memory in openexr_exrenvmap_fuzzer (824)

    ๐Ÿ”€ Merged Pull Requests

    • โœ… 971 Add missing #includes in OpenEXRFuzzTest
    • ๐Ÿš€ 967 3.0.0-beta release notes
    • 965 Bump version to 3.0.0
    • โšก๏ธ 964 Bazel-Support: Update Bazel build files to reflect CMake state
    • 963 Properly expose header files for float exceptions
    • ๐Ÿšš 962 Remove IexMath as a library
    • 961 Enable policy 77 if possible.
    • 960 Still needed to push the OPENEXR_INSTALL definition higher
    • 959 The OPENEXR_INSTALL option needs to be defined before it's used
    • 956 Replace stray Imath:: with IMATH_NAMESPACE::
    • 955 Usability improvements for submodule use.
    • 953 Add GLOBAL to add_library(zlib)
    • ๐Ÿšš 952 Remove 'long' overloads for Xdr::read and Xdr::write functions
    • 951 Change copyright notices to standard SPDX format
    • 950 Don't install ImfB44Compressor.h
    • ๐Ÿ— 949 Bazel build: Bump Imath version to current master
    • 948 Replace Int64/SInt64 with uint64_t/int64_t
    • ๐Ÿ‘ 946 better flag/type verification in deep input files
    • โš  945 Fix sign-compare warning
    • ๐Ÿ— 944 Build-time options for where to get Imath
    • 943 Add include/OpenEXR to -I and OpenEXRUtil,Iex,IlmThread to -L
    • ๐Ÿ— 942 Resolve #882 static/shared dual build
    • 939 enforce limit on area of deep tiles to prevent excessive memory use
    • 938 Replace UINT_MAX with explicit cast
    • ๐Ÿ 937 Add #include to fix Windows compile error
    • ๐Ÿ— 936 Incorporate recent config changes into BUILD.bazel
    • 932 exrcheck: fix handling xSampling when computating slice base
    • 930 exrcheck: use 64 bit integer math to prevent pointer overflows
    • ๐Ÿšš 929 Remove all references to "IlmBase"
    • ๐Ÿ‘ 928 exrcheck: better tile checks in reduceMemory mode
    • โช 926 exrcheck: Revert to using 'getStep' for Rgba interfaces
    • 925 handle reallocation of idmanifest attributes
    • ๐Ÿ†“ 923 free up memory if DWA unRle throws
    • 921 Only wait for and join joinable threads
    • 920 exrcheck: check for tilesize in reduceMemory mode
    • 919 validate size of DWA RLE buffer in decompress
    • โœ… 916 use NO_COMPRESSION in OpenEXRTest/testBackwardCompatibility
    • 915 exrcheck: assume lots of memory required whenever MultiPart ctor throws
    • ๐Ÿ—„ 913 Fixes for recent Imath deprecations
    • 911 Prevent reading or writing OpenEXR images with no channels
    • ๐Ÿ‘ 909 Add idmanifest attribute support
    • โœ… 906 expand testCompression to better test DWAA, DWAB and tiled images
    • 902 exrcheck: rework 'reduceMemory' and 'reduceTime' modes
    • 899 Change NOTICE to STATUS to address #891
    • ๐Ÿ‘ 898 Add support for Bazel
    • 895 exrcheck: make reduced memory/time modes more sensitive
    • 893 Include where required by newer compilers
    • 877 ImfCompressor: use STATIC_HUFFMAN for tiled DWAB files (fix #344)
    • 874 Fix missing header for Visual Studio
    • ๐Ÿ‘€ 872 Handle xsampling and bad seekg() calls in exrcheck
    • 869 Enable extra version tag
    • ๐Ÿ— 868 Make the default symbol visibility hidden for unixen builds
    • ๐Ÿšš 864 Remove legacy throw() specifications, conform to c++11
    • ๐Ÿ‘ 862 E2K: added initial support of MCST Elbrus 2000 CPU architecture
    • โ†ช 859 Invalidenum workaround
    • ๐Ÿ”€ 858 Merge RC-3 to master
    • 848 Validate reconstructed chunk sizes
    • 846 fix extra byte in DWA compressed data
    • 839 Validate tileoffset table size
    • โœ… 828 Address issues reported by Undefined Behavior Sanitizer running IlmImfTest
    • 824 reduce size limit for scanline files; prevent large chunkoffset allocations
    • 819 re-order shift/compare in FastHuf to prevent undefined shift overflow
    • 815 cmake: Fix paths in .pc files
    • 802 Modernize mutex
    • โœ… 796 Initial rename of OpenEXR and IlmBase directories and seperation of Test
    • 791 Initial removal of all Imath source files and minimal cmake adjustments
    • ๐Ÿ›  769 Bugfix/arkellr remove cvsignore files