<?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>113377</bug_id>
          
          <creation_ts>2013-03-27 02:06:22 -0700</creation_ts>
          <short_desc>[Chromium] REGRESSION(r88030): Right-click on invalid form controls unexpectedly dispatches &apos;invalid&apos; events</short_desc>
          <delta_ts>2013-03-28 14:45:13 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864317</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-03-27 02:06:22 -0700</bug_when>
    <thetext>https://code.google.com/p/chromium/issues/detail?id=126386 (Note: this report doesn&apos;t mention possibility of crashes.)
http://trac.webkit.org/changeset/88030

In the preparation code of context menu,

        HTMLFormElement* form = selectedFrame-&gt;selection()-&gt;currentForm();
        if (form &amp;&amp; form-&gt;checkValidity() &amp;&amp; r.innerNonSharedNode()-&gt;hasTagName(HTMLNames::inputTag)) {
            HTMLInputElement* selectedElement = static_cast&lt;HTMLInputElement*&gt;(r.innerNonSharedNode());
            if (selectedElement) {
                WebSearchableFormData ws = WebSearchableFormData(WebFormElement(form), WebInputElement(selectedElement));

form-&gt;checkValidity() can dispatch &apos;invalid&apos; events, and the &apos;form&apos; object can be removed in event handlers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864333</commentid>
    <comment_count>1</comment_count>
      <attachid>195252</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-03-27 02:46:52 -0700</bug_when>
    <thetext>Created attachment 195252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864334</commentid>
    <comment_count>2</comment_count>
      <attachid>195252</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-03-27 02:48:43 -0700</bug_when>
    <thetext>Comment on attachment 195252
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=195252&amp;action=review

&gt; Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:341
&gt; -        if (form &amp;&amp; form-&gt;checkValidity() &amp;&amp; r.innerNonSharedNode()-&gt;hasTagName(HTMLNames::inputTag)) {
&gt; +        if (form &amp;&amp; r.innerNonSharedNode()-&gt;hasTagName(HTMLNames::inputTag)) {

I think we have no reason to call checkValidity here, and functions dispatching events should not be called during context menu preparation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865154</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-03-27 21:40:42 -0700</bug_when>
    <thetext>Ah, I found this didn&apos;t cause use-after-free.  If form-&gt;checkValidity() dispatches &apos;invalid&apos; events, it returns false. So &apos;form&apos; won&apos;t be accessed in such case. If form-&gt;checkValidity() returns true, it won&apos;t dispatch events and accessing &apos;form&apos; is safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865816</commentid>
    <comment_count>4</comment_count>
      <attachid>195252</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-28 14:45:10 -0700</bug_when>
    <thetext>Comment on attachment 195252
Patch

Clearing flags on attachment: 195252

Committed r147161: &lt;http://trac.webkit.org/changeset/147161&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865817</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-28 14:45:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195252</attachid>
            <date>2013-03-27 02:46:52 -0700</date>
            <delta_ts>2013-03-28 14:45:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113377-20130327184234.patch</filename>
            <type>text/plain</type>
            <size>1821</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDdkODcyYjVkN2Y1OTcwNzA2MTU2Yzk0Y2FjYzlkNzRhNjRlYmZjMzUuLjEwNGNlOTUzNWVkZDM5
NWVjOWEyNjY2ODRhOTFjZWRiZDRkOWYwZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMjcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUkVHUkVTU0lPTihyODgwMzApOiBSaWdodC1jbGlj
ayBvbiBpbnZhbGlkIGZvcm0gY29udHJvbHMgdW5leHBlY3RlZGx5IGRpc3BhdGNoZXMgJ2ludmFs
aWQnIGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzMzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29u
dGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAg
ICAgIFdlIGRvbid0IG5lZWQgdG8gY2FsbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkg
aGVyZS4KKwogMjAxMy0wMy0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBIZWFwLXVzZS1hZnRlci1mcmVlIHJlZ3Jlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCmluZGV4IGU3Nzc2
NGFmZTVkMTlmNjdmNjIxNmVlZDM4ZGFmODA4MzVlYTliOGMuLjBjY2ViODFhMTk5YWRmODZjOTU3
NTkzMGEzMDZlODgwZWUzNjAwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZy
b21EZWZhdWx0SXRlbXMoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgSFRNTEZv
cm1FbGVtZW50KiBmb3JtID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCktPmN1cnJlbnRGb3Jt
KCk7Ci0gICAgICAgIGlmIChmb3JtICYmIGZvcm0tPmNoZWNrVmFsaWRpdHkoKSAmJiByLmlubmVy
Tm9uU2hhcmVkTm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7CisgICAg
ICAgIGlmIChmb3JtICYmIHIuaW5uZXJOb25TaGFyZWROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjppbnB1dFRhZykpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIHNlbGVjdGVk
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihyLmlubmVyTm9uU2hhcmVk
Tm9kZSgpKTsKICAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHsKICAgICAgICAgICAg
ICAgICBXZWJTZWFyY2hhYmxlRm9ybURhdGEgd3MgPSBXZWJTZWFyY2hhYmxlRm9ybURhdGEoV2Vi
Rm9ybUVsZW1lbnQoZm9ybSksIFdlYklucHV0RWxlbWVudChzZWxlY3RlZEVsZW1lbnQpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>