<?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>35014</bug_id>
          
          <creation_ts>2010-02-16 19:09:43 -0800</creation_ts>
          <short_desc>Modifying UA rules from page JS crashes</short_desc>
          <delta_ts>2010-11-30 16:26:46 -0800</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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Boris Zbarsky">bzbarsky</reporter>
          <assigned_to name="Yuzo Fujishima">yuzo</assigned_to>
          <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>mitz</cc>
    
    <cc>yuzo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190859</commentid>
    <comment_count>0</comment_count>
    <who name="Boris Zbarsky">bzbarsky</who>
    <bug_when>2010-02-16 19:09:43 -0800</bug_when>
    <thetext>STEPS TO REPRODUCE:
1)  Start Safari.
2)  Load about:blank (or really, any page of your choice)
3)  Type :

  javascript:window.getMatchedCSSRules(document.body, &quot;&quot;, false)[0].style.marginTop=&quot;200px&quot;;void(0);

    into the url bar.
4)  Hit enter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190861</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-02-16 19:15:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/7656398&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191227</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-17 14:40:53 -0800</bug_when>
    <thetext>Looks like null dereference.

Thread 0 Crashed:
0   com.apple.WebCore             	0x019a07fb WebCore::Document::updateStyleSelector() + 9 (Document.cpp:2459)
1   com.apple.WebCore             	0x018d887a WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc() + 232 (CSSMutableStyleDeclaration.cpp:488)
2   com.apple.WebCore             	0x018d96d4 WebCore::CSSMutableStyleDeclaration::setProperty(int, WebCore::String const&amp;, bool, bool) + 312 (CSSMutableStyleDeclaration.cpp:541)
3   com.apple.WebCore             	0x018d97fe WebCore::CSSMutableStyleDeclaration::setProperty(int, WebCore::String const&amp;, bool, int&amp;) + 62 (CSSMutableStyleDeclaration.cpp:512)
4   com.apple.WebCore             	0x01910b4c WebCore::CSSStyleDeclaration::setProperty(WebCore::String const&amp;, WebCore::String const&amp;, WebCore::String const&amp;, int&amp;) + 126 (CSSStyleDeclaration.cpp:101)
5   com.apple.WebCore             	0x01910c4b WebCore::CSSStyleDeclaration::setProperty(WebCore::String const&amp;, WebCore::String const&amp;, int&amp;) + 119 (CSSStyleDeclaration.cpp:87)
6   com.apple.WebCore             	0x01c85ddc WebCore::JSCSSStyleDeclaration::putDelegate(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;) + 242 (JSCSSStyleDeclarationCustom.cpp:186)
7   com.apple.WebCore             	0x01c84059 WebCore::JSCSSStyleDeclaration::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;) + 59 (JSCSSStyleDeclaration.cpp:255)
8   com.apple.JavaScriptCore      	0x00e1c914 JSC::JSValue::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;) + 162 (JSObject.h:646)
9   com.apple.JavaScriptCore      	0x00e4c138 cti_op_put_by_id + 156 (JITStubs.cpp:1231)
10  com.apple.JavaScriptCore      	0x00e40ff4 jscGeneratedNativeCode + 0 (JITStubs.cpp:932)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224480</commentid>
    <comment_count>3</comment_count>
      <attachid>55818</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2010-05-12 02:08:39 -0700</bug_when>
    <thetext>Created attachment 55818
Fix Bug 35014 - Modifying UA rules from page JS crashes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224775</commentid>
    <comment_count>4</comment_count>
      <attachid>55818</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-12 11:54:54 -0700</bug_when>
    <thetext>Comment on attachment 55818
Fix Bug 35014 - Modifying UA rules from page JS crashes

&gt; +&lt;!doctype html&gt;
&gt; +&lt;html&gt;
&gt; +&lt;head&gt;
&gt; +&lt;title&gt;Test for Bug 35014 - Modifying UA rules from page JS crashes&lt;/title&gt;
&gt; +&lt;/head&gt;
&gt; +&lt;body&gt;
&gt; +&lt;script&gt;
&gt; +if (window.layoutTestController)
&gt; +    layoutTestController.dumpAsText();
&gt; +
&gt; +window.getMatchedCSSRules(document.body, &quot;&quot;, false)[0].style.marginTop=&quot;200px&quot;;
&gt; +&lt;/script&gt;
&gt; +PASS
&gt; +&lt;/body&gt;
&gt; +&lt;/html&gt;

