From 92ec98d0af99634c10489d0b1a225dcee148e3d7 Mon Sep 17 00:00:00 2001 From: Peter Hillman Date: Fri, 7 Aug 2020 17:20:06 +1200 Subject: [PATCH 1/2] allow undefined EnvMap enum values for future proofing Signed-off-by: Peter Hillman --- OpenEXR/IlmImf/ImfEnvmapAttribute.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp b/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp index b6f88c27d1..a08e45e021 100644 --- a/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +++ b/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp @@ -72,5 +72,18 @@ EnvmapAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int _value = Envmap (tmp); } +template <> +void +EnvmapAttribute::copyValueFrom (const OPENEXR_IMF_INTERNAL_NAMESPACE::Attribute &other) +#if defined (__clang__) + // _value may be an invalid value, which the clang sanitizer reports + // as undefined behavior, even though the value is acceptable in this + // context. + __attribute__((no_sanitize ("undefined"))) +#endif +{ + _value = cast(other).value(); + +} OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT From cd288422358b00571ed7c9e727d4810dc0e238f5 Mon Sep 17 00:00:00 2001 From: Peter Hillman Date: Fri, 7 Aug 2020 17:24:42 +1200 Subject: [PATCH 2/2] suppress clang undefined behavior sanitizer in EnvmapAttribute::copyValuesFrom() Signed-off-by: Peter Hillman --- OpenEXR/IlmImf/ImfEnvmapAttribute.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OpenEXR/IlmImf/ImfEnvmapAttribute.h b/OpenEXR/IlmImf/ImfEnvmapAttribute.h index 0d0129b80a..5036eca228 100644 --- a/OpenEXR/IlmImf/ImfEnvmapAttribute.h +++ b/OpenEXR/IlmImf/ImfEnvmapAttribute.h @@ -61,7 +61,9 @@ template <> IMF_EXPORT void EnvmapAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - +template <> IMF_EXPORT +void +EnvmapAttribute::copyValueFrom (const OPENEXR_IMF_INTERNAL_NAMESPACE::Attribute &other); OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT