<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>246292</bug_id>
          
          <creation_ts>2022-10-10 13:06:30 -0700</creation_ts>
          <short_desc>-Wfree-nonheap-object and -Wuse-after-free from CSSValue.h</short_desc>
          <delta_ts>2022-10-12 10:11:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=246294</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>darin</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1904575</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-10-10 13:06:30 -0700</bug_when>
    <thetext>254846@main introduced a new GCC warning:

[3805/7121] Building CXX object Source/WebCore/CMakeFiles...edSources/unified-sources/UnifiedSource-2f84417a-11.cpp.o
In file included from /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSPrimitiveValue.h:26,
                 from /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValuePool.h:28,
                 from /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValuePool.cpp:27,
                 from /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WebCore/DerivedSources/unified-sources/UnifiedSource-2f84417a-11.cpp:1:
In member function ‘void WebCore::CSSValue::deref() const’,
    inlined from ‘WTF::Ref&lt;T, &lt;template-parameter-1-2&gt; &gt;::~Ref() [with T = WebCore::CSSPrimitiveValue; Traits = WTF::RawPtrTraits&lt;WebCore::CSSPrimitiveValue&gt;]’ at /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WTF/Headers/wtf/Ref.h:61:23,
    inlined from ‘WTF::Ref&lt;WebCore::CSSValue&gt; WebCore::valueForContainIntrinsicSize(const RenderStyle&amp;, const ContainIntrinsicSizeType&amp;, std::optional&lt;Length&gt;)’ at /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/ComputedStyleExtractor.cpp:1817:5:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValue.h:258:16: warning: ‘static void WebCore::CSSValue::operator delete(WebCore::CSSValue*, std::destroying_delete_t)’ called on unallocated object ‘WebCore::staticCSSValuePool’ [-Wfree-nonheap-object]
  258 |         delete this;


I&apos;ve never seen -Wfree-nonheap-object before ever. Cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904577</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-10-10 13:07:51 -0700</bug_when>
    <thetext>Oops, there was just a little more to this warning:

/home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValuePool.cpp: In function ‘WTF::Ref&lt;WebCore::CSSValue&gt; WebCore::valueForContainIntrinsicSize(const RenderStyle&amp;, const ContainIntrinsicSizeType&amp;, std::optional&lt;Length&gt;)’:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValuePool.cpp:37:40: note: declared here
   37 | LazyNeverDestroyed&lt;StaticCSSValuePool&gt; staticCSSValuePool;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904608</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-10-10 13:59:59 -0700</bug_when>
    <thetext>The objects in the staticCSSValuePool have special values for the reference count that make the delete line unreachable. But the compiler can’t reason about this. Happy to supply additional details. This is a false positive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904611</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-10-10 14:05:07 -0700</bug_when>
    <thetext>The flag refCountFlagIsStatic is set, and so the reference count never becomes zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904613</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-10-10 14:05:33 -0700</bug_when>
    <thetext>This is done by calling makeStatic() on the CSSValue, making that CSSValue immortal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904887</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-10-11 14:07:27 -0700</bug_when>
    <thetext>I created a separate bug #246294 for a different issue introduced by the same commit, but I want to solve it in the same patch because it requires changes in the exact same code, so I will mark it as a duplicate now and address it here:

[3817/7121] Building CXX object Source/WebCore/CMakeFiles...edSources/unified-sources/UnifiedSource-2f84417a-18.cpp.o
In file included from /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSPrimitiveValue.h:26,
                 from /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/parser/CSSParserToken.h:32,
                 from /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/parser/CSSParserToken.cpp:31,
                 from /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WebCore/DerivedSources/unified-sources/UnifiedSource-2f84417a-18.cpp:2:
In member function ‘void WebCore::CSSValue::deref() const’,
    inlined from ‘static void WTF::DefaultRefDerefTraits&lt; &lt;template-parameter-1-1&gt; &gt;::derefIfNotNull(T*) [with T = WebCore::CSSValue]’ at /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WTF/Headers/wtf/RefPtr.h:42:23,
    inlined from ‘WTF::RefPtr&lt;T, &lt;template-parameter-1-2&gt;, &lt;template-parameter-1-3&gt; &gt;::~RefPtr() [with T = WebCore::CSSValue; _PtrTraits = WTF::RawPtrTraits&lt;WebCore::CSSValue&gt;; _RefDerefTraits = WTF::DefaultRefDerefTraits&lt;WebCore::CSSValue&gt;]’ at /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WTF/Headers/wtf/RefPtr.h:74:61,
    inlined from ‘WTF::RefPtr&lt;WebCore::CSSValue&gt; WebCore::consumeContentDistributionOverflowPosition(CSSParserTokenRange&amp;, IsPositionKeyword)’ at /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/parser/CSSPropertyParser.cpp:3049:5:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValue.h:256:29: warning: pointer used after ‘static void WebCore::CSSValue::operator delete(WebCore::CSSValue*, std::destroying_delete_t)’ [-Wuse-after-free]
  256 |     unsigned tempRefCount = m_refCount - refCountIncrement;
      |                             ^~~~~~~~~~
In member function ‘void WebCore::CSSValue::deref() const’,
    inlined from ‘static void WTF::DefaultRefDerefTraits&lt; &lt;template-parameter-1-1&gt; &gt;::derefIfNotNull(T*) [with T = WebCore::CSSValue]’ at /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WTF/Headers/wtf/RefPtr.h:42:23,
    inlined from ‘WTF::RefPtr&lt;T, &lt;template-parameter-1-2&gt;, &lt;template-parameter-1-3&gt; &gt;::~RefPtr() [with T = WebCore::CSSValue; _PtrTraits = WTF::RawPtrTraits&lt;WebCore::CSSValue&gt;; _RefDerefTraits = WTF::DefaultRefDerefTraits&lt;WebCore::CSSValue&gt;]’ at /home/mcatanzaro/Projects/WebKit/WebKitBuild/gtk3/WTF/Headers/wtf/RefPtr.h:74:61,
    inlined from ‘WTF::RefPtr&lt;WebCore::CSSValue&gt; WebCore::consumeContentDistributionOverflowPosition(CSSParserTokenRange&amp;, IsPositionKeyword)’ at /home/mcatanzaro/Projects/WebKit/Source/WebCore/css/parser/CSSPropertyParser.cpp:3048:51:
/home/mcatanzaro/Projects/WebKit/Source/WebCore/css/CSSValue.h:258:16: note: call to ‘static void WebCore::CSSValue::operator delete(WebCore::CSSValue*, std::destroying_delete_t)’ here
  258 |         delete this;
      |                ^~~~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904889</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-10-11 14:07:31 -0700</bug_when>
    <thetext>*** Bug 246294 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904891</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-10-11 14:18:13 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/5254</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1905101</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-10-12 10:10:24 -0700</bug_when>
    <thetext>Committed 255439@main (143afebb28dd): &lt;https://commits.webkit.org/255439@main&gt;

Reviewed commits have been landed. Closing PR #5254 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1905102</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-10-12 10:11:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/101084603&gt;</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>