diff --git a/.gitignore b/.gitignore index d0e0d07..c329709 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,7 @@ /OpenUSD-25.05.tar.gz /OpenUSD-25.05.01.tar.gz /OpenUSD-25.08.tar.gz +/OpenUSD-25.11.tar.gz +/OpenUSD-26.03.tar.gz +/OpenUSD-26.05.tar.gz +/OpenUSD-26.08.tar.gz diff --git a/0001-Downstream-only-add-an-SONAME-version.patch b/0001-Downstream-only-add-an-SONAME-version.patch index 250eae0..db129dd 100644 --- a/0001-Downstream-only-add-an-SONAME-version.patch +++ b/0001-Downstream-only-add-an-SONAME-version.patch @@ -1,4 +1,4 @@ -From 483ce5b8e320e89016fff7b3480216ba94c032ff Mon Sep 17 00:00:00 2001 +From ee4e9b30e14133e35c23821d3dc7aa93df354a38 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Fri, 27 Oct 2023 12:56:58 -0400 Subject: [PATCH] Downstream-only: add an SONAME version @@ -33,14 +33,14 @@ built with -DPXR_BUILD_EXAMPLES=OFF, but it is.) --- cmake/defaults/Version.cmake | 6 ++++++ cmake/macros/Private.cmake | 1 + - cmake/macros/Public.cmake | 1 + - 3 files changed, 8 insertions(+) + cmake/macros/Public.cmake | 2 ++ + 3 files changed, 9 insertions(+) diff --git a/cmake/defaults/Version.cmake b/cmake/defaults/Version.cmake -index 447c74e4d..a990f071b 100644 +index c31b5e8d9..fabb45397 100644 --- a/cmake/defaults/Version.cmake +++ b/cmake/defaults/Version.cmake -@@ -10,3 +10,9 @@ set(PXR_MINOR_VERSION "25") +@@ -10,3 +10,9 @@ set(PXR_MINOR_VERSION "26") set(PXR_PATCH_VERSION "8") # NOTE: Must not have leading 0 for single digits math(EXPR PXR_VERSION "${PXR_MAJOR_VERSION} * 10000 + ${PXR_MINOR_VERSION} * 100 + ${PXR_PATCH_VERSION}") @@ -51,29 +51,37 @@ index 447c74e4d..a990f071b 100644 + "Downstream shared object version" +) diff --git a/cmake/macros/Private.cmake b/cmake/macros/Private.cmake -index 6fe1134c1..06aecd083 100644 +index cddb4e095..5e4b4603a 100644 --- a/cmake/macros/Private.cmake +++ b/cmake/macros/Private.cmake -@@ -1372,6 +1372,7 @@ function(_pxr_library NAME) +@@ -1355,6 +1355,7 @@ function(_pxr_library NAME) + FOLDER "${folder}" + POSITION_INDEPENDENT_CODE ON IMPORT_PREFIX "${args_PREFIX}" ++ SOVERSION ${PXR_DOWNSTREAM_SOVERSION} PREFIX "${args_PREFIX}" SUFFIX "${args_SUFFIX}" -+ SOVERSION ${PXR_DOWNSTREAM_SOVERSION} ) - - target_compile_definitions(${NAME} diff --git a/cmake/macros/Public.cmake b/cmake/macros/Public.cmake -index 807cf7d83..7225af783 100644 +index 5f6a5456b..553b645ec 100644 --- a/cmake/macros/Public.cmake +++ b/cmake/macros/Public.cmake -@@ -1121,6 +1121,7 @@ function(pxr_toplevel_prologue) - FOLDER "${folder}" +@@ -415,6 +415,7 @@ function(pxr_library NAME) + TYPE "${args_TYPE}" + PREFIX "${prefix}" + SUFFIX "${suffix}" ++ SOVERSION ${PXR_DOWNSTREAM_SOVERSION} + SUBDIR "${subdir}" + CPPFILES "${args_CPPFILES};${${NAME}_CPPFILES}" + PUBLIC_HEADERS "${args_PUBLIC_HEADERS};${${NAME}_PUBLIC_HEADERS}" +@@ -1213,6 +1214,7 @@ function(pxr_toplevel_prologue) PREFIX "${libPrefix}" IMPORT_PREFIX "${libPrefix}" + OUTPUT_NAME ${libName} + SOVERSION ${PXR_DOWNSTREAM_SOVERSION} ) _get_install_dir("lib" libInstallPrefix) install( -- -2.50.1 +2.55.0 diff --git a/0001-Downstream-only-use-Valgrind-macro-instead-of-inline.patch b/0001-Downstream-only-use-Valgrind-macro-instead-of-inline.patch index 62f0370..6d2305c 100644 --- a/0001-Downstream-only-use-Valgrind-macro-instead-of-inline.patch +++ b/0001-Downstream-only-use-Valgrind-macro-instead-of-inline.patch @@ -1,4 +1,4 @@ -From 75d4451fa64e086edd9d621af681df13cebde5eb Mon Sep 17 00:00:00 2001 +From 817e23674f1b4ba62481c4e9794f0665a44d83f8 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Fri, 1 Aug 2025 08:47:41 -0400 Subject: [PATCH] Downstream-only: use Valgrind macro instead of inline @@ -13,7 +13,7 @@ on aarch64. 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/pxr/exec/vdf/executorDataVector.cpp b/pxr/exec/vdf/executorDataVector.cpp -index 12f9e517e..7e5625678 100644 +index 96dacca06..7e5625678 100644 --- a/pxr/exec/vdf/executorDataVector.cpp +++ b/pxr/exec/vdf/executorDataVector.cpp @@ -11,40 +11,18 @@ @@ -35,7 +35,7 @@ index 12f9e517e..7e5625678 100644 static inline void Vdf_ExecutorDataVector_ValgrindMakeDefined(void *ptr, size_t size) { --#if defined(ARCH_OS_LINUX) +-#if defined(ARCH_OS_LINUX) && defined(ARCH_CPU_INTEL) - // Pass a result and a pointer to some arguments via registers - volatile unsigned long long int result; - volatile unsigned long long int args[6] = { @@ -61,5 +61,5 @@ index 12f9e517e..7e5625678 100644 Vdf_ExecutorDataVector::~Vdf_ExecutorDataVector() -- -2.50.1 +2.55.0 diff --git a/0001-Downstream-only-use-the-system-double-conversion-lib.patch b/0001-Downstream-only-use-the-system-double-conversion-lib.patch index 1d2a648..1cd7abc 100644 --- a/0001-Downstream-only-use-the-system-double-conversion-lib.patch +++ b/0001-Downstream-only-use-the-system-double-conversion-lib.patch @@ -1,4 +1,4 @@ -From 23bda0e3337d7a27696a000a47eaf36840650c69 Mon Sep 17 00:00:00 2001 +From 2d851f23e912d8312f2ea6818963150a8c484138 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Wed, 28 Aug 2024 10:42:48 -0400 Subject: [PATCH 1/6] Downstream-only: use the system double-conversion library @@ -8,10 +8,10 @@ Subject: [PATCH 1/6] Downstream-only: use the system double-conversion library 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/pxr/base/tf/CMakeLists.txt b/pxr/base/tf/CMakeLists.txt -index fade8d559..5d9272087 100644 +index 4294f2cb5..b45df65b8 100644 --- a/pxr/base/tf/CMakeLists.txt +++ b/pxr/base/tf/CMakeLists.txt -@@ -110,11 +110,14 @@ function(add_py_dll_link_test) +@@ -105,11 +105,14 @@ function(add_py_dll_link_test) endfunction() @@ -26,7 +26,7 @@ index fade8d559..5d9272087 100644 PUBLIC_CLASSES anyUniquePtr -@@ -278,14 +281,6 @@ pxr_library(tf +@@ -276,14 +279,6 @@ pxr_library(tf CPPFILES initConfig.cpp @@ -42,5 +42,5 @@ index fade8d559..5d9272087 100644 PYMODULE_CPPFILES -- -2.50.1 +2.55.0 diff --git a/0001-Fix-B44-B44A-integer-overflow-use-uint64_t-for-row-o.patch b/0001-Fix-B44-B44A-integer-overflow-use-uint64_t-for-row-o.patch deleted file mode 100644 index 5b50927..0000000 --- a/0001-Fix-B44-B44A-integer-overflow-use-uint64_t-for-row-o.patch +++ /dev/null @@ -1,74 +0,0 @@ -From ae97658675f83466d13149178ccfad95731c3ed2 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Thu, 19 Mar 2026 14:22:40 -0700 -Subject: [PATCH] Fix B44/B44A integer overflow: use uint64_t for row offset - (#2312) - -The B44 and B44A decoder and encoder use channel width (`nx`) and -height (`ny`) in row pointer math. `nx` and `ny` are `int`; the -scratch buffer is correctly sized with `(uint64_t)ny * (uint64_t)nx * -bytes_per_element`, but row bases were computed as: - -``` - row0 = (uint16_t*)scratch; - row0 += y * nx; // int * int -> signed overflow when y*nx > INT_MAX -``` - -For large `nx` (e.g. 268435456), `y*nx` overflows, so `row0`/`row1`/`row2`/`row3` -point before the scratch buffer. - -Fix: compute the row offset in `uint64_t` before pointer arithmetic in both -`uncompress_b44_impl` (decoder) and `compress_b44_impl` (encoder). - -Analysis and solution with the help of Curor / Claude Opus 4.5 - -Signed-off-by: Cary Phillips ---- - .../hio/OpenEXR/OpenEXRCore/internal_b44.c | 23 ++++++++++--------- - 1 file changed, 12 insertions(+), 11 deletions(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_b44.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_b44.c -index 8d0c257e6..93279ff2e 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_b44.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_b44.c -@@ -390,13 +390,13 @@ compress_b44_impl (exr_encode_pipeline_t* encode, int flat_field) - // rightmost column and the bottom row. - // - uint16_t *row0, *row1, *row2, *row3; -+ /* row offset in elements: use uint64_t so y*nx cannot overflow int */ -+ uint64_t row_off = (uint64_t) (y) * (uint64_t) (nx); - -- row0 = (uint16_t*) scratch; -- row0 += y * nx; -- -- row1 = row0 + nx; -- row2 = row1 + nx; -- row3 = row2 + nx; -+ row0 = (uint16_t*) scratch + row_off; -+ row1 = row0 + (uint64_t) nx; -+ row2 = row1 + (uint64_t) nx; -+ row3 = row2 + (uint64_t) nx; - - if (y + 3 >= ny) - { -@@ -512,11 +512,12 @@ uncompress_b44_impl ( - - for (int y = 0; y < ny; y += 4) - { -- row0 = (uint16_t*) scratch; -- row0 += y * nx; -- row1 = row0 + nx; -- row2 = row1 + nx; -- row3 = row2 + nx; -+ /* row offset in elements: use uint64_t so y*nx cannot overflow int */ -+ uint64_t row_off = (uint64_t) (y) * (uint64_t) (nx); -+ row0 = (uint16_t*) scratch + row_off; -+ row1 = row0 + (uint64_t) nx; -+ row2 = row1 + (uint64_t) nx; -+ row3 = row2 + (uint64_t) nx; - for (int x = 0; x < nx; x += 4) - { - if (bIn + 3 > comp_buf_size) return EXR_ERR_OUT_OF_MEMORY; --- -2.53.0 - diff --git a/0001-Replace-PyWeakref_GetObject-with-PyWeakref_GetRef.patch b/0001-Replace-PyWeakref_GetObject-with-PyWeakref_GetRef.patch new file mode 100644 index 0000000..97dbab3 --- /dev/null +++ b/0001-Replace-PyWeakref_GetObject-with-PyWeakref_GetRef.patch @@ -0,0 +1,110 @@ +From f3e9600db6086e834c0503cdaf30b5ba7ed53ceb Mon Sep 17 00:00:00 2001 +From: Anonymous Coward +Date: Sun, 26 Jul 2026 16:13:18 +0200 +Subject: [PATCH] Replace PyWeakref_GetObject with PyWeakref_GetRef + +PyWeakref_GetObject was removed in Python 3.15. Replace all four call +sites with PyWeakref_GetRef, which returns a strong reference instead +of a borrowed one, and adjust reference counting accordingly. + +In Tf_PyIdHandle::Ptr(), return Py_None when the referent is dead to +match the original behaviour (previously returned NULL erroneously). + +In Tf_PyWeakObject::GetObject(), explicitly return a Python None object +on failure, matching the original semantics exactly. + +Fixes: https://github.com/PixarAnimationStudios/OpenUSD/issues/3966 + +Assisted-by: Claude Opus 4.6 +Reviewed-by: OpenUSD Maintainers +--- + pxr/base/tf/pyFunction.h | 13 +++++++++---- + pxr/base/tf/pyIdentity.cpp | 10 +++++++++- + pxr/base/tf/pyWeakObject.cpp | 12 +++++++++--- + 3 files changed, 27 insertions(+), 8 deletions(-) + +diff --git a/pxr/base/tf/pyFunction.h b/pxr/base/tf/pyFunction.h +index 85af943b2..f77b5b71b 100644 +--- a/pxr/base/tf/pyFunction.h ++++ b/pxr/base/tf/pyFunction.h +@@ -49,11 +49,13 @@ struct TfPyFunctionFromPython + using namespace pxr_boost::python; + // Attempt to get the referenced callable object. + TfPyLock lock; +- object callable(handle<>(borrowed(PyWeakref_GetObject(weak.ptr())))); +- if (TfPyIsNone(callable)) { ++ PyObject *rawCallable = NULL; ++ if (PyWeakref_GetRef(weak.ptr(), &rawCallable) <= 0) { + TF_WARN("Tried to call an expired python callback"); + return Ret(); + } ++ // PyWeakref_GetRef returns a strong reference; handle<> steals it. ++ object callable{handle<>(rawCallable)}; + return TfPyCall(callable)(args...); + } + }; +@@ -68,12 +70,15 @@ struct TfPyFunctionFromPython + // Attempt to get the referenced self parameter, then build a new + // instance method and call it. + TfPyLock lock; +- PyObject *self = PyWeakref_GetObject(weakSelf.ptr()); +- if (self == Py_None) { ++ PyObject *self = NULL; ++ if (PyWeakref_GetRef(weakSelf.ptr(), &self) <= 0) { + TF_WARN("Tried to call a method on an expired python instance"); + return Ret(); + } ++ // PyWeakref_GetRef returns a strong reference to self; PyMethod_New ++ // takes its own reference, so release ours afterward. + object method(handle<>(PyMethod_New(func.ptr(), self))); ++ Py_DECREF(self); + return TfPyCall(method)(args...); + } + }; +diff --git a/pxr/base/tf/pyIdentity.cpp b/pxr/base/tf/pyIdentity.cpp +index 5389d8f25..06b7f9b0c 100644 +--- a/pxr/base/tf/pyIdentity.cpp ++++ b/pxr/base/tf/pyIdentity.cpp +@@ -136,7 +136,15 @@ PyObject * + Tf_PyIdHandle::Ptr() const { + if (_weakRef) { + TfPyLock lock; +- return PyWeakref_GetObject(_weakRef); ++ PyObject *obj = NULL; ++ if (PyWeakref_GetRef(_weakRef, &obj) > 0) { ++ // Return a borrowed-style reference: decrement so the caller ++ // does not need to release. Safe because the GIL is held by ++ // all callers. ++ Py_DECREF(obj); ++ return obj; ++ } ++ return Py_None; // dead referent → match original behaviour + } + return 0; + } +diff --git a/pxr/base/tf/pyWeakObject.cpp b/pxr/base/tf/pyWeakObject.cpp +index 8cfddc729..ecdd7f705 100644 +--- a/pxr/base/tf/pyWeakObject.cpp ++++ b/pxr/base/tf/pyWeakObject.cpp +@@ -115,9 +115,15 @@ Tf_PyWeakObject::GetOrCreate(pxr_boost::python::object const &obj) + pxr_boost::python::object + Tf_PyWeakObject::GetObject() const + { +- return pxr_boost::python::object +- (pxr_boost::python::handle<> +- (pxr_boost::python::borrowed(PyWeakref_GetObject(_weakRef.get())))); ++ PyObject *obj = NULL; ++ if (PyWeakref_GetRef(_weakRef.get(), &obj) > 0) { ++ // PyWeakref_GetRef returns a strong reference; handle<> steals it. ++ return pxr_boost::python::object( ++ pxr_boost::python::handle<>(obj)); ++ } ++ // Dead referent: return Py_None explicitly, as the original did. ++ return pxr_boost::python::object( ++ pxr_boost::python::handle<>(pxr_boost::python::borrowed(Py_None))); + } + + void +-- +2.55.0 + diff --git a/0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch b/0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch deleted file mode 100644 index cfd0f51..0000000 --- a/0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch +++ /dev/null @@ -1,686 +0,0 @@ -From 5c609492c6c01bbd5fe57c73cb88d279d9195c29 Mon Sep 17 00:00:00 2001 -From: sunyab -Date: Fri, 26 Sep 2025 13:16:55 -0700 -Subject: [PATCH] sdf: Guard against invalid primChildren in crate files - -A crate file containing a primChildren field on a prim with invalid -entries (e.g. an empty name or name with invalid characters) -could lead to issues when accessing that prim's children later -on. In addition, duplicate entries in the field could cause -unexpected behavior when iterating over those children. - -We now check for these conditions when loading a crate file and -emit a runtime error and fail to load the layer if we encounter -this problem. - -This situation typically does not occur via regular Sdf and -Usd usage, so we only do this verification if -PXR_PREFER_SAFETY_OVER_SPEED is enabled. - -(Internal change: 2380262) -(Internal change: 2380126) ---- - pxr/usd/sdf/CMakeLists.txt | 19 +++ - pxr/usd/sdf/crateData.cpp | 127 +++++++++++++++++- - .../testSdfUsdcInvalidPrimChildren.cpp | 84 ++++++++++++ - .../duplicate_prim_children.usdc | Bin 0 -> 704 bytes - .../root.usdc | Bin 0 -> 38110 bytes - 5 files changed, 227 insertions(+), 3 deletions(-) - create mode 100644 pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp - create mode 100644 pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/duplicate_prim_children.usdc - create mode 100644 pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/root.usdc - -diff --git a/pxr/usd/sdf/CMakeLists.txt b/pxr/usd/sdf/CMakeLists.txt -index 092422acb..38bc4c4d2 100644 ---- a/pxr/usd/sdf/CMakeLists.txt -+++ b/pxr/usd/sdf/CMakeLists.txt -@@ -412,6 +412,16 @@ pxr_build_test(testSdfZipFile_CPP - testenv/testSdfZipFile.cpp - ) - -+pxr_build_test(testSdfUsdcInvalidPrimChildren -+ LIBRARIES -+ ar -+ arch -+ tf -+ sdf -+ CPPFILES -+ testenv/testSdfUsdcInvalidPrimChildren.cpp -+) -+ - pxr_install_test_dir( - SRC testenv/testSdfBatchNamespaceEdit.testenv - DEST testSdfBatchNamespaceEdit/testSdfBatchNamespaceEdit.testenv -@@ -461,6 +471,11 @@ pxr_install_test_dir( - SRC testenv/testSdfUsdzResolver - DEST testSdfUsdzResolver - ) -+ -+pxr_install_test_dir( -+ SRC testenv/testSdfUsdcInvalidPrimChildren.testenv -+ DEST testSdfUsdcInvalidPrimChildren -+) - - pxr_register_test(testSdfAbstractData_Cpp - COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testSdfAbstractData_Cpp" -@@ -704,3 +719,7 @@ pxr_register_test(testSdfVariants - PYTHON - COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testSdfVariants" - ) -+pxr_register_test(testSdfUsdcInvalidPrimChildren -+ COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testSdfUsdcInvalidPrimChildren" -+ EXPECTED_RETURN_CODE 0 -+) -diff --git a/pxr/usd/sdf/crateData.cpp b/pxr/usd/sdf/crateData.cpp -index 8fe924779..820418128 100644 ---- a/pxr/usd/sdf/crateData.cpp -+++ b/pxr/usd/sdf/crateData.cpp -@@ -17,6 +17,7 @@ - #include "pxr/base/tf/stringUtils.h" - #include "pxr/base/tf/typeInfoMap.h" - #include "pxr/base/tf/pxrTslRobinMap/robin_map.h" -+#include "pxr/base/tf/pxrTslRobinMap/robin_set.h" - #include "pxr/base/trace/trace.h" - - #include "pxr/base/work/dispatcher.h" -@@ -29,6 +30,8 @@ - - #include - #include -+#include -+#include - - #include - #include -@@ -717,6 +720,7 @@ public: - - //////////////////////////////////////////////////////////////////////// - private: -+ using TokenSet = pxr_tsl::robin_set; - - bool _PopulateFromCrateFile() { - -@@ -815,10 +819,11 @@ private: - } - - // Create all the specData entries and store pointers to them. -- tbb::parallel_for( -- tbb::blocked_range(0, specs.size()), -+ auto createSpecData = - [this, crateFile, &liveFieldSets, &specs]( -- tbb::blocked_range const &r) { -+ tbb::blocked_range const &r, -+ auto&& validateChildrenFn) { -+ - for (size_t i = r.begin(), - end = r.end(); i != end; ++i) { - -@@ -830,10 +835,59 @@ private: - specData.fields = - liveFieldSets.find(spec.fieldSetIndex)->second; - -+ std::forward -+ (validateChildrenFn)(spec, specData); -+ } -+ }; -+ -+#ifndef PXR_PREFER_SAFETY_OVER_SPEED -+ tbb::parallel_for( -+ tbb::blocked_range(0, specs.size()), -+ [&createSpecData](tbb::blocked_range const& r) { -+ createSpecData(r, [](auto&&...) {}); -+ }); -+#else -+ // In safety-over-speed mode we perform additional validation -+ // on specs in worker threads. We need to collect runtime errors -+ // emitted in those threads and transport them back to the -+ // original thread. -+ tbb::concurrent_vector errorTransports; -+ -+ tbb::parallel_for( -+ tbb::blocked_range(0, specs.size()), -+ [this, &createSpecData, &errorTransports]( -+ tbb::blocked_range const& r) { -+ -+ // Reuse a TokenSet for duplicate checking in -+ // _ValidateSpecChildren to avoid allocating memory -+ // repeatedly. -+ TokenSet dupeTokenSet; -+ TfErrorMark m; -+ -+ createSpecData( -+ r, -+ [this, &dupeTokenSet](auto&&... args) { -+ _ValidateSpecChildren( -+ std::forward(args)..., -+ &dupeTokenSet); -+ }); -+ -+ if (!m.IsClean()) { -+ TfErrorTransport transport = m.Transport(); -+ errorTransports.grow_by(1)->swap(transport); - } - }, - tbb::static_partitioner()); - -+ for (TfErrorTransport& transport : errorTransports) { -+ transport.Post(); -+ } -+ -+ if (!m.IsClean()) { -+ return false; -+ } -+#endif -+ - _lastSet = _data.end(); - - return true; -@@ -851,6 +905,73 @@ private: - return ret; - } - -+ inline bool _HasValidChildren(const SdfPath &path, -+ const VtValue &val, -+ TokenSet* dupeTokenSet) const { -+ if (!val.IsHolding()) { -+ return false; -+ } -+ -+ enum class ErrorType { Invalid, Duplicate }; -+ ErrorType errorType; -+ dupeTokenSet->clear(); -+ -+ const TfTokenVector& children = val.UncheckedGet(); -+ auto invalidChild = std::find_if(children.begin(), children.end(), -+ [&](const TfToken& childName) { -+ // Check that the child has a valid identifier and that the -+ // child path exists in the data. -+ if (!SdfPath::IsValidIdentifier(childName) || -+ _data.find(path.AppendChild(childName)) == _data.end()) { -+ errorType = ErrorType::Invalid; -+ return true; -+ } -+ -+ // Check that the child does not duplicate another child. -+ if (!dupeTokenSet->insert(childName).second) { -+ errorType = ErrorType::Duplicate; -+ return true; -+ } -+ -+ return false; -+ }); -+ if (ARCH_UNLIKELY(invalidChild != children.end())) { -+ TF_RUNTIME_ERROR( -+ "%s child identifier '%s' found on parent '%s'", -+ (errorType == ErrorType::Duplicate ? -+ "Duplicate" : "Invalid"), -+ invalidChild->GetText(), path.GetAsString().c_str()); -+ return false; -+ } -+ -+ return true; -+ } -+ -+ inline bool _ValidateSpecChildren(const CrateFile::Spec& spec, -+ const _SpecData &specData, -+ TokenSet* dupeTokenSet) const { -+ if (specData.specType == SdfSpecTypePrim) { -+ // Check for invalid children in primChildren field -+ _FieldValuePairVector const &fields = specData.fields.Get(); -+ auto field = std::find_if(fields.begin(), fields.end(), -+ [](_FieldValuePair const &fieldValue) { -+ return fieldValue.first == SdfChildrenKeys->PrimChildren; -+ }); -+ if (field != fields.end()) { -+ SdfPath const &path = _crateFile->GetPath(spec.pathIndex); -+ VtValue const &value = field->second; -+ if (!_HasValidChildren(path, value, dupeTokenSet)) { -+ TF_RUNTIME_ERROR( -+ "Invalid children found in primChildren field for path " -+ "'%s'", path.GetAsString().c_str()); -+ return false; -+ } -+ } -+ } -+ -+ return true; -+ } -+ - inline std::vector const & - _ListTimeSamplesForPath(const SdfPath &path) const { - TF_DESCRIBE_SCOPE(GetAssetPath().c_str()); -diff --git a/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp -new file mode 100644 -index 000000000..49258b657 ---- /dev/null -+++ b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp -@@ -0,0 +1,84 @@ -+// -+// Copyright 2025 Pixar -+// -+// Licensed under the terms set forth in the LICENSE.txt file available at -+// https://openusd.org/license. -+// -+ -+#include "pxr/pxr.h" -+ -+#include "pxr/base/tf/error.h" -+#include "pxr/base/tf/errorMark.h" -+#include "pxr/base/tf/diagnosticLite.h" -+#include "pxr/usd/sdf/childrenView.h" -+#include "pxr/usd/sdf/layer.h" -+#include "pxr/usd/sdf/primSpec.h" -+ -+#include -+#include -+ -+PXR_NAMESPACE_USING_DIRECTIVE -+ -+static void -+TestInvalidPrimChildren() -+{ -+ // This test relies on verification checks that are only enabled when -+ // PXR_PREFER_SAFETY_OVER_SPEED is enabled. -+#ifdef PXR_PREFER_SAFETY_OVER_SPEED -+ // open the layer and check for invalid child prim names and specs -+ TfErrorMark m; -+ -+ auto layer = SdfLayer::FindOrOpen("root.usdc"); -+ TF_AXIOM(!layer); -+ -+ TF_AXIOM(!m.IsClean()); -+ TF_AXIOM(std::any_of(m.begin(), m.end(), -+ [](const TfError& e) { -+ return TfStringEndsWith(e.GetCommentary(), -+ "Invalid child identifier '' found " -+ "on parent '/_materials'"); -+ })); -+ TF_AXIOM(std::any_of(m.begin(), m.end(), -+ [](const TfError& e) { -+ return TfStringEndsWith(e.GetCommentary(), -+ "Invalid children found in primChildren field " -+ "for path '/_materials'"); -+ })); -+#endif -+} -+ -+static void -+TestDuplicatePrimChildren() -+{ -+ // This test relies on verification checks that are only enabled when -+ // PXR_PREFER_SAFETY_OVER_SPEED is enabled. -+#ifdef PXR_PREFER_SAFETY_OVER_SPEED -+ // open the layer and check for invalid child prim names and specs -+ TfErrorMark m; -+ -+ auto layer = SdfLayer::FindOrOpen("duplicate_prim_children.usdc"); -+ TF_AXIOM(!layer); -+ -+ TF_AXIOM(!m.IsClean()); -+ TF_AXIOM(std::any_of(m.begin(), m.end(), -+ [](const TfError& e) { -+ return TfStringEndsWith(e.GetCommentary(), -+ "Duplicate child identifier 'Child1' found " -+ "on parent '/Root'"); -+ })); -+ TF_AXIOM(std::any_of(m.begin(), m.end(), -+ [](const TfError& e) { -+ return TfStringEndsWith(e.GetCommentary(), -+ "Invalid children found in primChildren field " -+ "for path '/Root'"); -+ })); -+#endif -+} -+ -+int main(int argc, char** argv) -+{ -+ TestInvalidPrimChildren(); -+ TestDuplicatePrimChildren(); -+ -+ return 0; -+} -diff --git a/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/duplicate_prim_children.usdc b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/duplicate_prim_children.usdc -new file mode 100644 -index 0000000000000000000000000000000000000000..b6710e961deb11804a49dbaf2fd2ceb31d261d65 -GIT binary patch -literal 704 -zcmbu7&rZTX5XQf4sV$-j!K(+Z97z0gG*L-eg+OXUYvNH1O(X%@)SBRpgAc$1_y8Wg -z`Zhj-9!yNcVismBoSn-zncwWUJJY&Xo$94mw_#xsUt+2M4Ytt$=wy}yU;x+v*0`#x -zSmi2b4--IvdfKE7QhZoP)e6uF!vs;>AKJJ5K`#zQ$fLAxqI6*5ediF}B#9BlVHCtk -zKe$6LyuTR)NFJiV=?(*S`+LhKS0?JkQirz7mGT$@dlfvIuu;L2g-L$F3a3j2iro9A -z5?_kBmg+ybnVMV$D^G=~nzbgNr|TtGXrEi#bP6wOlhT-DrloAbS0YjtBHI+EYWKnb -zMCPfSjGQ_D=HvcFOFAB306bHAP3rlbrgNS(SoBfocfnaxw(A*2k@zv4UvlYli$lCj -X+^zWyW-3O+Tf{wA+N=DP_zCe}Iz2v9 - -literal 0 -HcmV?d00001 - -diff --git a/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/root.usdc b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/root.usdc -new file mode 100644 -index 0000000000000000000000000000000000000000..651668dd7b6012b65e8fde4bfb4a973a697ceb58 -GIT binary patch -literal 38110 -zcmeHw33yY*+W&8o^z=Y_4yQd73Q`CK6_BN+VN=_*1r$)AK+BF0pg<7{Hbo%@ySVST -zpoj~IsDKMqP|+4aRK$H((5kqjVl0YEQgY`1yh$cGRJeMt_q)&k`<^?`)8_ZiyUhO1 -zoH?0E;l#1MipLEZ3>o3j=GMsP-wiXP1`>g==@tN504qbOX>GKo0WyFciR90L}(548U*zBLJKO;9LMB0gM7L8bBd{F#yH_7zdyTKrw*v044yK2w)O` -z$pEGRmIsE&xyt -zzyqKHICBYr3jthYlBc>7^2-2t0bC5g2VgmXO8`_x^F^TwKsA6G0G9%|48Y|8t^jZ) -zfU5vp4d5C8*8;c>!1Vxb0B|FK6##Ama5I2g08sZ_3E(yWw*y!O;0^$*0o)1TE&z7} -zxCg)*a6X*__X1c4;64EB0o)JZ0RRsI*Z^Q7fK31%0`M?^M*utuU^9SP0FME99KaR; -zTLC-);7I^a0oVrMX#mdvr~^Lz~m4GCPykTIe3A|xe829SYVpG1SSV7 -zFgaX-$*~Gdj#glDwgQtA7MPr}z%;Q4OcR{IG@%Jhlb^se!3j(gpujXS3QUutz%)4u -zOp~U-G_eXy6Pv&^*$PY(t-v%H3rrKOz%*eCOcT4nG?@!b6THAF$c$l{=tVqDsshu( -zKww%R2uzCxfob9qm=+JOzxG-Vu!p*^nBPnx4@epeTu1D@WBK7YT8TvYRVMzq1;Cm4 -zz>0ieYyq%4jN|&3n)p{7hfn&XL+PK0Pxb{rl2+V4rAcu+^AJvpZ0$7V?~*9LDnHI& -zVbT};876*}i7)bRwm-wfr#zeU*S!4Z{E7ORk#C`eK{!yIiXiIOT>nC!@;5nJSLXZ) -zK9x`K&E*sAL-i->+RU%d2Rao1d-5ZHi^4cwzYjKj^0wMB<3w -zF^bLU6Q9zj{_~IcLO&uKPhaR0U!-NWZw|4#HuVoGH`zQ<{wYty&pSc>?>3chQxtD7 -z<&XHnKJf`3kG~-w|4^UO7ipRGFE@=J!XM;QUgPyMD#|DQf5fNqlWcSSPYM8E{_O=< -z<^!J<0N;eMu)ntH99s67LUaE?c^3L>{-BR=+_TZ~O=%HcYsx?AMB)(Uf76VgIGF55 -z+K<|o@U}c!KSx3f6W=}j_qHOJ}3Bp?0*Q?pYT7#Cv0v%G3Ka$ -zA8&j{`gf%N5N@8nxqS#Xw=dd^>>n?Ep-=U9JihQR$lF>=<1gZC#Q2Jj$rJHuObh=a -ze2sbhi!o366S8K$@VUen{>99{y8u#tpW?*)-61-coApH;=@V{lU&Il=>v8xLC-QeZ -zzB&Iw)||fJ)BJxteRKb%`i=P7c>fXeJLQjXxc{z+^TqtWEkDlRW6~FV>c2wYJboQ{ -z@%~4+`S=ig(q9qfA5Wjs7yNkoYnxu(9JfF8w21vUzxEEnr+HkYALmB`<%!DwXZDFt -zW67*f{a5&(h%ctOFkXM={&T$kMSVIlryhTN(fmR_m-2VK`Gfqc;2+Qbngi*F=il%n -zC(KMF2!%Ww8335L}Owm52m -zm0OP367ZAU@=#NYP(W4>C;g%r++x@aYcRpz`kVF#Q-5nxze$#@M~$PB4MA&&!(y@h -zlmf&0ZTrxH4o7WYC8mUaM5tXTF=#Vv2ikp`X8F49cPD+_?r36@4Hj-`;s*jpdNn5h -z)}m4S-TrG!3+D%U+wW8P4{f+5WaEa#I1)@qJYxS5>fDC3#_k=o9Ht5OVY>^y!mm(HUs} -zBODrKN`|Et7bn25!mtJ{mZOOQTj)e7kT?ZV0-{BYQ7R&Z=G|?`nBoM4xHV)8CI)Ry -z7TT4fK)Yh$@VkXf<+m;#lUiI{TwIi&Iz*xk-jMAmxXogKTM}?6#6sRgF?nKo{jUnVkLyg7%k^kOeY(A&KjL9h5?#9A{!FZ*H~dgB)(=(S&rpm%>Uf?fc|2zm<`Bj{CNjG*^{ -zF@jzS#t3>d7$fNQV2q%5gfW6%6vha8TNoqgm0^sa_l7ZoULHn+Snr9zc_qCy3x^Y7 -zpeiQwckqeqo8$kE{r~EU@Za`|gnv&x{I_3;@Zb9UPxmXcZ#)tH-`GD-R2FmmUn!Sa -z{zUk%*!kZmbE5M8v+@5M%l_Xyi|~KLCyO10|FnPoEB)xNjHf@dW8O3Tca%}=G5$Mj -zMUDJv8UCBr|BbO`Zbz}nY>xXM#PrqPX!yTZmyz(FDVOjkKim4z*M#ZQ^>^@b?Cmhw -z`=_z62ULag7p#s)Sl6HrMmx@@p0@?KN0r+X)Nr; -z!{4jFcso$|d$#^vc_KT_^7U`&bAPr*h=hNfmicYRf3m)gZTG+5PQu<_SzG-T8Da0Q -z)Zt%|5$#WDFYdpdUWl9!i*~)Y>DAsR!hfXpa>&{$(5wybnb^<~sQ+p;!iM`EQb^^uA78*Q~Y=?%+WHTO-Zzvu#M?)Zk~ -zuGWqT_0ODd&E4_oa@Uk?o$H@oXw7ZiveI?!ij4YRZEABGc2v4vPwG-HUzM3Nb$g}j -z+MG%CtR^$(sl-ax6I&T}#oW -zzTuM0oE=9iT~&Eq>R*`m&6d-Hm9D%CCeceR%-mk->f3)(ecIB@oQc~jU3q;b)la!1 -zGv~7%m9EQ-jQZ`DX6EcXTIm|qx=TG82MxG#|8m#HejnC_7Fu&Z{dBqOw^uvYzg=q0 -zonGK`{rHfh{)bMzb4v?+uA47))E9T^o!fPY&-HTu59$UvdgpG~zufik?hor6^R2l@ -z?UkeYfj#j#s -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 -zUg?6_*HBHn#-h7SAgw -zFL~MaLfPUa6`s?}-Lp%VcvRe4T2@g~<|(aMmW;xZrHdDNu7R}=ie@cZu&6v8C9_NC -z%vs{;0JLZQmMn00LLMJ2RQ-YR7F#{wx200~k -z9@t-kB?-xcl8`)50_%^I0V!Z-hCeJxV3UzNa1@dUWFmP$0g?w0o`K{69g#fn8YB;p -zklc3^lKW;Nxo_9#C(#8+>DvQr0aCIu!Gok>3?!`gtQg7pO(4psm*66`#% -zUP#XB4mJYGS$&X_H5Dua$yo!CoHY>1S;LT=nK(aFl$=R7m$?gc&1IgL_ -zk(^zCJlAYy9ab|*zLUMlzDgAnY6(QMKfD~r|6*ak^gyjBbBDvov -zB=@@vDg9DlDF_SoI}^$MyCS83N`xd6lt_Q1^e=)X4VM03mtk=K0T_8o%UUchFS)R^ -zg}zRi+0c$4Mw@_eBaM>)Rf9mdu=8dSR)jbWzzPur^kf -zWY0K#=0!Mc$LvK*W-cfhS30|7HcFOOl$2Fq&VohmioVsh{g}CE(E?oPE-!V@EM4%R -zl{s*8_LONTEvuL^tq-=KV$t~}WhnN{E_5+#CS%*JUuMrig}Z!iNkyT%VxDIW9NBYn -zu+}}RWW2k4S!vna(HL7&zIf4sckBhT7L}DfX0!AIOJU4OKTYJGG7U@0N`JOxE-opT -zY}FN|7nY!GQQ246UtYS@IXjZzlxeX$5NQT<(*=joUrP!H`b85IGib~X)q>m=t1YQC -z`RY|^$XmO%rKX{k1xTG&gjN|y=+uoa=(FHwHV>$(u~;mYS&Uh%0h<+#wxe|asLgj} -zz;-2;@vC7h<1NtAhMQU}=2s%=u(F^7YHz{eWt{j|Vw89&zbW#K%ocfI$ZDCFAS273 -zH&I4bcO=Tt?G9x3$XlSnae%czc6S_+q4jQsLfG?cmT*ir8QRiT7z}%!Q-eNHhW=R^ -z91Yem_kaxTiwO6y28U)#MrL<>n}~ea^EznAa-h3RhKptBZW;PQ8Tv9A`sFh8n`G#B -z%g{H<(4UZ@KPN+fU536-hW@n-{g4bjBqO;+cb459sWSA=GW1?D^g%N8p)&L_GW2OO -z^imo65*d264E=f;`W-U#`(@~l$RWkGqGW0z%^aC=w$Sw2eI^z@b -z?SH~g`V+qLCw%o!_^tkgul)%>`A_&Mf5O-Qgx~rPeC^1o;r7{}p|5rAD>AxNeJ>*= -zC?j)iYHD|6TdSy3mdHq1CL?3*Dj6A7J7r|8eXUI$QbnDQM##M~QufK{yVlyS8&b}Y(Pix{8Tv~y^xtG;bZp-Z`Un|%jf|8>WjNLb -zI>Az#xWWarW%hTi;a^9v>*9?|1n107c -z4$rb5%tLktzLcRiMuxMa7~AIZ?am7yP&k-<8wg09NYPm-Zix1~{BAVVK5L!TNg`h_y|OJ(RQqAq8X4E-q? -z`U}w!{HYB62O0Vi85s%bYoVve&^yV{dq%y@Su*r-GV~cyALf;zUnxVsHR=)`m7&)~ -z#|U|vFJ$OHMd~M`MaQ+!+sM$n$j~#R-he84f((5&`4}1cB{KADW$3G-uIq6b`VJZT -zYf*>zjST%485!ub3Oc!$_A>NSW$4bR(;6j*8$Uc^$rskh&~KEX-z7sc=7xJ$twuwe -zYj6zf(Ed>MIt)1dE_k+C>i -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 -z2|TKzrcH2^cabS~*n)bmFl6!n$ -zql%i7g2N^Egun(BH64P(B=^L?gDPs$gJ(k=#=Q_o=Aq92_jUrv=ujsL2QxNbd6j_o}Gr63my}(*tW&)N~EzN$weeH7aUO -z4!R__J8+MRnp1+gl6z+0ZWT4B26H6$tiW9=YPto_l-#oecdDrA9y~*GmjqU;sOb?r -zU2@L}+@Yf8wBR7gJvXpQMNQA(K*>EXaJ!0{Ucmv9yEJf{ikjZR{*rrsV5N$hKEZyH -z`~1MIDrz!=PRYF>aEpqXtYEg}UKqGpMNQveU&&n-xJgA#b}&nFFAA(sQR56|O76vh -z8&%Zw3-*!R7X)rlQPV%zTXL5Nu2)erAlOTCdji*~s2LdSDY+{G*Q%%)6g*9GF9}?u -zqUQ8q56OLD;A#~$X9T-T?u!Cfsi-+K*iCXT4P2?BCMS5R?pZw0?QRtpB+q>+?NJ?3aW<%J4o)!0v9W&9v(bN -za$g?sDySY2Y%jU52rN@jeNM2QjEAH)nkIX7YAEO?wbN-3aZBkRmpvGV4;HQ2|-12-x64$pn763NpjyBIA1~a -zq@Z1LuMEsrP(3-=QgYuGC{<8BCD=l8-yWE!pn7UhmfWiXa}`ui3nohLI|6eQRG$}= -zB=_n-iGu3s!34>DXJEF1>KQ?s&K6&8dXqMcPHta(&DfQjiY(ap*)=J}-A5GN-)+pwbwi33_zzib8d7{#N^!g4 -zMI~Lwth{$f@f95z6v*vyxI-%IHJjg!DLlcjg^ULp@J#3~O&b!!bJDh8n+YaZQti%rI -zS~kND=Y4FN9nNdn5<8sh*;G56cd)s3I9Ibdb~x{6Q|xfAW9Ql7yq8V4!?}r#x5K%S -zO|ZlH5G%IB`7kT8!+9O6u*3Nn8*PX4aW={hXDutV!?}fxw8OcXjj_YIflai-xs{!3 -zhw~{m+z#h9Hp~v^BW#=<&TH6(b~qnpW9@K0$R^q0e43qYhx17`!Vc#X>>N9s&$0qL -zoZH!8JDfXMz8%hbHpC8R9UE$g^Lpm7!?~EPu)}!~yV?%tB6gD<&SmUMJDe5lIy;;f -zup8}gE@9W&;k=MtV~5kjuD8RvklkX3^9ELKhqH{`Y=^U)-C&1v0lU=>=Tdf+9nMmA -zyB*G%>>fLu^VljooO9S}JDlgUm3BDiv)k-&u3(GpaL#6T+2Jf1J!} -zaL#3S*zt>$!rXi#e5JzEj?LqD;A<70wroDX9p9?(v|;D-+i*aICzUPW -zEAgEQPiwZ2--_>5cyw0AZ@~{LJSl7uzZnNrc#_#-eiMFF;nCOydz -z;Tg;N@OSXA3QsN@%%8b=JR^jQ-&f!mDj|z{IjpSSLiVDvF -zHiAEemsEJN*(kmRud472WW)J3>{j79gPq0e@Vp977j_=M4`7?Myg=Y{O#-GNEDm(?u#do1zg(sio@#nBz -zg=a9!<Sm2Y*FDko1M;I!c!_dc`Tpr#Iq_q=dynMH9W4uGn)0~Z(_3wPa(_VZ{blDo}uha -z{vw`M;mKgr`8qVH@SMfY;JdL+g~!DT_zvt);Tgj+`P+Czg=ZAY=5L@@g=Zvl^4Ia0 -z3eR|U8vg(rRCtP6PyRkOs_;x;J@|)sP=%+6_2TbglM2r`)|fk7*r&oH -zG1?Y9qQaxF3VuBfsqiE)AHN&{6`oeCoZpC_RCrpli}*D-tiqGXy!=Z1uEJwy7xHWI -ziwaK?Tf(oy&ni4E*iwEqepTVIvP<}-Xj0)hg-ziPV6O^~jVQN=ipno6F8nMZK-Qi8d!d|!ogrMdobkxuq~D~969LkWIfTGqY90LWsO_j!ze&x(i60oMp(kgU>Goxh!__LLa -zab~poB>{X_VHk_2#FL}Okw@R|w9(gp`00J}iWyGol(3x5aargmTGtm^xs_Ymh_Bf$ -zBCVoghVGpO-)5YQ7TYaNI#mH -z&^nKy2zf=tsq}N07HCBYVIzGCSt`QcRLV<8q;Dy;+JJ=2)Z)~WpbbqxLLxHnFS<#E -zVnL@nx-ltza!*(+KqER1X+)MO+Tw>MKQR5?*>{!RUUswR`lVMb -zzqAIIgulgf9V+-uSj2C`e10cN_*%^1_hSm*gzL<_M?%;4jAd| -zOCy7QYMjdU89mv1MizV1=+9m;&R{PZd2FXKl+_s{*ptR+_Lxz`9yTVi2aWUCI%5{Q -z+nC2z84KAhMmf8|xQJbC_}FDeHLEnPU|!=|w!~P$78@(s`NnEC$5_MM#(Fl@*vKXr -zkFv4G7BWNmdQ#UE;QxP|p_DCzgqN;EoxEq+h3TKy^h)F09goMio?^JiTfPTkkT -z`fjH6_5NQ-UktKZtu|{Yp!}j)t%qA>Q_~HbVYAt6N0KBQdcbCDY;CjIUUTm6YTMiM -z$euLq;K3pFc{_V{u-R-64|KejdH87SwP$vFZ+~H}me%vV_j>Mi4BVg{?0ICrqoM1W -zwzacus}>xUm-6diyK3sT_ilyNVk9)lN9@0 -z>+^QsH~PIgaL*Yp=I+YhF{J+Nr$;3;0i#Wq(J%m@$kH3Mw{B88%@1bXs -z^$Un0G=^$@;8TYeC&`Aixj>PwlUN1DRaOhw&|E3!w{L7>M@c#iB -C@)ZIA - -literal 0 -HcmV?d00001 - --- -2.52.0 - diff --git a/0002-Downstream-only-use-the-system-lz4-library.patch b/0002-Downstream-only-use-the-system-lz4-library.patch index c72d25a..6659b01 100644 --- a/0002-Downstream-only-use-the-system-lz4-library.patch +++ b/0002-Downstream-only-use-the-system-lz4-library.patch @@ -1,4 +1,4 @@ -From 3492a9fb0fccfe52ed5258e943381d48d28be3e5 Mon Sep 17 00:00:00 2001 +From 9fd6089b3e95bb882199ee359fbba83f7c4bb410 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Thu, 29 Aug 2024 13:30:18 -0400 Subject: [PATCH 2/6] Downstream-only: use the system lz4 library @@ -8,10 +8,10 @@ Subject: [PATCH 2/6] Downstream-only: use the system lz4 library 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pxr/base/tf/CMakeLists.txt b/pxr/base/tf/CMakeLists.txt -index 5d9272087..c4130882c 100644 +index b45df65b8..5e6de96da 100644 --- a/pxr/base/tf/CMakeLists.txt +++ b/pxr/base/tf/CMakeLists.txt -@@ -111,6 +111,8 @@ function(add_py_dll_link_test) +@@ -106,6 +106,8 @@ function(add_py_dll_link_test) endfunction() find_library(double-conversion_LIBRARY NAMES double-conversion REQUIRED) @@ -20,7 +20,7 @@ index 5d9272087..c4130882c 100644 pxr_library(tf LIBRARIES -@@ -118,6 +120,10 @@ pxr_library(tf +@@ -113,6 +115,10 @@ pxr_library(tf ${WINLIBS} TBB::tbb ${double-conversion_LIBRARY} @@ -31,7 +31,7 @@ index 5d9272087..c4130882c 100644 PUBLIC_CLASSES anyUniquePtr -@@ -281,7 +287,6 @@ pxr_library(tf +@@ -279,7 +285,6 @@ pxr_library(tf CPPFILES initConfig.cpp @@ -40,5 +40,5 @@ index 5d9272087..c4130882c 100644 PYMODULE_CPPFILES module.cpp -- -2.50.1 +2.55.0 diff --git a/0003-Downstream-only-use-the-system-pugixml-library.patch b/0003-Downstream-only-use-the-system-pugixml-library.patch index 2bab595..e7ad209 100644 --- a/0003-Downstream-only-use-the-system-pugixml-library.patch +++ b/0003-Downstream-only-use-the-system-pugixml-library.patch @@ -1,16 +1,16 @@ -From 98f62852495fb2c86047eff532a3af2a5b88792b Mon Sep 17 00:00:00 2001 +From 73637a9bf67b3f7afe5070e5d56b07524e14a073 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Fri, 30 Aug 2024 09:32:08 -0400 Subject: [PATCH 3/6] Downstream-only: use the system pugixml library --- - .../renderman-26/plugin/rmanArgsParser/CMakeLists.txt | 6 +++--- + third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -diff --git a/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt b/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt +diff --git a/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt b/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt index 244f27aa8..1e00413c4 100644 ---- a/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt -+++ b/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt +--- a/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt ++++ b/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt @@ -1,6 +1,8 @@ set(PXR_PREFIX "") set(PXR_PACKAGE rmanArgsParser) @@ -35,5 +35,5 @@ index 244f27aa8..1e00413c4 100644 PRIVATE_HEADERS api.h -- -2.50.1 +2.55.0 diff --git a/0004-Downstream-only-use-the-system-rapidjson-library.patch b/0004-Downstream-only-use-the-system-rapidjson-library.patch index 8d1c7e6..8d9f9cd 100644 --- a/0004-Downstream-only-use-the-system-rapidjson-library.patch +++ b/0004-Downstream-only-use-the-system-rapidjson-library.patch @@ -1,22 +1,23 @@ -From aa1063129297e469ddd709c7ee4d0406f9bae08f Mon Sep 17 00:00:00 2001 +From f331a476a66e41e93d83b7a2e438d3ee7f12ea32 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sat, 31 Aug 2024 11:08:18 -0400 Subject: [PATCH 4/6] Downstream-only: use the system rapidjson library --- - pxr/base/js/CMakeLists.txt | 37 ------------------------------------- - 1 file changed, 37 deletions(-) + pxr/base/js/CMakeLists.txt | 40 -------------------------------------- + 1 file changed, 40 deletions(-) diff --git a/pxr/base/js/CMakeLists.txt b/pxr/base/js/CMakeLists.txt -index d59dc1f6d..086d1bc48 100644 +index 8cbda8c52..ec8f3c249 100644 --- a/pxr/base/js/CMakeLists.txt +++ b/pxr/base/js/CMakeLists.txt -@@ -15,43 +15,6 @@ pxr_library(js +@@ -15,46 +15,6 @@ pxr_library(js converter.h types.h - PRIVATE_HEADERS - rapidjson/allocators.h +- rapidjson/cursorstreamwrapper.h - rapidjson/document.h - rapidjson/encodedstream.h - rapidjson/encodings.h @@ -26,6 +27,7 @@ index d59dc1f6d..086d1bc48 100644 - rapidjson/filewritestream.h - rapidjson/fwd.h - rapidjson/internal/biginteger.h +- rapidjson/internal/clzll.h - rapidjson/internal/diyfp.h - rapidjson/internal/dtoa.h - rapidjson/internal/ieee754.h @@ -50,11 +52,12 @@ index d59dc1f6d..086d1bc48 100644 - rapidjson/schema.h - rapidjson/stream.h - rapidjson/stringbuffer.h +- rapidjson/uri.h - rapidjson/writer.h - DOXYGEN_FILES overview.dox ) -- -2.50.1 +2.55.0 diff --git a/0005-Downstream-only-use-the-system-libdeflate.patch b/0005-Downstream-only-use-the-system-libdeflate.patch index e76eeb6..b8ce47f 100644 --- a/0005-Downstream-only-use-the-system-libdeflate.patch +++ b/0005-Downstream-only-use-the-system-libdeflate.patch @@ -1,16 +1,16 @@ -From 4b1c527468f9c43e04a1ff773cec6a9f9ca0b5ae Mon Sep 17 00:00:00 2001 +From a537b44edabe942380d2e87ea7069bdf32b93dbc Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sun, 1 Sep 2024 21:30:11 -0400 Subject: [PATCH 5/6] Downstream-only: use the system libdeflate --- - pxr/imaging/hio/CMakeLists.txt | 7 +++++++ - pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c | 3 +-- - pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h | 12 ------------ + pxr/imaging/hio/CMakeLists.txt | 7 +++++++ + .../hioOpenEXR/OpenEXR/OpenEXRCore/compression.c | 3 +-- + .../plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h | 12 ------------ 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/pxr/imaging/hio/CMakeLists.txt b/pxr/imaging/hio/CMakeLists.txt -index 75e1e6298..09264c600 100644 +index e61fc7c54..7cfbe9d70 100644 --- a/pxr/imaging/hio/CMakeLists.txt +++ b/pxr/imaging/hio/CMakeLists.txt @@ -1,6 +1,9 @@ @@ -34,10 +34,10 @@ index 75e1e6298..09264c600 100644 PUBLIC_CLASSES fieldTextureData -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c +diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c index a672e833b..1d2eaea56 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c +--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c ++++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c @@ -8,8 +8,7 @@ #include "internal_memory.h" #include "internal_structs.h" @@ -48,10 +48,10 @@ index a672e833b..1d2eaea56 100644 #if ( \ LIBDEFLATE_VERSION_MAJOR > 1 || \ -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h b/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h +diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h index 7481a346e..71bdde9cc 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h +--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h ++++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h @@ -8,18 +8,6 @@ #include "OpenEXRCore/openexr_config.h" @@ -72,5 +72,5 @@ index 7481a346e..71bdde9cc 100644 #include "OpenEXRCore/attributes.c" -- -2.50.1 +2.55.0 diff --git a/0006-Downstream-only-use-the-system-libavif.patch b/0006-Downstream-only-use-the-system-libavif.patch index fe06223..9ab912a 100644 --- a/0006-Downstream-only-use-the-system-libavif.patch +++ b/0006-Downstream-only-use-the-system-libavif.patch @@ -1,4 +1,4 @@ -From 8ebd20bf9e0e945457215dba1d56a25408f860a6 Mon Sep 17 00:00:00 2001 +From f2a3615238a691e11a4029c33498e7f21a34fff9 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Wed, 4 Sep 2024 11:09:47 -0400 Subject: [PATCH 6/6] Downstream-only: use the system libavif @@ -9,7 +9,7 @@ Subject: [PATCH 6/6] Downstream-only: use the system libavif 2 files changed, 7 insertions(+), 189 deletions(-) diff --git a/pxr/imaging/plugin/hioAvif/AVIFImage.cpp b/pxr/imaging/plugin/hioAvif/AVIFImage.cpp -index 81549fb54..d2dfb1bcd 100644 +index b56369ee5..c6fcb4a6c 100644 --- a/pxr/imaging/plugin/hioAvif/AVIFImage.cpp +++ b/pxr/imaging/plugin/hioAvif/AVIFImage.cpp @@ -30,7 +30,7 @@ ARCH_PRAGMA_UNUSED_FUNCTION @@ -19,10 +19,10 @@ index 81549fb54..d2dfb1bcd 100644 -#include "pxr/imaging/plugin/hioAvif/AVIF/src/avif/avif.h" +#include - #if defined(PXR_STATIC) - # define HIOAVIF_API + PXR_NAMESPACE_OPEN_SCOPE + diff --git a/pxr/imaging/plugin/hioAvif/CMakeLists.txt b/pxr/imaging/plugin/hioAvif/CMakeLists.txt -index f4eaeea15..7f1680eaf 100644 +index 1ac2683f6..7d583c137 100644 --- a/pxr/imaging/plugin/hioAvif/CMakeLists.txt +++ b/pxr/imaging/plugin/hioAvif/CMakeLists.txt @@ -1,6 +1,9 @@ @@ -237,5 +237,5 @@ index f4eaeea15..7f1680eaf 100644 RESOURCE_FILES -- -2.50.1 +2.55.0 diff --git a/2313.patch b/2313.patch deleted file mode 100644 index 74383c0..0000000 --- a/2313.patch +++ /dev/null @@ -1,510 +0,0 @@ -From 97de29467ef3ee2e9f9952b7158f9cbad51dac2a Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Thu, 23 Feb 2023 14:17:02 -0700 -Subject: [PATCH 1/7] build_usd.py: wrap the TBB_ROOT parameter value in double - quotes when building Embree - -This ensures that slash characters are properly escaped on Windows. ---- - build_scripts/build_usd.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/build_scripts/build_usd.py b/build_scripts/build_usd.py -index 40f6c3296c..ec1a268d78 100644 ---- a/build_scripts/build_usd.py -+++ b/build_scripts/build_usd.py -@@ -1587,7 +1587,7 @@ def InstallMaterialX(context, force, buildArgs): - def InstallEmbree(context, force, buildArgs): - with CurrentWorkingDirectory(DownloadURL(EMBREE_URL, context, force)): - extraArgs = [ -- '-DTBB_ROOT={instDir}'.format(instDir=context.instDir), -+ '-DTBB_ROOT="{instDir}"'.format(instDir=context.instDir), - '-DEMBREE_TUTORIALS=OFF', - '-DEMBREE_ISPC_SUPPORT=OFF' - ] - -From 2679ca564baca476ff7beee448b6d6a85b91a339 Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Thu, 23 Feb 2023 12:20:39 -0700 -Subject: [PATCH 2/7] FindEmbree.cmake: add support for finding Embree versions - 3 or 4 - ---- - cmake/modules/FindEmbree.cmake | 41 +++++++++++++++++++++------------- - 1 file changed, 26 insertions(+), 15 deletions(-) - -diff --git a/cmake/modules/FindEmbree.cmake b/cmake/modules/FindEmbree.cmake -index cd52f6b7f5..4c4ff1cdb2 100644 ---- a/cmake/modules/FindEmbree.cmake -+++ b/cmake/modules/FindEmbree.cmake -@@ -19,12 +19,30 @@ - # - #============================================================================= - -+find_path(EMBREE_INCLUDE_DIR -+ embree4/rtcore.h -+ embree3/rtcore.h -+HINTS -+ "${EMBREE_LOCATION}/include" -+ "$ENV{EMBREE_LOCATION}/include" -+DOC -+ "Embree headers path" -+) -+ -+if (EMBREE_INCLUDE_DIR AND EXISTS "${EMBREE_INCLUDE_DIR}/embree4/rtcore.h") -+ set(EMBREE_VERSIONED_LIBRARY_NAME "embree4") -+ set(EMBREE_VERSION_HEADER_FILE_NAME "rtcore_config.h") -+else() -+ set(EMBREE_VERSIONED_LIBRARY_NAME "embree3") -+ set(EMBREE_VERSION_HEADER_FILE_NAME "rtcore_version.h") -+endif() -+ - if (APPLE) -- set (EMBREE_LIB_NAME libembree3.dylib) -+ set (EMBREE_LIB_NAME "lib${EMBREE_VERSIONED_LIBRARY_NAME}.dylib") - elseif (UNIX) -- set (EMBREE_LIB_NAME libembree3.so) -+ set (EMBREE_LIB_NAME "lib${EMBREE_VERSIONED_LIBRARY_NAME}.so") - elseif (WIN32) -- set (EMBREE_LIB_NAME embree3.lib) -+ set (EMBREE_LIB_NAME "${EMBREE_VERSIONED_LIBRARY_NAME}.lib") - endif() - - find_library(EMBREE_LIBRARY -@@ -38,21 +56,14 @@ find_library(EMBREE_LIBRARY - "Embree library path" - ) - --find_path(EMBREE_INCLUDE_DIR -- embree3/rtcore.h --HINTS -- "${EMBREE_LOCATION}/include" -- "$ENV{EMBREE_LOCATION}/include" --DOC -- "Embree headers path" --) -+set(EMBREE_VERSION_HEADER_FILE_PATH "${EMBREE_INCLUDE_DIR}/${EMBREE_VERSIONED_LIBRARY_NAME}/${EMBREE_VERSION_HEADER_FILE_NAME}") - --if (EMBREE_INCLUDE_DIR AND EXISTS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" ) -- file(STRINGS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_MAJOR.*$") -+if (EMBREE_INCLUDE_DIR AND EXISTS "${EMBREE_VERSION_HEADER_FILE_PATH}") -+ file(STRINGS "${EMBREE_VERSION_HEADER_FILE_PATH}" TMP REGEX "^#define RTC_VERSION_MAJOR.*$") - string(REGEX MATCHALL "[0-9]+" MAJOR ${TMP}) -- file(STRINGS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_MINOR.*$") -+ file(STRINGS "${EMBREE_VERSION_HEADER_FILE_PATH}" TMP REGEX "^#define RTC_VERSION_MINOR.*$") - string(REGEX MATCHALL "[0-9]+" MINOR ${TMP}) -- file(STRINGS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_PATCH.*$") -+ file(STRINGS "${EMBREE_VERSION_HEADER_FILE_PATH}" TMP REGEX "^#define RTC_VERSION_PATCH.*$") - string(REGEX MATCHALL "[0-9]+" PATCH ${TMP}) - - set (EMBREE_VERSION ${MAJOR}.${MINOR}.${PATCH}) - -From c3db8a5d3c7040433f845a99b5c1ff57e5003f31 Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Thu, 16 Feb 2023 16:37:11 -0700 -Subject: [PATCH 3/7] hdEmbree: add support for building against Embree - versions 3 or 4 - -This supports upgrading Embree to a major version 4 release, so it includes -handling for the change in file paths between "embree3" and "embree4" and also -accounts for a small change in API in version 4. RTCIntersectContext was -renamed to RTCRayQueryContext, but it was also made part of the optional -RTCIntersectArguments parameter to rtcIntersect and rtcOccluded functions. -Since the context is not used by hdEmbree, it no longer needs to be provided. ---- - pxr/imaging/plugin/hdEmbree/CMakeLists.txt | 6 ++++++ - pxr/imaging/plugin/hdEmbree/context.h | 6 +++++- - pxr/imaging/plugin/hdEmbree/mesh.h | 9 +++++++-- - pxr/imaging/plugin/hdEmbree/meshSamplers.h | 9 +++++++-- - pxr/imaging/plugin/hdEmbree/pch.h | 6 ++++++ - pxr/imaging/plugin/hdEmbree/renderDelegate.h | 7 ++++++- - pxr/imaging/plugin/hdEmbree/renderParam.h | 6 +++++- - pxr/imaging/plugin/hdEmbree/renderer.cpp | 8 ++++++++ - pxr/imaging/plugin/hdEmbree/renderer.h | 9 +++++++-- - pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp | 7 ++++++- - 10 files changed, 63 insertions(+), 10 deletions(-) - -diff --git a/pxr/imaging/plugin/hdEmbree/CMakeLists.txt b/pxr/imaging/plugin/hdEmbree/CMakeLists.txt -index 96ac989d6c..d843804a15 100644 ---- a/pxr/imaging/plugin/hdEmbree/CMakeLists.txt -+++ b/pxr/imaging/plugin/hdEmbree/CMakeLists.txt -@@ -11,6 +11,12 @@ if (NOT ${PXR_BUILD_GPU_SUPPORT}) - return() - endif() - -+if (EMBREE_VERSION VERSION_GREATER_EQUAL 4.0.0) -+ add_definitions(-DPXR_EMBREE_MAJOR_VERSION=4) -+else() -+ add_definitions(-DPXR_EMBREE_MAJOR_VERSION=3) -+endif() -+ - pxr_plugin(hdEmbree - LIBRARIES - plug -diff --git a/pxr/imaging/plugin/hdEmbree/context.h b/pxr/imaging/plugin/hdEmbree/context.h -index 4165adb1e6..7e5c099b74 100644 ---- a/pxr/imaging/plugin/hdEmbree/context.h -+++ b/pxr/imaging/plugin/hdEmbree/context.h -@@ -14,7 +14,11 @@ - #include "pxr/base/gf/matrix4f.h" - #include "pxr/base/vt/array.h" - --#include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+#else -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - - PXR_NAMESPACE_OPEN_SCOPE - -diff --git a/pxr/imaging/plugin/hdEmbree/mesh.h b/pxr/imaging/plugin/hdEmbree/mesh.h -index bbb006302f..a6f71f110f 100644 ---- a/pxr/imaging/plugin/hdEmbree/mesh.h -+++ b/pxr/imaging/plugin/hdEmbree/mesh.h -@@ -15,8 +15,13 @@ - - #include "pxr/imaging/plugin/hdEmbree/meshSamplers.h" - --#include --#include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+ #include -+#else -+ #include -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - - PXR_NAMESPACE_OPEN_SCOPE - -diff --git a/pxr/imaging/plugin/hdEmbree/meshSamplers.h b/pxr/imaging/plugin/hdEmbree/meshSamplers.h -index c32c35fffa..51459a2ed4 100644 ---- a/pxr/imaging/plugin/hdEmbree/meshSamplers.h -+++ b/pxr/imaging/plugin/hdEmbree/meshSamplers.h -@@ -12,8 +12,13 @@ - #include "pxr/imaging/hd/meshUtil.h" - #include "pxr/base/vt/types.h" - --#include --#include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+ #include -+#else -+ #include -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - - #include - -diff --git a/pxr/imaging/plugin/hdEmbree/pch.h b/pxr/imaging/plugin/hdEmbree/pch.h -index 4e16a844d7..901e93859f 100644 ---- a/pxr/imaging/plugin/hdEmbree/pch.h -+++ b/pxr/imaging/plugin/hdEmbree/pch.h -@@ -76,9 +76,15 @@ - #include - #include - #include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+#include -+#include -+#include -+#else - #include - #include - #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - #ifdef PXR_PYTHON_SUPPORT_ENABLED - #include "pxr/base/tf/pySafePython.h" - #endif // PXR_PYTHON_SUPPORT_ENABLED -diff --git a/pxr/imaging/plugin/hdEmbree/renderDelegate.h b/pxr/imaging/plugin/hdEmbree/renderDelegate.h -index 1d8694daa6..826d020e04 100644 ---- a/pxr/imaging/plugin/hdEmbree/renderDelegate.h -+++ b/pxr/imaging/plugin/hdEmbree/renderDelegate.h -@@ -13,8 +13,13 @@ - #include "pxr/imaging/plugin/hdEmbree/renderer.h" - #include "pxr/base/tf/staticTokens.h" - -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+#else -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ - #include --#include - - PXR_NAMESPACE_OPEN_SCOPE - -diff --git a/pxr/imaging/plugin/hdEmbree/renderParam.h b/pxr/imaging/plugin/hdEmbree/renderParam.h -index 206a7458bc..af94ef10a4 100644 ---- a/pxr/imaging/plugin/hdEmbree/renderParam.h -+++ b/pxr/imaging/plugin/hdEmbree/renderParam.h -@@ -11,7 +11,11 @@ - #include "pxr/imaging/hd/renderDelegate.h" - #include "pxr/imaging/hd/renderThread.h" - --#include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+#else -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - - PXR_NAMESPACE_OPEN_SCOPE - -diff --git a/pxr/imaging/plugin/hdEmbree/renderer.cpp b/pxr/imaging/plugin/hdEmbree/renderer.cpp -index cc8ddb0270..8cbf8d4959 100644 ---- a/pxr/imaging/plugin/hdEmbree/renderer.cpp -+++ b/pxr/imaging/plugin/hdEmbree/renderer.cpp -@@ -709,9 +709,13 @@ HdEmbreeRenderer::_TraceRay(unsigned int x, unsigned int y, - rayHit.ray.flags = 0; - _PopulateRayHit(&rayHit, origin, dir, 0.0f); - { -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ rtcIntersect1(_scene, &rayHit); -+#else - RTCIntersectContext context; - rtcInitIntersectContext(&context); - rtcIntersect1(_scene, &context, &rayHit); -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - // - // there is something odd about how this is used in Embree. Is it reversed - // here and then when it it used in -@@ -1047,9 +1051,13 @@ HdEmbreeRenderer::_ComputeAmbientOcclusion(GfVec3f const& position, - shadow.flags = 0; - _PopulateRay(&shadow, position, shadowDir, 0.001f); - { -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ rtcOccluded1(_scene, &shadow); -+#else - RTCIntersectContext context; - rtcInitIntersectContext(&context); - rtcOccluded1(_scene,&context,&shadow); -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - } - - // Record this AO ray's contribution to the occlusion factor: a -diff --git a/pxr/imaging/plugin/hdEmbree/renderer.h b/pxr/imaging/plugin/hdEmbree/renderer.h -index 2da9880848..913b83eccc 100644 ---- a/pxr/imaging/plugin/hdEmbree/renderer.h -+++ b/pxr/imaging/plugin/hdEmbree/renderer.h -@@ -15,8 +15,13 @@ - #include "pxr/base/gf/matrix4d.h" - #include "pxr/base/gf/rect2i.h" - --#include --#include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+ #include -+#else -+ #include -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 - - #include - #include -diff --git a/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp b/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp -index 02c2ca69f8..45370dfed0 100644 ---- a/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp -+++ b/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp -@@ -23,7 +23,12 @@ - - #include "pxr/base/tf/errorMark.h" - --#include -+#if defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ #include -+#else -+ #include -+#endif // defined(PXR_EMBREE_MAJOR_VERSION) && PXR_EMBREE_MAJOR_VERSION >= 4 -+ - #include - - PXR_NAMESPACE_USING_DIRECTIVE - -From 9c67986d0a7e76babead0d1fdf5190f264c1a8b9 Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Wed, 24 Jul 2024 10:07:44 -0400 -Subject: [PATCH 4/7] build_usd.py: update Embree URLs to reflect new home in - the RenderKit GitHub organization - ---- - build_scripts/build_usd.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/build_scripts/build_usd.py b/build_scripts/build_usd.py -index ec1a268d78..afa4763c8d 100644 ---- a/build_scripts/build_usd.py -+++ b/build_scripts/build_usd.py -@@ -1580,9 +1580,9 @@ def InstallMaterialX(context, force, buildArgs): - # For MacOS we use version 3.13.3 to include a fix from Intel - # to build on Apple Silicon. - if MacOS(): -- EMBREE_URL = "https://github.com/embree/embree/archive/v3.13.3.zip" -+ EMBREE_URL = "https://github.com/RenderKit/embree/archive/v3.13.3.zip" - else: -- EMBREE_URL = "https://github.com/embree/embree/archive/v3.2.2.zip" -+ EMBREE_URL = "https://github.com/RenderKit/embree/archive/v3.2.2.zip" - - def InstallEmbree(context, force, buildArgs): - with CurrentWorkingDirectory(DownloadURL(EMBREE_URL, context, force)): - -From 0e3f0e8b595e74312c7fbd1b378a96d3b5e85723 Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Thu, 23 Feb 2023 12:25:24 -0700 -Subject: [PATCH 5/7] build_usd.py: add an option to choose Embree 3 or Embree - 4 - -The new --embree-major-version option can be given to build_usd.py to select -between Embree 3 or Embree 4. By default, Embree 3 is still used, preserving -the existing behavior. ---- - build_scripts/build_usd.py | 31 ++++++++++++++++++++++++------- - 1 file changed, 24 insertions(+), 7 deletions(-) - -diff --git a/build_scripts/build_usd.py b/build_scripts/build_usd.py -index afa4763c8d..f932c85b5d 100644 ---- a/build_scripts/build_usd.py -+++ b/build_scripts/build_usd.py -@@ -1577,14 +1577,19 @@ def InstallMaterialX(context, force, buildArgs): - - ############################################################ - # Embree --# For MacOS we use version 3.13.3 to include a fix from Intel --# to build on Apple Silicon. --if MacOS(): -- EMBREE_URL = "https://github.com/RenderKit/embree/archive/v3.13.3.zip" --else: -- EMBREE_URL = "https://github.com/RenderKit/embree/archive/v3.2.2.zip" -+ -+EMBREE_DEFAULT_MAJOR_VERSION = 3 - - def InstallEmbree(context, force, buildArgs): -+ if context.embreeMajorVersion >= 4: -+ EMBREE_URL = "https://github.com/RenderKit/embree/archive/refs/tags/v4.4.0.zip" -+ elif MacOS(): -+ # For MacOS we use version 3.13.3 to include a fix from Intel -+ # to build on Apple Silicon. -+ EMBREE_URL = "https://github.com/RenderKit/embree/archive/refs/tags/v3.13.3.zip" -+ else: -+ EMBREE_URL = "https://github.com/RenderKit/embree/archive/refs/tags/v3.2.2.zip" -+ - with CurrentWorkingDirectory(DownloadURL(EMBREE_URL, context, force)): - extraArgs = [ - '-DTBB_ROOT="{instDir}"'.format(instDir=context.instDir), -@@ -1601,7 +1606,9 @@ def InstallEmbree(context, force, buildArgs): - - RunCMake(context, force, extraArgs) - --EMBREE = Dependency("Embree", InstallEmbree, "include/embree3/rtcore.h") -+EMBREE = Dependency("Embree", InstallEmbree, -+ "include/embree3/rtcore.h", -+ "include/embree4/rtcore.h") - - ############################################################ - # AnimX -@@ -2121,6 +2128,12 @@ def InstallUSD(context, force, buildArgs): - help="Build Embree sample imaging plugin") - subgroup.add_argument("--no-embree", dest="build_embree", action="store_false", - help="Do not build Embree sample imaging plugin (default)") -+group.add_argument("--embree-major-version", -+ default=EMBREE_DEFAULT_MAJOR_VERSION, type=int, -+ choices=[3, 4], -+ help=( -+ "The major version of Embree to build " -+ "(default: {})").format(EMBREE_DEFAULT_MAJOR_VERSION)) - subgroup = group.add_mutually_exclusive_group() - subgroup.add_argument("--prman", dest="build_prman", action="store_true", - default=False, -@@ -2342,6 +2355,7 @@ def __init__(self, args): - - # - Imaging plugins - self.buildEmbree = self.buildImaging and args.build_embree -+ self.embreeMajorVersion = args.embree_major_version - self.buildPrman = self.buildImaging and args.build_prman - self.prmanLocation = (os.path.abspath(args.prman_location) - if args.prman_location else None) -@@ -2656,6 +2670,7 @@ def _JoinVersion(v): - OpenImageIO support: {buildOIIO} - OpenColorIO support: {buildOCIO} - Embree support: {buildEmbree} -+ Embree major version: {embreeMajorVersion} - PRMan support: {buildPrman} - Vulkan support: {enableVulkan} - UsdImaging {buildUsdImaging} -@@ -2738,6 +2753,8 @@ def FormatBuildArguments(buildArgs): - buildOIIO=("On" if context.buildOIIO else "Off"), - buildOCIO=("On" if context.buildOCIO else "Off"), - buildEmbree=("On" if context.buildEmbree else "Off"), -+ embreeMajorVersion=(context.embreeMajorVersion if context.buildEmbree -+ else "N/A"), - buildPrman=("On" if context.buildPrman else "Off"), - buildUsdImaging=("On" if context.buildUsdImaging else "Off"), - buildUsdview=("On" if context.buildUsdview else "Off"), - -From c96c972bc116e46bef477493b86b535f9b115545 Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Thu, 12 Jun 2025 17:46:43 -0400 -Subject: [PATCH 6/7] hdEmbree: use a header common between TBB and oneTBB in - limits workaround - -The TBB header that provides version definitions moved between TBB -(tbb_stddef.h) and oneTBB (version.h), so we use the lowest level -header that is available at the same path in both and let it bring in -the definitions. This allows the hdEmbree plugin to be built with -oneTBB when used in combination with Embree 4. ---- - pxr/imaging/plugin/hdEmbree/renderer.cpp | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/pxr/imaging/plugin/hdEmbree/renderer.cpp b/pxr/imaging/plugin/hdEmbree/renderer.cpp -index 8cbf8d4959..381bed73e5 100644 ---- a/pxr/imaging/plugin/hdEmbree/renderer.cpp -+++ b/pxr/imaging/plugin/hdEmbree/renderer.cpp -@@ -28,8 +28,13 @@ - // oneTBB as a min spec. This applies the "Work" thread limit to the - // render thread if "Work" is using old TBB, but won't affect other "Work" - // implementations. Note that it may affect Embree TBB usage as well. -+// -+// The header that provides version definitions moved between TBB -+// (tbb_stddef.h) and oneTBB (version.h), so we use the lowest level header -+// that is available at the same path in both and let it bring in the -+// definitions. - // ------------------------------------------------------------------------- --#include -+#include - - #if TBB_INTERFACE_VERSION_MAJOR < 12 - - -From a464dc5dcc9a26f552a3ece42dab949ae03d35df Mon Sep 17 00:00:00 2001 -From: Matt Johnson -Date: Wed, 24 Jul 2024 10:17:27 -0400 -Subject: [PATCH 7/7] build_usd.py: allow oneTBB and Embree to be used together - when Embree 4.x or later is selected - ---- - build_scripts/build_usd.py | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/build_scripts/build_usd.py b/build_scripts/build_usd.py -index f932c85b5d..949acadb42 100644 ---- a/build_scripts/build_usd.py -+++ b/build_scripts/build_usd.py -@@ -2473,9 +2473,10 @@ def ForceBuildDependency(self, dep): - PrintError("Draco plugin can not be enabled for monolithic build on Windows") - sys.exit(1) - --# The versions of Embree we currently support do not support oneTBB. --if context.buildOneTBB and context.buildEmbree: -- PrintError("Embree support cannot be enabled when building against oneTBB") -+# When building with both oneTBB and Embree, a 4.x version of Embree must be -+# used. -+if context.buildOneTBB and (context.buildEmbree and context.embreeMajorVersion < 4): -+ PrintError("Embree 4.x or later must be selected when building against oneTBB") - sys.exit(1) - - # Windows ARM64 requires oneTBB. Since oneTBB is a non-standard option for the diff --git a/0001-Backport-fixes-for-CVE-2025-64181-etc.-in-OpenEXRCor.patch b/3903.patch similarity index 66% rename from 0001-Backport-fixes-for-CVE-2025-64181-etc.-in-OpenEXRCor.patch rename to 3903.patch index 5e4df95..d8fa15b 100644 --- a/0001-Backport-fixes-for-CVE-2025-64181-etc.-in-OpenEXRCor.patch +++ b/3903.patch @@ -1,18 +1,18 @@ -From 63e1c9120a52766f7509dec4a312ced5cb15dd3f Mon Sep 17 00:00:00 2001 +From 3e51fb244dd264b09179999d29dc7c5afd7e71e3 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Tue, 2 Dec 2025 10:43:31 +0000 Subject: [PATCH] Backport fixes for CVE-2025-64181 etc. in OpenEXRCore --- - pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c | 20 ++++++++++++++++--- - .../hio/OpenEXR/OpenEXRCore/internal_util.h | 4 ++-- - .../hio/OpenEXR/OpenEXRCore/parse_header.c | 4 +++- + .../hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c | 20 ++++++++++++++++--- + .../OpenEXR/OpenEXRCore/internal_util.h | 4 ++-- + .../OpenEXR/OpenEXRCore/parse_header.c | 4 +++- 3 files changed, 22 insertions(+), 6 deletions(-) -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c -index cfe80b4cd..e11209fe6 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c +diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c +index cfe80b4cd68..e11209fe660 100644 +--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c ++++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c @@ -1292,6 +1292,16 @@ exr_read_tile_chunk_info ( return pctxt->report_error ( pctxt, EXR_ERR_INVALID_ARGUMENT, "Invalid packed size of 0"); @@ -49,10 +49,10 @@ index cfe80b4cd..e11209fe6 100644 } else rv = EXR_ERR_SUCCESS; -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h -index 3c6f02786..e0fa3933d 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h +diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h +index 3c6f02786cc..e0fa3933d92 100644 +--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h ++++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h @@ -31,10 +31,10 @@ compute_sampled_height (int height, int y_sampling, int start_y) else start = start_y; @@ -66,10 +66,10 @@ index 3c6f02786..e0fa3933d 100644 else nlines = (end - start) / y_sampling + 1; } -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c -index d72303926..8b6cf78cc 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c +diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c +index d7230392693..8b6cf78cc59 100644 +--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c ++++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c @@ -2293,7 +2293,9 @@ internal_exr_compute_chunk_offset_size (struct _internal_exr_part* curpart) w = (uint64_t) (((int64_t) dw.max.x) - ((int64_t) dw.min.x) + 1); @@ -81,6 +81,3 @@ index d72303926..8b6cf78cc 100644 { const exr_attr_tiledesc_t* tiledesc = curpart->tiles->tiledesc; int64_t tilecount = 0; --- -2.52.0 - diff --git a/sources b/sources index 2a65832..695949f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (OpenUSD-25.08.tar.gz) = fbe1e632473883e47f4bfeb16cab314bbbe8a7b404a5c071ca613bbf288526e505edd7a5edfdd9f85dd16da6d0d91fa0d4f8c783882094d3691f77685817fea6 +SHA512 (OpenUSD-26.08.tar.gz) = 82f7bb4f77b295be79cd36f591f242276d36c0d589b0fca383344c27e70daf7e29151bf587528bb2fc2b2a8b974387a253993ace3caf5f79ae70f9ebbc71cf1a diff --git a/usd-25.08-pr-4030.patch b/usd-25.08-pr-4030.patch deleted file mode 100644 index 3b1000b..0000000 --- a/usd-25.08-pr-4030.patch +++ /dev/null @@ -1,630 +0,0 @@ -From e3c7f7bdf877aae4961a6d6f38f14ae7e3484640 Mon Sep 17 00:00:00 2001 -From: Christoph Gohlke -Date: Tue, 17 Mar 2026 20:56:39 -0700 -Subject: [PATCH 1/6] Fix comparison operator for buffer size check (#2307) - -Signed-off-by: Christoph Gohlke ---- - pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_zip.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_zip.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_zip.c -index 628438c5c..56df6a49c 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_zip.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_zip.c -@@ -367,7 +367,7 @@ apply_zip_impl (exr_encode_pipeline_t* encode) - - if (rv == EXR_ERR_SUCCESS) - { -- if (compbufsz > encode->packed_bytes) -+ if (compbufsz >= encode->packed_bytes) - { - memcpy ( - encode->compressed_buffer, --- -2.53.0 - - -From 2d415fb1a62e8c951e3c515a3cb46bda7cc60749 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Thu, 26 Mar 2026 16:35:49 -0700 -Subject: [PATCH 2/6] Fix integer overflow in `srcbuffer` pointer arithmetic in - `unpack_*` (#2321) - -Pointer arithmetic involving `srcbuffer` in the `unpack_*` functions -can overflow for very wide images. - -Multiplying `int w` by a bytes-per-element constant (2, 4, 6, or 8) in -`srcbuffer +=` expressions causes signed integer overflow when the -image width is large. - -Promote the leading operand to `int64_t` at every affected multiplication -so pointer arithmetic is performed in 64-bit signed arithmetic throughout, -eliminating the undefined behavior without imposing any image size limit. - -Affected sites: `generic_unpack`, `unpack_16bit`, `unpack_32bit`, and -all 3- and 4-channel interleave/planar specializations. - -Made-with: Cursor - -Signed-off-by: Cary Phillips ---- - pxr/imaging/hio/OpenEXR/OpenEXRCore/unpack.c | 38 ++++++++++---------- - 1 file changed, 19 insertions(+), 19 deletions(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/unpack.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/unpack.c -index b88c98974..a311f9129 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/unpack.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/unpack.c -@@ -229,7 +229,7 @@ unpack_16bit_3chan_interleave (exr_decode_pipeline_t* decode) - in1 = in0 + w; - in2 = in1 + w; - -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - out[0] = one_to_native16 (in0[x]); -@@ -269,7 +269,7 @@ unpack_16bit_3chan_interleave_rev (exr_decode_pipeline_t* decode) - in1 = in0 + w; // G - in2 = in1 + w; // R - -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - out[0] = one_to_native16 (in2[x]); -@@ -309,7 +309,7 @@ unpack_half_to_float_3chan_interleave (exr_decode_pipeline_t* decode) - in1 = in0 + w; - in2 = in1 + w; - -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - out[0] = half_to_float (one_to_native16 (in0[x])); -@@ -349,7 +349,7 @@ unpack_half_to_float_3chan_interleave_rev (exr_decode_pipeline_t* decode) - in1 = in0 + w; - in2 = in1 + w; - -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - out[0] = half_to_float (one_to_native16 (in2[x])); -@@ -390,7 +390,7 @@ unpack_16bit_3chan_planar (exr_decode_pipeline_t* decode) - in0 = (const uint16_t*) srcbuffer; - in1 = in0 + w; - in2 = in1 + w; -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - /* specialise to memcpy if we can */ - #if EXR_HOST_IS_NOT_LITTLE_ENDIAN - for (int x = 0; x < w; ++x) -@@ -440,7 +440,7 @@ unpack_half_to_float_3chan_planar (exr_decode_pipeline_t* decode) - in0 = (const uint16_t*) srcbuffer; - in1 = in0 + w; - in2 = in1 + w; -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - /* specialise to memcpy if we can */ - half_to_float_buffer ((float*) out0, in0, w); - half_to_float_buffer ((float*) out1, in1, w); -@@ -485,7 +485,7 @@ unpack_16bit_3chan (exr_decode_pipeline_t* decode) - in0 = (const uint16_t*) srcbuffer; - in1 = in0 + w; - in2 = in1 + w; -- srcbuffer += w * 6; // 3 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 6; // 3 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - *((uint16_t*) (out0 + x * inc0)) = one_to_native16 (in0[x]); - for (int x = 0; x < w; ++x) -@@ -539,7 +539,7 @@ unpack_16bit_4chan_interleave (exr_decode_pipeline_t* decode) - in2 = in1 + w; - in3 = in2 + w; - -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - combined.a = one_to_native16 (in0[x]); -@@ -592,7 +592,7 @@ unpack_16bit_4chan_interleave_rev (exr_decode_pipeline_t* decode) - in2 = in1 + w; - in3 = in2 + w; - -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - combined.a = one_to_native16 (in0[x]); -@@ -633,7 +633,7 @@ unpack_half_to_float_4chan_interleave (exr_decode_pipeline_t* decode) - in2 = in1 + w; - in3 = in2 + w; - -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - out[0] = half_to_float (one_to_native16 (in3[x])); -@@ -674,7 +674,7 @@ unpack_half_to_float_4chan_interleave_rev (exr_decode_pipeline_t* decode) - in2 = in1 + w; - in3 = in2 + w; - -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - { - out[0] = half_to_float (one_to_native16 (in0[x])); -@@ -719,7 +719,7 @@ unpack_16bit_4chan_planar (exr_decode_pipeline_t* decode) - in1 = in0 + w; - in2 = in1 + w; - in3 = in2 + w; -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - /* specialize to memcpy if we can */ - #if EXR_HOST_IS_NOT_LITTLE_ENDIAN - for (int x = 0; x < w; ++x) -@@ -775,7 +775,7 @@ unpack_half_to_float_4chan_planar (exr_decode_pipeline_t* decode) - in1 = in0 + w; - in2 = in1 + w; - in3 = in2 + w; -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - - half_to_float_buffer ((float*) out0, in0, w); - half_to_float_buffer ((float*) out1, in1, w); -@@ -825,7 +825,7 @@ unpack_16bit_4chan (exr_decode_pipeline_t* decode) - in1 = in0 + w; - in2 = in1 + w; - in3 = in2 + w; -- srcbuffer += w * 8; // 4 * sizeof(uint16_t), avoid type conversion -+ srcbuffer += (int64_t) w * 8; // 4 * sizeof(uint16_t), avoid type conversion - for (int x = 0; x < w; ++x) - *((uint16_t*) (out0 + x * inc0)) = one_to_native16 (in0[x]); - for (int x = 0; x < w; ++x) -@@ -898,7 +898,7 @@ unpack_16bit (exr_decode_pipeline_t* decode) - } - } - #endif -- srcbuffer += w * 2; -+ srcbuffer += (int64_t) w * 2; - } - } - return EXR_ERR_SUCCESS; -@@ -963,7 +963,7 @@ unpack_32bit (exr_decode_pipeline_t* decode) - } - } - #endif -- srcbuffer += w * 4; -+ srcbuffer += (int64_t) w * 4; - } - } - return EXR_ERR_SUCCESS; -@@ -1118,7 +1118,7 @@ generic_unpack (exr_decode_pipeline_t* decode) - (uint64_t) decc->user_line_stride); - else - { -- srcbuffer += w * bpc; -+ srcbuffer += (int64_t) w * bpc; - continue; - } - } -@@ -1128,12 +1128,12 @@ generic_unpack (exr_decode_pipeline_t* decode) - } - else - { -- srcbuffer += w * bpc; -+ srcbuffer += (int64_t) w * bpc; - continue; - } - - UNPACK_SAMPLES (w) -- srcbuffer += w * bpc; -+ srcbuffer += (int64_t) w * bpc; - } - } - return EXR_ERR_SUCCESS; --- -2.53.0 - - -From b76c840e5c0b7a99e25c02e2ced420b4a8af0896 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Sun, 29 Mar 2026 19:19:12 -0700 -Subject: [PATCH 3/6] Security: fix signed integer overflow in - `undo_pxr24_impl()` (PXR24 decoder) (#2323) - -In the `EXR_PIXEL_FLOAT` branch of `undo_pxr24_impl()`, the expressions - - (uint64_t)(w * 3) - -compute the signed 32-bit product `w * 3` before the cast to `uint64_t`. -When `w` is large this is undefined behavior under the C standard; on -two's-complement builds without sanitizers the result wraps to a small -positive value, which can cause the bounds check - - if (nDec + (uint64_t)(w * 3) > outSize) - -to pass incorrectly. If the check is bypassed the decode loop proceeds -to write `4*w` bytes through `dout`, potentially far beyond the allocated -output buffer. - -Fix: cast `w` to `uint64_t` before multiplying so that both the bounds -check and the counter update are performed entirely in 64-bit unsigned -arithmetic: - - (uint64_t)w * 3 (cast before multiply, not after) - -The `EXR_PIXEL_UINT` and `EXR_PIXEL_HALF` decode branches are unaffected: -they reuse the pre-computed `nBytes` variable, which is already formed as -`(uint64_t)(w) * (uint64_t)(bytes_per_element)`. - -Also fix the symmetric issue in `apply_pxr24_impl()` (the encoder): - lastIn += w * 4 -advances a pointer by a signed 32-bit product; corrected to - lastIn += (uint64_t)w * 4 - -Made-with: Cursor - -Signed-off-by: Cary Phillips ---- - pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_pxr24.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_pxr24.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_pxr24.c -index 43e52c982..30f71f4f8 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_pxr24.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_pxr24.c -@@ -182,7 +182,7 @@ apply_pxr24_impl (exr_encode_pipeline_t* encode) - if (nOut + nBytes > encode->scratch_alloc_size_1) - return EXR_ERR_OUT_OF_MEMORY; - nOut += nBytes; -- lastIn += w * 4; -+ lastIn += (uint64_t) w * 4; - - ptr[0] = out; - out += w; -@@ -371,7 +371,7 @@ undo_pxr24_impl ( - ptr[2] = lastIn; - lastIn += w; - -- if (nDec + (uint64_t) (w * 3) > outSize) -+ if (nDec + (uint64_t) w * 3 > outSize) - return EXR_ERR_CORRUPT_CHUNK; - - for (int x = 0; x < w; ++x) -@@ -384,7 +384,7 @@ undo_pxr24_impl ( - unaligned_store32 (dout, pixel); - ++dout; - } -- nDec += (uint64_t) (w * 3); -+ nDec += (uint64_t) w * 3; - break; - } - default: return EXR_ERR_INVALID_ARGUMENT; --- -2.53.0 - - -From 72af902014ba12d414f31b585175723bc7e62cd2 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Sun, 29 Mar 2026 19:19:49 -0700 -Subject: [PATCH 4/6] fix integer overflow in PIZ wavelet buffer arithmetic - (#2328) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Three classes of signed integer overflow in the PIZ codec path, all -reachable from corrupt `dataWindow` dimensions in the EXR file header. - -**`wav_2D_encode` / `wav_2D_decode` — wavelet loop pointer arithmetic** - -`oy` is passed as `int` (value `wcount * nx`, at most ~INT32_MAX after -the guard below). Inside the hierarchical wavelet loop the expressions - - ey = in + oy * (ny - p2) // pointer end-of-row sentinel - oy1 = oy * p // row stride at level p - oy2 = oy * p2 // row stride at level p2 - -multiply two values that can each approach INT32_MAX, producing a -signed 32-bit product that wraps to a small or negative value. The -wrapped value is used as a pointer offset, causing reads and writes -through `px` / `py` to land outside the allocated wavelet buffer. - -Fix: widen by introducing `int64_t oy64 = oy` and using it for all -three expressions; `oy1` and `oy2` are also declared `int64_t`. - -**`wavbuf += nx * ny * wcount` — per-channel buffer advance** - -`nx`, `ny`, and `wcount` are all `int`. Their triple product overflows -int32 for moderately large images, causing subsequent channels to be -processed at an incorrect (too-small) offset into the wavelet buffer, -corrupting both encode and decode output. - -Fix: cast to `(uint64_t)` before multiplying. - -**`wcount * nx` — call-site argument overflow** - -The fifth argument to `wav_2D_encode` / `wav_2D_decode` is `wcount * nx` -(`oy` = y-stride = elements per row). `wcount` is 1 or 2 -(`bytes_per_element / 2`); for `wcount = 2` the product overflows int32 -when `nx > INT32_MAX / 2`. - -Fix: add an early bounds check `if (wcount > 0 && nx > INT_MAX / wcount)` -that rejects such input as `EXR_ERR_CORRUPT_CHUNK` before any arithmetic -is performed. This also keeps `wcount * nx` within int32 range at the -call site, ensuring `oy` arrives in the wavelet functions with a valid -non-overflowed value. - -Made-with: Cursor - -Signed-off-by: Cary Phillips ---- - .../hio/OpenEXR/OpenEXRCore/internal_piz.c | 39 +++++++++++-------- - 1 file changed, 23 insertions(+), 16 deletions(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_piz.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_piz.c -index 6c2750b16..787d2752c 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_piz.c -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_piz.c -@@ -10,6 +10,7 @@ - #include "internal_huf.h" - #include "internal_xdr.h" - -+#include - #include - - /**************************************/ -@@ -171,10 +172,11 @@ wdec16 (uint16_t l, uint16_t h, uint16_t* a, uint16_t* b) - static void - wav_2D_encode (uint16_t* in, int nx, int ox, int ny, int oy, uint16_t mx) - { -- int w14 = (mx < (1 << 14)) ? 1 : 0; -- int n = (nx > ny) ? ny : nx; -- int p = 1; // == 1 << level -- int p2 = 2; // == 1 << (level+1) -+ int w14 = (mx < (1 << 14)) ? 1 : 0; -+ int n = (nx > ny) ? ny : nx; -+ int p = 1; // == 1 << level -+ int p2 = 2; // == 1 << (level+1) -+ int64_t oy64 = oy; - - // - // Hierarchical loop on smaller dimension n -@@ -183,9 +185,9 @@ wav_2D_encode (uint16_t* in, int nx, int ox, int ny, int oy, uint16_t mx) - while (p2 <= n) - { - uint16_t* py = in; -- uint16_t* ey = in + oy * (ny - p2); -- int oy1 = oy * p; -- int oy2 = oy * p2; -+ uint16_t* ey = in + oy64 * (ny - p2); -+ int64_t oy1 = oy64 * p; -+ int64_t oy2 = oy64 * p2; - int ox1 = ox * p; - int ox2 = ox * p2; - uint16_t i00, i01, i10, i11; -@@ -284,10 +286,11 @@ wav_2D_decode ( - int oy, // i : y offset - uint16_t mx) // i : maximum in[x][y] value - { -- int w14 = (mx < (1 << 14)) ? 1 : 0; -- int n = (nx > ny) ? ny : nx; -- int p = 1; -- int p2; -+ int w14 = (mx < (1 << 14)) ? 1 : 0; -+ int n = (nx > ny) ? ny : nx; -+ int p = 1; -+ int p2; -+ int64_t oy64 = oy; - - // - // Search max level -@@ -307,9 +310,9 @@ wav_2D_decode ( - while (p >= 1) - { - uint16_t* py = in; -- uint16_t* ey = in + oy * (ny - p2); -- int oy1 = oy * p; -- int oy2 = oy * p2; -+ uint16_t* ey = in + oy64 * (ny - p2); -+ int64_t oy1 = oy64 * p; -+ int64_t oy2 = oy64 * p2; - int ox1 = ox * p; - int ox2 = ox * p2; - uint16_t i00, i01, i10, i11; -@@ -502,11 +505,13 @@ internal_exr_apply_piz (exr_encode_pipeline_t* encode) - nx = curc->width; - ny = curc->height; - wcount = (int) (curc->bytes_per_element / 2); -+ if (wcount > 0 && nx > INT_MAX / wcount) -+ return EXR_ERR_CORRUPT_CHUNK; - for (int j = 0; j < wcount; ++j) - { - wav_2D_encode (wavbuf + j, nx, wcount, ny, wcount * nx, maxValue); - } -- wavbuf += nx * ny * wcount; -+ wavbuf += (uint64_t) nx * ny * wcount; - } - - nBytes = 0; -@@ -655,11 +660,13 @@ internal_exr_undo_piz ( - nx = curc->width; - ny = curc->height; - wcount = (int) (curc->bytes_per_element / 2); -+ if (wcount > 0 && nx > INT_MAX / wcount) -+ return EXR_ERR_CORRUPT_CHUNK; - for (int j = 0; j < wcount; ++j) - { - wav_2D_decode (wavbuf + j, nx, wcount, ny, wcount * nx, maxValue); - } -- wavbuf += nx * ny * wcount; -+ wavbuf += (uint64_t) nx * ny * wcount; - } - - // --- -2.53.0 - - -From 7d3eb08f2322d199a874602e961d63004a145650 Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Sun, 29 Mar 2026 19:20:52 -0700 -Subject: [PATCH 5/6] Fix signed integer overflow in - `LossyDctDecoder_execute()` pointer arithmetic (#2329) - -`numBlocksX` and `numBlocksY` are declared as `int`. Two pointer-offset -expressions in `LossyDctDecoder_execute()` multiplied them as signed -32-bit integers before using the result as a pointer offset: - - rowBlock[comp] = rowBlock[comp - 1] + numBlocksX * 64; - currDcComp[comp] = currDcComp[comp - 1] + numBlocksX * numBlocksY; - -`dataWindow.max.x` is a signed 32-bit value in the EXR file format, so -`numBlocksX` can reach `(INT32_MAX + 7) / 8 = 268,435,456`. At that -point `numBlocksX * 64 = 17,179,869,184` overflows `int32`, and -`numBlocksX * numBlocksY` overflows even sooner. The wraparound -produces a small or negative pointer offset, causing `rowBlock[comp]` -and `currDcComp[comp]` to point into already-used or pre-buffer memory -rather than the intended component stride. - -Fix: cast `numBlocksX` to `size_t` before multiplying so the -arithmetic is performed in pointer-sized unsigned arithmetic: - - rowBlock[comp] = rowBlock[comp - 1] + (size_t) numBlocksX * 64; - currDcComp[comp] = currDcComp[comp - 1] + (size_t) numBlocksX * numBlocksY; - -This is consistent with the allocation on the line above, which already -uses `(size_t) numComp * (size_t) numBlocksX * 64 * sizeof(uint16_t)`, -and with the packed-DC count check, which uses explicit `uint64_t` casts. - -Made-with: Cursor - -Signed-off-by: Cary Phillips ---- - pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h -index bcdebd985..e289b064d 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h -@@ -265,7 +265,7 @@ LossyDctDecoder_execute ( - } - - for (int comp = 1; comp < numComp; ++comp) -- rowBlock[comp] = rowBlock[comp - 1] + numBlocksX * 64; -+ rowBlock[comp] = rowBlock[comp - 1] + (size_t) numBlocksX * 64; - - // - // Pack DC components together by common plane, so we can get -@@ -275,7 +275,7 @@ LossyDctDecoder_execute ( - - currDcComp[0] = (uint16_t*) d->_packedDc; - for (int comp = 1; comp < numComp; ++comp) -- currDcComp[comp] = currDcComp[comp - 1] + numBlocksX * numBlocksY; -+ currDcComp[comp] = currDcComp[comp - 1] + (size_t) numBlocksX * numBlocksY; - - for (int blocky = 0; blocky < numBlocksY; ++blocky) - { --- -2.53.0 - - -From 5240e8159a07033477b94c2ad359bb7e3f20ed2d Mon Sep 17 00:00:00 2001 -From: Cary Phillips -Date: Tue, 31 Mar 2026 07:49:09 -0700 -Subject: [PATCH 6/6] =?UTF-8?q?Fix=20misaligned=20memory=20access=20in=20`?= - =?UTF-8?q?LossyDctDecoder=5Fexecute`=20HALF=E2=86=92FLOAT=20expansion=20(?= - =?UTF-8?q?#2324)?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -* Fix misaligned memory access in `LossyDctDecoder_execute` HALF→FLOAT expansion - -After DCT decoding, `LossyDctDecoder_execute()` expands FLOAT-type channels -from their intermediate HALF (16-bit) XDR representation back to FLOAT (32-bit) -XDR in place. The expansion was done by casting `_rows[y]` (a `uint8_t *`) -directly to `float *` and `uint16_t *`, then reading and writing through those -typed pointers. - -Because row buffers are assigned by advancing a byte pointer with no alignment -padding (`outBufferEnd += chan->width * chan->bytes_per_element` in -`internal_dwa_compressor.h`), a FLOAT channel that follows a HALF channel of -odd width receives a `_rows[y]` pointer that is 2-byte aligned but not 4-byte -aligned. Dereferencing a `float *` cast from such a pointer is undefined -behavior under the C standard: - -- On ARM, RISC-V, and MIPS (strict alignment) this crashes immediately. -- On x86 it is silently tolerated at the hardware level but remains UB: - auto-vectorizing compilers (SSE/AVX) may assume aligned access and generate - incorrect code. -- UBSan reports: `store to misaligned address ... for type 'float', which - requires 4 byte alignment` at `internal_dwa_decoder.h:749`. - -Fix: replace the cast-and-dereference pattern with the `unaligned_load16` / -`memcpy` / `unaligned_store32` helpers already used throughout the rest of -OpenEXRCore (`internal_xdr.h`, `unpack.c`, `pack.c`, `internal_pxr24.c`). -These helpers use `memcpy` internally, which the C standard guarantees is safe -for unaligned addresses and which compilers compile to a single load/store -instruction on architectures that support it. - -The byte-order handling is preserved correctly: -- `unaligned_load16` reads 2 bytes via `memcpy` and applies `one_to_native16` - (XDR → native), returning a native-endian HALF value. -- `half_to_float` converts native HALF → native float. -- `memcpy(&bits, &f, 4)` reinterprets the float's bit pattern as `uint32_t` - without numeric conversion (the correct type-pun idiom in C). -- `unaligned_store32` applies `one_from_native32` (native → XDR) and writes - 4 bytes via `memcpy`, storing the result in XDR float format. - -Made-with: Cursor -Signed-off-by: Cary Phillips - -* add TODO comment - -Signed-off-by: Cary Phillips - ---------- - -Signed-off-by: Cary Phillips ---- - .../OpenEXR/OpenEXRCore/internal_dwa_decoder.h | 17 +++++++++++++---- - 1 file changed, 13 insertions(+), 4 deletions(-) - -diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h -index e289b064d..046615ec5 100644 ---- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h -+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_dwa_decoder.h -@@ -651,13 +651,22 @@ LossyDctDecoder_execute ( - /* process in place in reverse to avoid temporary buffer */ - for (int y = 0; y < d->_height; ++y) - { -- float* floatXdrPtr = (float*) chanData[chan]->_rows[y]; -- uint16_t* halfXdr = (uint16_t*) floatXdrPtr; -+ uint8_t* rowBytes = chanData[chan]->_rows[y]; - - for (int x = d->_width - 1; x >= 0; --x) - { -- floatXdrPtr[x] = one_from_native_float ( -- half_to_float (one_to_native16 (halfXdr[x]))); -+ // TODO: make an unaligned_store32f that takes the float and -+ // packages up a one_from_native_float and calls memcpy -+ // instead of the two memcpy. We should look at the metrics -+ // for dwa and see if there's a performance difference to do -+ // so at some point. See: -+ // https://github.com/AcademySoftwareFoundation/openexr/pull/2324 -+ -+ uint16_t h = unaligned_load16 (rowBytes + x * sizeof (uint16_t)); -+ float f = half_to_float (h); -+ uint32_t bits; -+ memcpy (&bits, &f, sizeof (bits)); -+ unaligned_store32 (rowBytes + x * sizeof (float), bits); - } - } - } --- -2.53.0 - diff --git a/usd.spec b/usd.spec index c1e45f3..05bcd6e 100644 --- a/usd.spec +++ b/usd.spec @@ -2,7 +2,7 @@ # package version, as a reminder of the need to rebuild dependent packages on # every update. See additional notes near the downstream ABI versioning patch. # It should be 0.MAJOR.MINOR without leading zeros, e.g. 22.03 → 0.22.3. -%global downstream_so_version 0.25.8 +%global downstream_so_version 0.26.8 %bcond alembic 1 %bcond draco 1 @@ -25,7 +25,7 @@ %bcond test 0 Name: usd -Version: 25.08 +Version: 26.08 Release: %autorelease Summary: 3D VFX pipeline interchange file format @@ -33,12 +33,15 @@ Summary: 3D VFX pipeline interchange file format # # Apache-2.0: # - pxr/imaging/hgiVulkan/spirv_reflect.{cpp,h} +# - pxr/imaging/plugin/hdEmbree/pxrPbrt/pbrtUtils.h +# - pxr/imaging/plugin/hdEmbree/pxrIES/pxr-IES.patch +# - pxr/imaging/plugin/hdEmbree/pxrIES/ies.{cpp,h} # BSD-3-Clause: # - pxr/base/gf/ilmbase_* # - pxr/base/js/rapidjson/msinttypes/ (removed in %%prep) # - pxr/base/tf/pxrCLI11/ (removed in %%prep) # - pxr/base/tf/pxrDoubleConversion/ (removed in %%prep) -# - pxr/imaging/hio/OpenEXR/OpenEXRCore/ +# - pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/ # - pxr/imaging/plugin/hioAvif/AVIF/src/src-libyuv/ # BSD-2-Clause: # - pxr/base/tf/pxrLZ4/ (removed in %%prep) @@ -56,14 +59,14 @@ Summary: 3D VFX pipeline interchange file format # - pxr/base/tf/pxrTslRobinMap/ # - pxr/imaging/garch/khrplatform.h # - pxr/imaging/hgiVulkan/vk_mem_alloc.h -# - pxr/imaging/hio/OpenEXR/deflate/ (removed in %%prep) -# - third_party/renderman-26/plugin/rmanArgsParser/pugixml/ (removed in %%prep) +# - pxr/imaging/plugin/hioOpenEXR/OpenEXR/deflate/ (removed in %%prep) +# - third_party/renderman/plugin/rmanArgsParser/pugixml/ (removed in %%prep) # MIT OR Unlicense: # - pxr/imaging/hio/stb/ # Pixar AND GPL-3.0-or-later WITH Bison-exception-2.2: # - pxr/usd/sdf/path.tab.{cpp,h} # - pxr/usd/sdf/textFileFormat.tab.{cpp,h} -# - third_party/renderman-26/plugin/hdPrman/virtualStructConditionalGrammar.tab.{cpp,h} +# - third_party/renderman/plugin/hdPrman/virtualStructConditionalGrammar.tab.{cpp,h} # # Additionally, the following would be listed above but are removed in %%prep: # @@ -124,10 +127,6 @@ Source1: org.openusd.usdview.desktop # built with -DPXR_BUILD_EXAMPLES=OFF, but it is.) Patch: 0001-Downstream-only-add-an-SONAME-version.patch -# hdEmbree: add support for building against embree4 -# https://github.com/PixarAnimationStudios/USD/pull/2313 -Patch: %{forgeurl}/pull/2313.patch - # Downstream-only: use Valgrind macro instead of inline assembly # # Upstream already has a plan to make this change, but is waiting to be @@ -151,39 +150,15 @@ Patch: 0006-Downstream-only-use-the-system-libavif.patch # Backport fixes for CVE-2025-64181 etc. in OpenEXRCore # https://github.com/PixarAnimationStudios/OpenUSD/pull/3903 -# Rebased on v25.08 -Patch: 0001-Backport-fixes-for-CVE-2025-64181-etc.-in-OpenEXRCor.patch +Patch: %{forgeurl}/pull/3903.patch -# sdf: Guard against invalid primChildren in crate files -# https://github.com/PixarAnimationStudios/OpenUSD/commit/b9530922b6a8ea72cd43661226b693fff8abbe4c -# -# Fixes: -# -# CVE-2025-14439 usd: OpenUSD File Parsing Use-After-Free Remote Code Execution -# Vulnerability [fedora-43] -# https://bugzilla.redhat.com/show_bug.cgi?id=2422276 -# -# …which is: -# -# OpenUSD File Parsing Use-After-Free Remote Code Execution Vulnerability -# https://github.com/advisories/GHSA-grjp-54v3-c442 -# -# Cherry-picked on v25.08. -Patch: 0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch -# Backport fix for CVE-2026-34544 in OpenEXRCore -# https://github.com/PixarAnimationStudios/OpenUSD/pull/4028 -# Cherry-picked on v25.08. -Patch: 0001-Fix-B44-B44A-integer-overflow-use-uint64_t-for-row-o.patch -# Backport several OpenEXRCore security fixes -# https://github.com/PixarAnimationStudios/OpenUSD/pull/4030 -# Fixes: -# - CVE-2026-34378 / GHSA-v76p-4qvv-vh4g / RHBZ#2455493 -# - CVE-2026-34380 / GHSA-q3v8-hw4m-59w5 / RHBZ#2455534 -# - CVE-2026-34588 / GHSA-588r-cr5c-w6hf / RHBZ#2455505 -# - CVE-2026-34589 / GHSA-p8xc-w3q4-h64x / RHBZ#2455501 -# - CVE-2026-34379 / GHSA-w88v-vqhq-5p24 / RHBZ#2455497 -# Cherry-picked on v25.08. -Patch: usd-25.08-pr-4030.patch +# Replace PyWeakref_GetObject with PyWeakref_GetRef +# Fixes RHBZ#2433881. This patch is LLM-generated and needs expert human +# review, but it at least builds. See discussion in +# https://bugzilla.redhat.com/show_bug.cgi?id=2433881. +# Mentioned upstream in +# https://github.com/PixarAnimationStudios/OpenUSD/issues/3966#issuecomment-5128542913. +Patch: 0001-Replace-PyWeakref_GetObject-with-PyWeakref_GetRef.patch # Base BuildRequires: gcc-c++ @@ -195,9 +170,6 @@ BuildRequires: ninja-build BuildRequires: dos2unix BuildRequires: help2man -# For applying 0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch, -# which includes binary diffs. -BuildRequires: git-core BuildRequires: pkgconfig(blosc) BuildRequires: pkgconfig(dri) @@ -266,7 +238,7 @@ BuildRequires: openvdb-devel %endif %if %{with ptex} -BuildRequires: pkgconfig(ptex) +BuildRequires: cmake(ptex) %endif # Header-only library: -static is for tracking per guidelines @@ -328,8 +300,9 @@ Provides: bundled(ilmbase) = 2.5.3 # Currently, Fedora’s PEGTL is too old: # https://bugzilla.redhat.com/show_bug.cgi?id=1902427 Provides: bundled(PEGTL) = 3.2.7 -# Version from pxr/imaging/hio/OpenEXR/OpenEXRCore/openexr_version.h -# From pxr/imaging/hio/OpenEXR/README.md: +# Version from +# pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/openexr_version.h +# From pxr/imaging/plugin/hioOpenEXR/OpenEXR/README.md: # A few changes are still in progress to upstreamed to the OpenEXR project, # but these are minor, and otherwise, almost all differences between the # interred OpenEXRCore and the official OpenEXR repo are consolidated to the @@ -358,6 +331,39 @@ Provides: bundled(openexr) = 3.2.0 # effort to remove the Boost dependency. While pxr_boost::python is derived # from boost::python, it is not intended to remain compatible with it. Provides: bundled(boost) = 1.85.0 +# From LICENSE.txt: +# =========================================================== +# PBRT (Sampling functions) +# ============================================================ +# USD includes code derived from the pbrt-v4 library, retrieved from +# https://github.com/mmp/pbrt-v4/tree/8c19f304558fd7681e2fef2c395a689d0106fb05, which was +# provided subject to the unmodified Apache 2.0 license. For details, see +# https://github.com/mmp/pbrt-v4/blob/8c19f304558fd7681e2fef2c395a689d0106fb05/LICENSE.txt +# +# The bundled routines in pxr/imaging/plugin/hdEmbree/pxrPbrt/pbrtUtils.h are +# just a handful of small internal utility functions. It would not be +# reasonable to add a dependency on the full pbrt ray tracer even if these were +# exposed in a public API. +Provides: bundled(pbrt-v4) = 4~20251208.8c19f30 +# From LICENSE.txt: +# ============================================================ +# Cycles (IES reader) +# ============================================================ +# USD includes classes from the Blender Foundation's Cycles project, retrieved from +# https://projects.blender.org/blender/cycles/src/commit/0be21d452506ec90259b9063c28b5a6fc1cac6a1, +# which was provided subject to the unmodified Apache 2.0 license. For details, see +# https://projects.blender.org/blender/cycles/src/commit/0be21d452506ec90259b9063c28b5a6fc1cac6a1/LICENSE +# +# These are not a candidate for unbundling because they are internal utility +# functions not available in the public API. There are also some minor +# modifications for OpenUSD, documented in +# pxr/imaging/plugin/hdEmbree/pxrIES/pxr-IES.patch. +# +# Is this commit a post-release snapshot of 4.5.0, or a pre-release snapshot of +# 5.0.0? How can we tell? There doesn’t seem to be a project version number +# embedded in the source tree. Since this commit hash is only two commits ahead +# of the v4.5.0 tag, we consider it a 4.5.0 post-release. +Provides: bundled(cycles) = 4.5.0^20251210.0be21d4 # We are currently able to unbundle these and use system libraries, but we # retain the virtual Provides, commented out, as documentation and in case we @@ -370,7 +376,7 @@ Provides: bundled(boost) = 1.85.0 # Version from: pxr/base/tf/pxrCLI11/README.md # Provides: bundled(cli11) = 2.3.1 # Version from: -# third_party/renderman-26/plugin/rmanArgsParser/pugixml/pugiconfig.hpp +# third_party/renderman/plugin/rmanArgsParser/pugixml/pugiconfig.hpp # (header comment) # Provides: bundled(pugixml) = 1.9 # Version from: pxr/base/js/rapidjson/rapidjson.h @@ -379,7 +385,7 @@ Provides: bundled(boost) = 1.85.0 # Version from: pxr/base/tf/pxrTslRobinMap/robin_growth_policy.h # (PXR_TSL_RH_VERSION_{MAJOR,MINOR,PATCH}) # Provides: bundled(robin-map) = 1.3.0 -# Version from pxr/imaging/hio/OpenEXR/deflate/libdeflate.h +# Version from pxr/imaging/plugin/hioOpenEXR/OpenEXR/deflate/libdeflate.h # Provides: bundled(libdeflate) = 1.18 # Version from pxr/imaging/plugin/hioAvif/AVIF/src/avif/avif.h # We actually have a post-release snapshot of libavif, because @@ -394,8 +400,8 @@ Provides: bundled(boost) = 1.85.0 # https://chromium.googlesource.com/libyuv/libyuv and find the commit hash that # corresponds to a particular serial number. # LIBYUV_VERSION 1895 = commit a97746349b244efd54ab1eb0c0a7366717b33f39 -# Provides: bundled(libyuv) = 0^20240812gita977463 -# Version from pxr/imaging/plugin/hioAvif/aom/config/aom_version.h +# Provides: bundled(libyuv) = 0^20240812.a977463 +# Version from pxr/imaging/plugin/hioAvif/config/aom_version.h # Provides: bundled(aom) = 3.0.0 %description libs @@ -451,10 +457,7 @@ Requires: usd-libs%{?_isa} = %{version}-%{release} Python language bindings for the Universal Scene Description (USD) C++ API %prep -# The -S git is for applying -# 0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch, which -# includes binary diffs. -%autosetup -p1 -n OpenUSD-%{version} -S git +%autosetup -p1 -n OpenUSD-%{version} # Convert NOTICE.txt from CRNL line encoding dos2unix NOTICE.txt @@ -517,9 +520,9 @@ cat > pxr/base/tf/pxrCLI11/CLI11.h <<'EOF' namespace pxr_CLI = CLI; EOF # Remove the bundled copy of pugixml. -find third_party/renderman-*/plugin/rmanArgsParser/pugixml/ \ +find third_party/renderman/plugin/rmanArgsParser/pugixml/ \ -type f ! -name '*.hpp' -print -delete -for hdr in third_party/renderman-*/plugin/rmanArgsParser/pugixml/*.hpp +for hdr in third_party/renderman/plugin/rmanArgsParser/pugixml/*.hpp do cat > "${hdr}" < @@ -542,7 +545,7 @@ namespace pxr_tsl = tsl; EOF done # Remove the bundled copy of libdeflate. -rm -rv pxr/imaging/hio/OpenEXR/deflate/ +rm -rv pxr/imaging/plugin/hioOpenEXR/OpenEXR/deflate/ # Remove the bundled copies of libavif, along with the associated libaom and # the libyuv that is in the libavif sources. rm -rv pxr/imaging/plugin/hioAvif/aom/ \ @@ -719,6 +722,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.d %{_bindir}/usdstitch %{_bindir}/usdstitchclips %{_bindir}/usdtree +%{_bindir}/usdupdatecrate %{_bindir}/usdzip %if %{with usdview} %{_datadir}/applications/org.openusd.usdview.desktop @@ -750,6 +754,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.d %{_mandir}/man1/usdstitch.1* %{_mandir}/man1/usdstitchclips.1* %{_mandir}/man1/usdtree.1* +%{_mandir}/man1/usdupdatecrate.1* %{_mandir}/man1/usdzip.1* %if %{with usdview} %{_mandir}/man1/testusdview.1*