Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Dec 2019 12:20:57 +0000 (UTC)
From:      Matthias Andree <mandree@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org
Subject:   svn commit: r521276 - in branches/2019Q4/graphics: ilmbase ilmbase/files openexr openexr/files
Message-ID:  <201912291220.xBTCKvW9077115@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mandree
Date: Sun Dec 29 12:20:56 2019
New Revision: 521276
URL: https://svnweb.freebsd.org/changeset/ports/521276

Log:
  MFH: r521275
  
  graphics/ilmbase,openexr: fix vulnerabilities
  
  Uses backported patches from upstream Git repository, without the
  exr2aces parts, and regenerates all openexr patches from scratch.
  
  The openexr part looks heaviweight because it regenerates all patches.
  
  Security:	e4d9dffb-2a32-11ea-9693-e1b3f6feec79
  Security:	CVE-2018-18443
  Security:	CVE-2018-18444
  
  Approved by:	ports-secteam@ (blanket, adding security patches)

Added:
  branches/2019Q4/graphics/ilmbase/files/patch-CVE-2018-18443
     - copied unchanged from r521275, head/graphics/ilmbase/files/patch-CVE-2018-18443
  branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_main.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImfTest_main.cpp
  branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.cpp
  branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.h
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.h
  branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfHeader.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImf_ImfHeader.cpp
  branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfRgbaFile.h
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImf_ImfRgbaFile.h
  branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfScanLineInputFile.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImf_ImfScanLineInputFile.cpp
  branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfSystemSpecific.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-IlmImf_ImfSystemSpecific.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrenvmap_main.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-exrenvmap_main.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrenvmap_readInputImage.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-exrenvmap_readInputImage.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrmakepreview_makePreview.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-exrmakepreview_makePreview.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrmaketiled_Image.h
     - copied unchanged from r521275, head/graphics/openexr/files/patch-exrmaketiled_Image.h
  branches/2019Q4/graphics/openexr/files/patch-exrmaketiled_main.cpp
     - copied unchanged from r521275, head/graphics/openexr/files/patch-exrmaketiled_main.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrmultiview_Image.h
     - copied unchanged from r521275, head/graphics/openexr/files/patch-exrmultiview_Image.h
Deleted:
  branches/2019Q4/graphics/openexr/files/patch-IlmImfTest__main.cpp
  branches/2019Q4/graphics/openexr/files/patch-IlmImf__ImfSystemSpecific.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrenvmap__main.cpp
  branches/2019Q4/graphics/openexr/files/patch-exrmaketiled__main.cpp
Modified:
  branches/2019Q4/graphics/ilmbase/Makefile
  branches/2019Q4/graphics/openexr/Makefile
  branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_testOptimizedInterleavePatterns.cpp
  branches/2019Q4/graphics/openexr/files/patch-IlmImfUtilTest_main.cpp
Directory Properties:
  branches/2019Q4/   (props changed)

Modified: branches/2019Q4/graphics/ilmbase/Makefile
==============================================================================
--- branches/2019Q4/graphics/ilmbase/Makefile	Sun Dec 29 12:16:18 2019	(r521275)
+++ branches/2019Q4/graphics/ilmbase/Makefile	Sun Dec 29 12:20:56 2019	(r521276)
@@ -3,7 +3,7 @@
 
 PORTNAME=	ilmbase
 PORTVERSION=	2.3.0
-PORTREVISION=	3
+PORTREVISION=	4
 CATEGORIES=	graphics devel
 MASTER_SITES=	https://github.com/openexr/openexr/releases/download/v${PORTVERSION}/
 

Copied: branches/2019Q4/graphics/ilmbase/files/patch-CVE-2018-18443 (from r521275, head/graphics/ilmbase/files/patch-CVE-2018-18443)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/ilmbase/files/patch-CVE-2018-18443	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/ilmbase/files/patch-CVE-2018-18443)
@@ -0,0 +1,30 @@
+From adbc1900cb9d25fcc4df008d4008b781cf2fa4f8 Mon Sep 17 00:00:00 2001
+From: Kimball Thurston <kdt3rd@gmail.com>
+Date: Thu, 27 Jun 2019 22:15:17 +1200
+Subject: [PATCH] Fix #350 - memory leak on exit
+
+This fixes CVE-2018-18443, the last thread pool provider set into the
+pool was not being correctly cleaned up at shutdown of the thread pool.
+
+Signed-off-by: Kimball Thurston <kdt3rd@gmail.com>
+---
+ CHANGES.md                          | 4 ++++ -- OMITTED/Matthias Andree
+ IlmBase/IlmThread/IlmThreadPool.cpp | 2 ++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/IlmBase/IlmThread/IlmThreadPool.cpp b/IlmBase/IlmThread/IlmThreadPool.cpp
+index 174ab98c..24ca7395 100644
+--- ./IlmThread/IlmThreadPool.cpp~
++++ ./IlmThread/IlmThreadPool.cpp
+@@ -566,9 +566,11 @@ ThreadPool::Data::~Data()
+ {
+ #ifdef ILMBASE_FORCE_CXX03
+     provider->finish();
++    delete provider;
+ #else
+     ThreadPoolProvider *p = provider.load( std::memory_order_relaxed );
+     p->finish();
++    delete p;
+ #endif
+ }
+ 

Modified: branches/2019Q4/graphics/openexr/Makefile
==============================================================================
--- branches/2019Q4/graphics/openexr/Makefile	Sun Dec 29 12:16:18 2019	(r521275)
+++ branches/2019Q4/graphics/openexr/Makefile	Sun Dec 29 12:20:56 2019	(r521276)
@@ -3,7 +3,7 @@
 
 PORTNAME=	openexr
 PORTVERSION=	2.3.0
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	graphics devel
 MASTER_SITES=	https://github.com/${PORTNAME}/${PORTNAME}/releases/download/v${PORTVERSION}/:dist \
 		LOCAL/mandree/:test

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_main.cpp (from r521275, head/graphics/openexr/files/patch-IlmImfTest_main.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_main.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImfTest_main.cpp)
@@ -0,0 +1,11 @@
+--- IlmImfTest/main.cpp.orig	2018-08-10 01:34:59 UTC
++++ IlmImfTest/main.cpp
+@@ -100,7 +100,7 @@
+ #include <string.h>
+ #include <time.h>
+ 
+-#if defined(OPENEXR_IMF_HAVE_LINUX_PROCFS) || defined(OPENEXR_IMF_HAVE_DARWIN)
++#if defined(OPENEXR_IMF_HAVE_LINUX_PROCFS) || defined(OPENEXR_IMF_HAVE_DARWIN) || defined(__FreeBSD__)
+     #include <unistd.h>
+     #include <sstream>
+ #endif