I don&apos;t like that this test claims to PASS even if it hasn&apos;t even run. Typically the test would replace a &quot;test has not run&quot; message with a &quot;test passed if we do not see a crash&quot; message *after* running the line of code in question.

&gt; -    if (root-&gt;isCSSStyleSheet())
&gt; -        static_cast&lt;CSSStyleSheet*&gt;(root)-&gt;doc()-&gt;updateStyleSelector();
&gt; +    if (root-&gt;isCSSStyleSheet()) {
&gt; +        Document* doc = static_cast&lt;CSSStyleSheet*&gt;(root)-&gt;doc();
&gt; +        if (doc)
&gt; +            doc-&gt;updateStyleSelector();
&gt; +    }

It&apos;s great to add a null check. More idiomatic for WebKit would be:

    if (root-&gt;isCSSStyleSheet()) {
        if (Document* document = static_cast&lt;CSSStyleSheet*&gt;(root)-&gt;doc());
            document-&gt;updateStyleSelector();
    }

r=me, but this could be improved a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225186</commentid>
    <comment_count>5</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2010-05-13 00:33:01 -0700</bug_when>
    <thetext>Committed r59351: &lt;http://trac.webkit.org/changeset/59351&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225188</commentid>
    <comment_count>6</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2010-05-13 00:36:06 -0700</bug_when>
    <thetext>Thank you for reviewing this.

