Title: [277532] trunk/Source/WebCore
Revision
277532
Author
[email protected]
Date
2021-05-14 21:59:10 -0700 (Fri, 14 May 2021)

Log Message

Provide custom SetInlineFillGradient copy ctor
https://bugs.webkit.org/show_bug.cgi?id=225688

Patch by Rob Buis <[email protected]> on 2021-05-14
Reviewed by Wenson Hsieh.

Provide custom SetInlineFillGradient copy ctor
to deal with invalid SetInlineFillGradient source.

* platform/graphics/displaylists/DisplayListItems.cpp:
(WebCore::DisplayList::SetInlineFillGradient::SetInlineFillGradient):
* platform/graphics/displaylists/DisplayListItems.h:
(WebCore::DisplayList::SetInlineFillGradient::isValid const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (277531 => 277532)


--- trunk/Source/WebCore/ChangeLog	2021-05-15 04:58:16 UTC (rev 277531)
+++ trunk/Source/WebCore/ChangeLog	2021-05-15 04:59:10 UTC (rev 277532)
@@ -1,3 +1,18 @@
+2021-05-14  Rob Buis  <[email protected]>
+
+        Provide custom SetInlineFillGradient copy ctor
+        https://bugs.webkit.org/show_bug.cgi?id=225688
+
+        Reviewed by Wenson Hsieh.
+
+        Provide custom SetInlineFillGradient copy ctor
+        to deal with invalid SetInlineFillGradient source.
+
+        * platform/graphics/displaylists/DisplayListItems.cpp:
+        (WebCore::DisplayList::SetInlineFillGradient::SetInlineFillGradient):
+        * platform/graphics/displaylists/DisplayListItems.h:
+        (WebCore::DisplayList::SetInlineFillGradient::isValid const):
+
 2021-05-14  Chris Dumez  <[email protected]>
 
         Drop legacy / prefixed WebAudio implementation

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp (277531 => 277532)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp	2021-05-15 04:58:16 UTC (rev 277531)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp	2021-05-15 04:59:10 UTC (rev 277532)
@@ -140,6 +140,23 @@
     }
 }
 
+SetInlineFillGradient::SetInlineFillGradient(const SetInlineFillGradient& other)
+{
+    if (WTF::holds_alternative<Gradient::RadialData>(other.m_data) || WTF::holds_alternative<Gradient::LinearData>(other.m_data) || WTF::holds_alternative<Gradient::ConicData>(other.m_data)) {
+        m_data = other.m_data;
+        m_gradientSpaceTransform = other.m_gradientSpaceTransform;
+        m_spreadMethod = other.m_spreadMethod;
+        m_colorStopCount = other.m_colorStopCount;
+        if (m_colorStopCount > maxColorStopCount)
+            m_colorStopCount = 0;
+        for (uint8_t i = 0; i < m_colorStopCount; ++i) {
+            m_offsets[i] = other.m_offsets[i];
+            m_colors[i] = other.m_colors[i];
+        }
+    } else
+        m_isValid = false;
+}
+
 Ref<Gradient> SetInlineFillGradient::gradient() const
 {
     auto gradient = Gradient::create(Gradient::Data(m_data));

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h (277531 => 277532)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h	2021-05-15 04:58:16 UTC (rev 277531)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h	2021-05-15 04:59:10 UTC (rev 277532)
@@ -190,6 +190,8 @@
 
     SetInlineFillGradient(const Gradient&, const AffineTransform& gradientSpaceTransform);
     WEBCORE_EXPORT SetInlineFillGradient(float offsets[maxColorStopCount], SRGBA<uint8_t> colors[maxColorStopCount], const Gradient::Data&, const AffineTransform& gradientSpaceTransform, GradientSpreadMethod, uint8_t colorStopCount);
+    SetInlineFillGradient(const SetInlineFillGradient&);
+    bool isValid() const { return m_isValid; }
 
     static bool isInline(const Gradient&);
     Ref<Gradient> gradient() const;
@@ -203,6 +205,7 @@
     AffineTransform m_gradientSpaceTransform;
     GradientSpreadMethod m_spreadMethod { GradientSpreadMethod::Pad };
     uint8_t m_colorStopCount { 0 };
+    bool m_isValid { true };
 };
 
 class SetInlineFillColor {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to