Modified: branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_testOptimizedInterleavePatterns.cpp
==============================================================================
--- branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_testOptimizedInterleavePatterns.cpp	Sun Dec 29 12:16:18 2019	(r521275)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImfTest_testOptimizedInterleavePatterns.cpp	Sun Dec 29 12:20:56 2019	(r521276)
@@ -1,4 +1,4 @@
---- IlmImfTest/testOptimizedInterleavePatterns.cpp.orig	2014-08-10 02:03:49 UTC
+--- IlmImfTest/testOptimizedInterleavePatterns.cpp.orig	2018-08-10 01:34:59 UTC
 +++ IlmImfTest/testOptimizedInterleavePatterns.cpp
 @@ -226,7 +226,8 @@ bool compare(const FrameBuffer& asRead,
                      writtenHalf=half(i.slice().fillValue);

Modified: branches/2019Q4/graphics/openexr/files/patch-IlmImfUtilTest_main.cpp
==============================================================================
--- branches/2019Q4/graphics/openexr/files/patch-IlmImfUtilTest_main.cpp	Sun Dec 29 12:16:18 2019	(r521275)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImfUtilTest_main.cpp	Sun Dec 29 12:20:56 2019	(r521276)
@@ -1,4 +1,4 @@
---- IlmImfUtilTest/main.cpp.orig	2014-08-10 04:24:00 UTC
+--- IlmImfUtilTest/main.cpp.orig	2018-08-10 01:34:59 UTC
 +++ IlmImfUtilTest/main.cpp
 @@ -46,7 +46,7 @@
  #include <cstring>

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.cpp (from r521275, head/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.cpp)
@@ -0,0 +1,91 @@
+--- IlmImf/ImfFrameBuffer.cpp.orig	2018-08-10 01:34:58 UTC
++++ IlmImf/ImfFrameBuffer.cpp
+@@ -74,6 +74,88 @@ Slice::Slice (PixelType t,
+     // empty
+ }
+ 
++Slice
++Slice::Make (
++    PixelType                   type,
++    const void*                 ptr,
++    const IMATH_NAMESPACE::V2i& origin,
++    int64_t                     w,
++    int64_t                     h,
++    size_t                      xStride,
++    size_t                      yStride,
++    int                         xSampling,
++    int                         ySampling,
++    double                      fillValue,
++    bool                        xTileCoords,
++    bool                        yTileCoords)
++{
++    char* base = reinterpret_cast<char*> (const_cast<void *> (ptr));
++    if (xStride == 0)
++    {
++        switch (type)
++        {
++            case UINT: xStride = sizeof (uint32_t); break;
++            case HALF: xStride = sizeof (uint16_t); break;
++            case FLOAT: xStride = sizeof (float); break;
++            case NUM_PIXELTYPES:
++                THROW (IEX_NAMESPACE::ArgExc, "Invalid pixel type.");
++        }
++    }
++    if (yStride == 0)
++        yStride = static_cast<size_t> (w / xSampling) * xStride;
++
++    // data window is an int, so force promote to higher type to avoid
++    // overflow for off y (degenerate size checks should be in
++    // ImfHeader::sanityCheck, but offset can be large-ish)
++    int64_t offx = (static_cast<int64_t> (origin.x) /
++                    static_cast<int64_t> (xSampling));
++    offx *= static_cast<int64_t> (xStride);
++
++    int64_t offy = (static_cast<int64_t> (origin.y) /
++                    static_cast<int64_t> (ySampling));
++    offy *= static_cast<int64_t> (yStride);
++
++    return Slice (
++        type,
++        base - offx - offy,
++        xStride,
++        yStride,
++        xSampling,
++        ySampling,
++        fillValue,
++        xTileCoords,
++        yTileCoords);
++}
++
++Slice
++Slice::Make (
++    PixelType                     type,
++    const void*                   ptr,
++    const IMATH_NAMESPACE::Box2i& dataWindow,
++    size_t                        xStride,
++    size_t                        yStride,
++    int                           xSampling,
++    int                           ySampling,
++    double                        fillValue,
++    bool                          xTileCoords,
++    bool                          yTileCoords)
++{
++    return Make (
++        type,
++        ptr,
++        dataWindow.min,
++        static_cast<int64_t> (dataWindow.max.x) -
++            static_cast<int64_t> (dataWindow.min.x) + 1,
++        static_cast<int64_t> (dataWindow.max.y) -
++            static_cast<int64_t> (dataWindow.min.y) + 1,
++        xStride,
++        yStride,
++        xSampling,
++        ySampling,
++        fillValue,
++        xTileCoords,
++        yTileCoords);
++}
+ 
+ void
+ FrameBuffer::insert (const char name[], const Slice &slice)

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.h (from r521275, head/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.h	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImf_ImfFrameBuffer.h)
@@ -0,0 +1,56 @@
+--- IlmImf/ImfFrameBuffer.h.orig	2018-08-10 01:34:58 UTC
++++ IlmImf/ImfFrameBuffer.h
+@@ -48,14 +48,15 @@
+ #include "ImfPixelType.h"
+ #include "ImfExport.h"
+ #include "ImfNamespace.h"
++#include "ImathBox.h"
+ 
+ #include <map>
+ #include <string>
++#include <cstdint>
+ 
+ 
+ OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
+ 
+-
+ //-------------------------------------------------------
+ // Description of a single slice of the frame buffer:
+ //
+@@ -148,6 +149,36 @@ struct Slice
+            double fillValue = 0.0,
+            bool xTileCoords = false,
+            bool yTileCoords = false);
++
++    // Does the heavy lifting of computing the base pointer for a slice,
++    // avoiding overflow issues with large origin offsets
++    //
++    // if xStride == 0, assumes sizeof(pixeltype)
++    // if yStride == 0, assumes xStride * ( w / xSampling )
++    static Slice Make(PixelType type,
++                      const void *ptr,
++                      const IMATH_NAMESPACE::V2i &origin,
++                      int64_t w,
++                      int64_t h,
++                      size_t xStride = 0,
++                      size_t yStride = 0,
++                      int xSampling = 1,
++                      int ySampling = 1,
++                      double fillValue = 0.0,
++                      bool xTileCoords = false,
++                      bool yTileCoords = false);
++    // same as above, just computes w and h for you
++    // from a data window
++    static Slice Make(PixelType type,
++                      const void *ptr,
++                      const IMATH_NAMESPACE::Box2i &dataWindow,
++                      size_t xStride = 0,
++                      size_t yStride = 0,
++                      int xSampling = 1,
++                      int ySampling = 1,
++                      double fillValue = 0.0,
++                      bool xTileCoords = false,
++                      bool yTileCoords = false);
+ };
+ 
+ 

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfHeader.cpp (from r521275, head/graphics/openexr/files/patch-IlmImf_ImfHeader.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfHeader.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImf_ImfHeader.cpp)
@@ -0,0 +1,64 @@
+--- IlmImf/ImfHeader.cpp.orig	2018-08-10 01:34:58 UTC
++++ IlmImf/ImfHeader.cpp
+@@ -785,30 +785,46 @@ Header::sanityCheck (bool isTiled, bool isMultipartFil
+ 	throw IEX_NAMESPACE::ArgExc ("Invalid data window in image header.");
+     }
+ 
+-    if (maxImageWidth > 0 &&
+-        maxImageWidth < (dataWindow.max.x - dataWindow.min.x + 1))
++    int w = (dataWindow.max.x - dataWindow.min.x + 1);
++    if (maxImageWidth > 0 && maxImageWidth < w)
+     {
+ 	THROW (IEX_NAMESPACE::ArgExc, "The width of the data window exceeds the "
+ 			    "maximum width of " << maxImageWidth << "pixels.");
+     }
+ 
+-    if (maxImageHeight > 0 &&
+-	maxImageHeight < dataWindow.max.y - dataWindow.min.y + 1)
++    int h = (dataWindow.max.y - dataWindow.min.y + 1);
++    if (maxImageHeight > 0 && maxImageHeight < h)
+     {
+-	THROW (IEX_NAMESPACE::ArgExc, "The width of the data window exceeds the "
+-			    "maximum width of " << maxImageHeight << "pixels.");
++	THROW (IEX_NAMESPACE::ArgExc, "The height of the data window exceeds the "
++			    "maximum height of " << maxImageHeight << "pixels.");
+     }
+ 
+-   // chunk table must be smaller than the maximum image area
+-   // (only reachable for unknown types or damaged files: will have thrown earlier
+-   //  for regular image types)
+-   if( maxImageHeight>0 && maxImageWidth>0 && 
+-       hasChunkCount() && chunkCount()>Int64(maxImageWidth)*Int64(maxImageHeight))
+-   {
+-       THROW (IEX_NAMESPACE::ArgExc, "chunkCount exceeds maximum area of "
+-       << Int64(maxImageWidth)*Int64(maxImageHeight) << " pixels." );
++    // make sure to avoid simple math overflow for large offsets
++    // we know we're at a positive width because of checks above
++    long long bigW = static_cast<long long>( w );
++    long long absOffY = std::abs ( dataWindow.min.y );
++    long long absOffX = std::abs ( dataWindow.min.x );
++    long long offX = static_cast<long long>( INT_MAX ) - absOffX;
++    long long offsetCount = absOffY * bigW;
++    long long bytesLeftPerLine = static_cast<long long>( INT_MAX ) / bigW;
++    if (bytesLeftPerLine < absOffY || offX < offsetCount)
++    {
++	THROW (IEX_NAMESPACE::ArgExc, "Data window [ (" << dataWindow.min.x
++	       << ", " << dataWindow.min.x << ") - (" << dataWindow.max.x
++	       << ", " << dataWindow.max.x
++	       << ") ] offset / size will overflow pointer calculations");
++    }
++
++    // chunk table must be smaller than the maximum image area
++    // (only reachable for unknown types or damaged files: will have thrown earlier
++    //  for regular image types)
++    if( maxImageHeight>0 && maxImageWidth>0 && 
++	hasChunkCount() && chunkCount()>Int64(maxImageWidth)*Int64(maxImageHeight))
++    {
++	THROW (IEX_NAMESPACE::ArgExc, "chunkCount exceeds maximum area of "
++	       << Int64(maxImageWidth)*Int64(maxImageHeight) << " pixels." );
+        
+-   }
++    }
+ 
+ 
+     //

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfRgbaFile.h (from r521275, head/graphics/openexr/files/patch-IlmImf_ImfRgbaFile.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfRgbaFile.h	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImf_ImfRgbaFile.h)
@@ -0,0 +1,68 @@
+--- IlmImf/ImfRgbaFile.h.orig	2018-08-10 01:34:58 UTC
++++ IlmImf/ImfRgbaFile.h
+@@ -60,6 +60,65 @@
+ 
+ OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
+ 
++//-------------------------------------------------------
++// Utility to compute the origin-based pointer address
++//
++// With large offsets for the data window, the naive code
++// can wrap around, especially on 32-bit machines.
++// This can be used to avoid that
++//-------------------------------------------------------
++
++inline const Rgba *
++ComputeBasePointer (
++    const Rgba*                 ptr,
++    const IMATH_NAMESPACE::V2i& origin,
++    int64_t                     w,
++    size_t                      xStride = 1,
++    size_t                      yStride = 0)
++{
++    if (yStride == 0)
++        yStride = w;
++    int64_t offx = static_cast<int64_t> (origin.x);
++    offx *= xStride;
++    int64_t offy = static_cast<int64_t> (origin.y);
++    offy *= yStride;
++    return ptr - offx - offy;
++}
++
++inline const Rgba *
++ComputeBasePointer (const Rgba* ptr, const IMATH_NAMESPACE::Box2i& dataWindow)
++{
++    return ComputeBasePointer (ptr, dataWindow.min,
++                         static_cast<int64_t> (dataWindow.max.x) -
++                          static_cast<int64_t> (dataWindow.min.x) + 1);
++}
++
++inline Rgba*
++ComputeBasePointer (
++    Rgba*                       ptr,
++    const IMATH_NAMESPACE::V2i& origin,
++    int64_t                     w,
++    size_t                      xStride = 1,
++    size_t                      yStride = 0)
++{
++    if (yStride == 0)
++        yStride = w;
++    int64_t offx = static_cast<int64_t> (origin.x);
++    offx *= xStride;
++    int64_t offy = static_cast<int64_t> (origin.y);
++    offy *= yStride;
++    return ptr - offx - offy;
++}
++
++inline Rgba*
++ComputeBasePointer (Rgba* ptr, const IMATH_NAMESPACE::Box2i& dataWindow)
++{
++    return ComputeBasePointer (
++        ptr,
++        dataWindow.min,
++        static_cast<int64_t> (dataWindow.max.x) -
++            static_cast<int64_t> (dataWindow.min.x) + 1);
++}
+ 
+ //
+ // RGBA output file.

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfScanLineInputFile.cpp (from r521275, head/graphics/openexr/files/patch-IlmImf_ImfScanLineInputFile.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfScanLineInputFile.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImf_ImfScanLineInputFile.cpp)
@@ -0,0 +1,52 @@
+--- IlmImf/ImfScanLineInputFile.cpp.orig	2018-08-10 01:34:58 UTC
++++ IlmImf/ImfScanLineInputFile.cpp
+@@ -524,14 +524,14 @@ LineBufferTask::execute ()
+     
+         if (_lineBuffer->uncompressedData == 0)
+         {
+-            int uncompressedSize = 0;
++            size_t uncompressedSize = 0;
+             int maxY = min (_lineBuffer->maxY, _ifd->maxY);
+     
+             for (int i = _lineBuffer->minY - _ifd->minY;
+                  i <= maxY - _ifd->minY;
+ 		 ++i)
+ 	    {
+-                uncompressedSize += (int) _ifd->bytesPerLine[i];
++                uncompressedSize += _ifd->bytesPerLine[i];
+ 	    }
+     
+             if (_lineBuffer->compressor &&
+@@ -628,11 +628,11 @@ LineBufferTask::execute ()
+                     //
+     
+                     char *linePtr  = slice.base +
+-                                        divp (y, slice.ySampling) *
+-                                        slice.yStride;
++                                        intptr_t( divp (y, slice.ySampling) ) *
++                                        intptr_t( slice.yStride );
+     
+-                    char *writePtr = linePtr + dMinX * slice.xStride;
+-                    char *endPtr   = linePtr + dMaxX * slice.xStride;
++                    char *writePtr = linePtr + intptr_t( dMinX ) * intptr_t( slice.xStride );
++                    char *endPtr   = linePtr + intptr_t( dMaxX ) * intptr_t( slice.xStride );
+                     
+                     copyIntoFrameBuffer (readPtr, writePtr, endPtr,
+                                          slice.xStride, slice.fill,
+@@ -838,14 +838,14 @@ LineBufferTaskIIF::execute()
+         
+         if (_lineBuffer->uncompressedData == 0)
+         {
+-            int uncompressedSize = 0;
++            size_t uncompressedSize = 0;
+             int maxY = min (_lineBuffer->maxY, _ifd->maxY);
+             
+             for (int i = _lineBuffer->minY - _ifd->minY;
+             i <= maxY - _ifd->minY;
+             ++i)
+             {
+-                uncompressedSize += (int) _ifd->bytesPerLine[i];
++                uncompressedSize += _ifd->bytesPerLine[i];
+             }
+             
+             if (_lineBuffer->compressor &&

Copied: branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfSystemSpecific.cpp (from r521275, head/graphics/openexr/files/patch-IlmImf_ImfSystemSpecific.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-IlmImf_ImfSystemSpecific.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-IlmImf_ImfSystemSpecific.cpp)
@@ -0,0 +1,29 @@
+--- IlmImf/ImfSystemSpecific.cpp.orig	2018-08-10 01:34:58 UTC
++++ IlmImf/ImfSystemSpecific.cpp
+@@ -44,11 +44,23 @@ namespace {
+     // Helper functions for gcc + SSE enabled
+     void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx)
+     {
++#if __i386__
+         __asm__ __volatile__ (
+-            "cpuid"
+-            : /* Output  */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) 
+-            : /* Input   */ "a"(n)
++            "xchgl %%ebx,%k1\n"
++            "cpuid\n"
++            "xchgl %%ebx,%k1" \
++            : /* Output  */ "=a"(eax), "=&r"(ebx), "=c"(ecx), "=d"(edx)
++            : /* Input   */ "0"(n)
+             : /* Clobber */);
++#else
++        __asm__ __volatile__ (
++            "xchgq %%rbx,%q1\n"
++            "cpuid\n"
++            "xchgq %%rbx,%q1" \
++            : /* Output  */ "=a"(eax), "=&r"(ebx), "=c"(ecx), "=d"(edx)
++            : /* Input   */ "0"(n)
++            : /* Clobber */);
++#endif
+     }
+ 
+ #else // IMF_HAVE_SSE2 && __GNUC__

Copied: branches/2019Q4/graphics/openexr/files/patch-exrenvmap_main.cpp (from r521275, head/graphics/openexr/files/patch-exrenvmap_main.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-exrenvmap_main.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-exrenvmap_main.cpp)
@@ -0,0 +1,10 @@
+--- exrenvmap/main.cpp.orig	2018-08-10 01:35:00 UTC
++++ exrenvmap/main.cpp
+@@ -47,6 +47,7 @@
+ #include <ImfHeader.h>
+ 
+ #include <iostream>
++#include <cstring>
+ #include <exception>
+ #include <string>
+ #include <string.h>

Copied: branches/2019Q4/graphics/openexr/files/patch-exrenvmap_readInputImage.cpp (from r521275, head/graphics/openexr/files/patch-exrenvmap_readInputImage.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-exrenvmap_readInputImage.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-exrenvmap_readInputImage.cpp)
@@ -0,0 +1,11 @@
+--- exrenvmap/readInputImage.cpp.orig	2018-08-10 01:35:00 UTC
++++ exrenvmap/readInputImage.cpp
+@@ -194,7 +194,7 @@ readSixImages (const char inFileName[],
+                    "from the data window of other cube faces.");
+         }
+ 
+-        in.setFrameBuffer (pixels - dw.min.x - dw.min.y * w, 1, w);
++        in.setFrameBuffer (ComputeBasePointer (pixels, dw), 1, w);
+         in.readPixels (dw.min.y, dw.max.y);
+ 
+         pixels += w * h;

Copied: branches/2019Q4/graphics/openexr/files/patch-exrmakepreview_makePreview.cpp (from r521275, head/graphics/openexr/files/patch-exrmakepreview_makePreview.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-exrmakepreview_makePreview.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-exrmakepreview_makePreview.cpp)
@@ -0,0 +1,11 @@
+--- exrmakepreview/makePreview.cpp.orig	2018-08-10 01:35:00 UTC
++++ exrmakepreview/makePreview.cpp
+@@ -110,7 +110,7 @@ generatePreview (const char inFileName[],
+     int h = dw.max.y - dw.min.y + 1;
+ 
+     Array2D <Rgba> pixels (h, w);
+-    in.setFrameBuffer (&pixels[0][0] - dw.min.y * w - dw.min.x, 1, w);
++    in.setFrameBuffer (ComputeBasePointer (&pixels[0][0], dw), 1, w);
+     in.readPixels (dw.min.y, dw.max.y);
+ 
+     //

Copied: branches/2019Q4/graphics/openexr/files/patch-exrmaketiled_Image.h (from r521275, head/graphics/openexr/files/patch-exrmaketiled_Image.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-exrmaketiled_Image.h	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-exrmaketiled_Image.h)
@@ -0,0 +1,20 @@
+--- exrmaketiled/Image.h.orig	2018-08-10 01:35:00 UTC
++++ exrmaketiled/Image.h
+@@ -190,12 +190,12 @@ OPENEXR_IMF_INTERNAL_NAMESPACE::Slice
+ TypedImageChannel<T>::slice () const
+ {
+     const IMATH_NAMESPACE::Box2i &dw = image().dataWindow();
+-    int w = dw.max.x - dw.min.x + 1;
+ 
+-    return OPENEXR_IMF_INTERNAL_NAMESPACE::Slice (pixelType(),
+-		       (char *) (&_pixels[0][0] - dw.min.y * w - dw.min.x),
+-		       sizeof (T),
+-		       w * sizeof (T));
++    return OPENEXR_IMF_INTERNAL_NAMESPACE::Slice::Make (
++        pixelType(),
++        &_pixels[0][0],
++        dw,
++        sizeof (T));
+ }
+ 
+ 

Copied: branches/2019Q4/graphics/openexr/files/patch-exrmaketiled_main.cpp (from r521275, head/graphics/openexr/files/patch-exrmaketiled_main.cpp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-exrmaketiled_main.cpp	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-exrmaketiled_main.cpp)
@@ -0,0 +1,10 @@
+--- exrmaketiled/main.cpp.orig	2018-08-10 01:35:00 UTC
++++ exrmaketiled/main.cpp
+@@ -43,6 +43,7 @@
+ #include "makeTiled.h"
+ 
+ #include <iostream>
++#include <cstring>
+ #include <exception>
+ #include <string>
+ #include <string.h>

Copied: branches/2019Q4/graphics/openexr/files/patch-exrmultiview_Image.h (from r521275, head/graphics/openexr/files/patch-exrmultiview_Image.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q4/graphics/openexr/files/patch-exrmultiview_Image.h	Sun Dec 29 12:20:56 2019	(r521276, copy of r521275, head/graphics/openexr/files/patch-exrmultiview_Image.h)
@@ -0,0 +1,45 @@
+--- exrmultiview/Image.h.orig	2018-08-10 01:35:00 UTC
++++ exrmultiview/Image.h
+@@ -159,6 +159,8 @@ TypedImageChannel<T>::TypedImageChannel
+     _ySampling (ySampling),
+     _pixels (0, 0)
+ {
++    if ( _xSampling < 1 || _ySampling < 1 )
++        throw IEX_NAMESPACE::ArgExc ("Invalid x/y sampling values");
+     resize();
+ }
+ 
+@@ -201,14 +203,14 @@ TypedImageChannel<T>::slice () const
+     const IMATH_NAMESPACE::Box2i &dw = image().dataWindow();
+     int w = dw.max.x - dw.min.x + 1;
+ 
+-    return IMF::Slice (pixelType(),
+-		       (char *) (&_pixels[0][0] -
+-				 dw.min.y / _ySampling * (w / _xSampling) -
+-				 dw.min.x / _xSampling),
+-		       sizeof (T),
+-		       (w / _xSampling) * sizeof (T),
+-		       _xSampling,
+-		       _ySampling);
++    return IMF::Slice::Make (
++        pixelType(),
++        &_pixels[0][0],
++        dw,
++        sizeof(T),
++        (w / _xSampling) * sizeof (T),
++        _xSampling,
++        _ySampling);
+ }
+ 
+ 
+@@ -227,7 +229,9 @@ template <class T>
+ void
+ TypedImageChannel<T>::black ()
+ {
+-    memset(&_pixels[0][0],0,image().width()/_xSampling*image().height()/_ySampling*sizeof(T));
++    size_t nx = static_cast<size_t>( image().width() ) / static_cast<size_t>( _xSampling );
++    size_t ny = static_cast<size_t>( image().height() ) / static_cast<size_t>( _ySampling );
++    memset(&_pixels[0][0],0,nx*ny*sizeof(T));
+ }
+ 
+ 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912291220.xBTCKvW9077115>