(In reply to comment #4)
&gt; (From update of attachment 55818 [details])
&gt; &gt; +&lt;!doctype html&gt;
&gt; &gt; +&lt;html&gt;
&gt; &gt; +&lt;head&gt;
&gt; &gt; +&lt;title&gt;Test for Bug 35014 - Modifying UA rules from page JS crashes&lt;/title&gt;
&gt; &gt; +&lt;/head&gt;
&gt; &gt; +&lt;body&gt;
&gt; &gt; +&lt;script&gt;
&gt; &gt; +if (window.layoutTestController)
&gt; &gt; +    layoutTestController.dumpAsText();
&gt; &gt; +
&gt; &gt; +window.getMatchedCSSRules(document.body, &quot;&quot;, false)[0].style.marginTop=&quot;200px&quot;;
&gt; &gt; +&lt;/script&gt;
&gt; &gt; +PASS
&gt; &gt; +&lt;/body&gt;
&gt; &gt; +&lt;/html&gt;
&gt; 
&gt; I don&apos;t like that this test claims to PASS even if it hasn&apos;t even run. Typically the test would replace a &quot;test has not run&quot; message with a &quot;test passed if we do not see a crash&quot; message *after* running the line of code in question.

Changed as suggested.

Also, I changed the test such that the marginTop is reset to the original value after testing.

&gt; 
&gt; &gt; -    if (root-&gt;isCSSStyleSheet())
&gt; &gt; -        static_cast&lt;CSSStyleSheet*&gt;(root)-&gt;doc()-&gt;updateStyleSelector();
&gt; &gt; +    if (root-&gt;isCSSStyleSheet()) {
&gt; &gt; +        Document* doc = static_cast&lt;CSSStyleSheet*&gt;(root)-&gt;doc();
&gt; &gt; +        if (doc)
&gt; &gt; +            doc-&gt;updateStyleSelector();
&gt; &gt; +    }
&gt; 
&gt; It&apos;s great to add a null check. More idiomatic for WebKit would be:
&gt; 
&gt;     if (root-&gt;isCSSStyleSheet()) {
&gt;         if (Document* document = static_cast&lt;CSSStyleSheet*&gt;(root)-&gt;doc());
&gt;             document-&gt;updateStyleSelector();
&gt;     }

Changed as suggested.

&gt; 
&gt; r=me, but this could be improved a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315383</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-30 16:26:46 -0800</bug_when>
    <thetext>This change should have no effect now - getMatchedCSSRules no longer provides access to UA rules.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55818</attachid>
            <date>2010-05-12 02:08:39 -0700</date>
            <delta_ts>2010-05-12 11:54:54 -0700</delta_ts>
            <desc>Fix Bug 35014 - Modifying UA rules from page JS crashes</desc>
            <filename>bug-35014-20100512020837.patch</filename>
            <type>text/plain</type>
            <size>3326</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NDBmMjQwYTMyMDkxNWUzMTU3M2VmMWE0NTU2NGNiZTFlOGJlMWZmLi4wZTVhMzRi
ZGNkNjVjNWJhNDYwYTg0ZTM2NmZjZjA3MTYyNTlmMjU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDUtMTIgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBCdWcgMzUwMTQgLSBN
b2RpZnlpbmcgVUEgcnVsZXMgZnJvbSBwYWdlIEpTIGNyYXNoZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDE0CisKKyAgICAgICAgKiBmYXN0L2Nz
cy9tb2RpZnktdWEtcnVsZXMtZnJvbS1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dDogQ29waWVkIGZy
b20gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTEzNjY5Ni1leHBlY3RlZC50eHQuCisg
ICAgICAgICogZmFzdC9jc3MvbW9kaWZ5LXVhLXJ1bGVzLWZyb20tamF2YXNjcmlwdC5odG1sOiBB
ZGRlZC4KKwogMjAxMC0wNS0xMCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwganVzdCByZW1vdmluZyBuZXdsaW5lIGZyb20gLWV4cGVjdGVkLnR4
dCBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9tb2RpZnktdWEtcnVsZXMt
ZnJvbS1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL21vZGlm
eS11YS1ydWxlcy1mcm9tLWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZjIy
ZTlhNDMxYWQwMjcyNzEzYjcxZmRjODc5NDAxNmM4ZWYxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9tb2RpZnktdWEtcnVsZXMtZnJvbS1qYXZhc2NyaXB0LWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9tb2RpZnktdWEtcnVsZXMtZnJvbS1qYXZhc2NyaXB0Lmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9tb2RpZnktdWEtcnVsZXMtZnJvbS1qYXZhc2NyaXB0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDlkNGZmNmU0ZDZiMTMwZDQ2OTNmNDQ4ZTdkYjFiMmJlN2MwMWEzZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL21vZGlmeS11YS1ydWxlcy1mcm9tLWphdmFzY3JpcHQu
aHRtbApAQCAtMCwwICsxLDE1IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
dGl0bGU+VGVzdCBmb3IgQnVnIDM1MDE0IC0gTW9kaWZ5aW5nIFVBIHJ1bGVzIGZyb20gcGFnZSBK
UyBjcmFzaGVzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworCit3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKGRvY3VtZW50LmJvZHksICIiLCBmYWxz
ZSlbMF0uc3R5bGUubWFyZ2luVG9wPSIyMDBweCI7Cis8L3NjcmlwdD4KK1BBU1MKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMWRiZmY1NThlYjdlNTZlNWJjY2E5N2M5ZjRmZmI5ZjZjNTVkMDYxMC4uNjkzZThk
NjI3YmI2MDJiOWRkNmIwMmUwNTY5Y2M2ZDE0ZTdmODQyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0w
NS0xMiAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IEJ1ZyAzNTAxNCAtIE1vZGlmeWlu
ZyBVQSBydWxlcyBmcm9tIHBhZ2UgSlMgY3Jhc2hlcworICAgICAgICBBZGRlZCBhIE5VTEwgY2hl
Y2suCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAx
NAorCisgICAgICAgIFRlc3Q6IGZhc3QvY3NzL21vZGlmeS11YS1ydWxlcy1mcm9tLWphdmFzY3Jp
cHQuaHRtbAorCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkc1N0
eWxlUmVjYWxjKToKKwogMjAxMC0wNS0xMCAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1dlYkNvcmUvY3Nz
L0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA3YzA5ZjkxYzdlNGY2NTE0NGEw
NzQ5NDY3NTJkMDllNWJlMTE3YzRiLi5mNWVmMDRhOTE1YTQ4MjVlOWNiNDBlZGUxMWMxMGYyYTkz
ZWE5MDcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCkBA
IC00ODQsOCArNDg0LDExIEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldE5l
ZWRzU3R5bGVSZWNhbGMoKQogICAgIFN0eWxlQmFzZSogcm9vdCA9IHRoaXM7CiAgICAgd2hpbGUg
KFN0eWxlQmFzZSogcGFyZW50ID0gcm9vdC0+cGFyZW50KCkpCiAgICAgICAgIHJvb3QgPSBwYXJl
bnQ7Ci0gICAgaWYgKHJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvYygpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Cisg
ICAgaWYgKHJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2Mg
PSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvYygpOworICAgICAgICBpZiAo
ZG9jKQorICAgICAgICAgICAgZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgfQogfQog
CiBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGlu
dCBwcm9wZXJ0eUlEKSBjb25zdAo=
</data>
<flag name="review"
          id="40096"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>