<?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>41844</bug_id>
          
          <creation_ts>2010-07-08 02:51:44 -0700</creation_ts>
          <short_desc>JavaScript parser violates ECMA automatic semicolon insertion rule</short_desc>
          <delta_ts>2010-07-08 16:24:04 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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 Hansen">kent.hansen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>248113</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-07-08 02:51:44 -0700</bug_when>
    <thetext>The following snippet:

    JSGlobalContextRef context = JSGlobalContextCreateInGroup(NULL, NULL);
    const char *script = &quot;if (0)&quot;;
    JSValueRef val = JSEvaluateScript(context, JSStringCreateWithUTF8CString(script), NULL, NULL, 1, NULL);
    JSStringRef str = JSValueToStringCopy(context, val, NULL);
    char buf[256];
    JSStringGetUTF8CString(str, buf, 256);
    printf(&quot;%s\n&quot;, buf);

prints &quot;undefined&quot;.

ECMA-262 5th ed, section 7.9.1 &quot;Rules of automatic semicolon&quot;, states: &quot;When, as the program is parsed from left to right, the end of the input stream of tokens is encountered and the parser is unable to parse the input token stream as a single complete ECMAScript Program, then a semicolon is automatically inserted at the end of the input stream.&quot;

So far, so good.
But then the above is followed by: &quot;However, there is an additional overriding condition on the preceding rules: a semicolon is never inserted automatically if the semicolon would then be parsed as an empty statement [...].&quot;

When the program is &quot;if (0)&quot;, as in the above snippet, per the above rule, a semicolon should _not_ automatically be inserted. Instead a SyntaxError should be thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248583</commentid>
    <comment_count>1</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-08 15:18:59 -0700</bug_when>
    <thetext>This isn&apos;t automatic semicolon insertion for the usual reasons eg.
{ if (0) }
will fail to parse.

The parse success is due to the lexer automatically inserting a semicolon to the end of a script if it has not seen a line terminator when it reaches the end.  I&apos;m no sure what the specific reason for it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248601</commentid>
    <comment_count>2</comment_count>
      <attachid>60976</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-08 15:56:09 -0700</bug_when>
    <thetext>Created attachment 60976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248609</commentid>
    <comment_count>3</comment_count>
      <attachid>60976</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-08 16:10:02 -0700</bug_when>
    <thetext>Comment on attachment 60976
Patch

What’s the chance that some real world WebKit-only content depends on the broken behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248613</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-08 16:14:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 60976 [details])
&gt; What’s the chance that some real world WebKit-only content depends on the broken behavior?

Fairly low -- no other browser does this, and it depends on having the incorrect code as the very last thing in the file (eg. no trailing new lines or other syntax)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248620</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-08 16:24:04 -0700</bug_when>
    <thetext>Committed r62862</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60976</attachid>
            <date>2010-07-08 15:56:09 -0700</date>
            <delta_ts>2010-07-08 16:11:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41844-20100708155608.patch</filename>
            <type>text/plain</type>
            <size>4328</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2NWM5MjQyOTE4ZDE0YThlYzBhMmJiMjI5Mzk3MmQxZTZjM2IzOTA3Li4w
OTMyYmUzYzRlODkzNGJmZjIwYzU2NTdiNmZmZTBhZmZhMmFmYzFkIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsMTggQEAKIDIwMTAtMDctMDggIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBKYXZhU2Ny
aXB0IHBhcnNlciB2aW9sYXRlcyBFQ01BIGF1dG9tYXRpYyBzZW1pY29sb24gaW5zZXJ0aW9uIHJ1
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxODQ0
CisKKyAgICAgICAgUmVtb3ZlICh2ZXJ5KSBvbGQgYW5kIGJvZ3VzIGxvZ2ljIHRoYXQgYXV0b21h
dGljYWxseSBpbnNlcnRlZCBhIHNlbWljb2xvbgorICAgICAgICBhdCB0aGUgZW5kIG9mIGEgc2Ny
aXB0J3Mgc291cmNlLgorCisgICAgICAgICogcGFyc2VyL0xleGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OmxleCk6CisKKzIwMTAtMDctMDggIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxl
LmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNvbi4KIAogICAgICAgICBU
aWR5IHVwIHRoZSBsZXhlcgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVy
LmNwcCBiL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5kZXggMjNlNGYxMmZmYTk4
NTAxM2ViMjhmYTY2MWYwOGQzMDZmNjE4YzQwYy4uMGNhYzc4NTZiZjBjNWY4ODI4YWU2MWE3NDQ3
MjRmZjNiYTQ5MzA4NSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCkBAIC00ODAsMTMgKzQ4MCw4
IEBAIHN0YXJ0OgogCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwogCi0g
ICAgaWYgKFVOTElLRUxZKG1fY3VycmVudCA9PSAtMSkpIHsKLSAgICAgICAgaWYgKCFtX3Rlcm1p
bmF0b3IgJiYgIW1fZGVsaW1pdGVkICYmICFtX2lzUmVwYXJzaW5nKSB7Ci0gICAgICAgICAgICAv
LyBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbiBpZiBwcm9ncmFtIGluY29tcGxldGUKLSAg
ICAgICAgICAgIGdvdG8gZG9uZVNlbWljb2xvbjsKLSAgICAgICAgfQorICAgIGlmIChVTkxJS0VM
WShtX2N1cnJlbnQgPT0gLTEpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBtX2Rl
bGltaXRlZCA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzRlMTEyNjEyNDEzNDhlNWRiYzEyOGM4Njk5MjAz
YmMzM2YxZWI5Mi4uMTAyZmUyODFhN2JiZDY3MTc2YTljYTA0NjNhOTU5YzgzZTU4N2ExMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSw1ICsxLDE5IEBACiAyMDEwLTA3LTA4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBs
ZS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SmF2YVNjcmlwdCBwYXJzZXIgdmlvbGF0ZXMgRUNNQSBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2Vy
dGlvbiBydWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MTg0NAorCisgICAgICAgIEFkZCB0ZXN0Y2FzZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBh
dXRvbWF0aWNhbGx5IGluc2VydCBhIHNlbWljb2xvbgorICAgICAgICBhdCB0aGUgZW5kIG9mIGEg
c2NyaXB0LgorCisgICAgICAgICogZmFzdC9qcy9uby1zZW1pLWluc2VydGlvbi1hdC1lbmQtb2Yt
c2NyaXB0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9uby1zZW1pLWlu
c2VydGlvbi1hdC1lbmQtb2Ytc2NyaXB0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMv
c2NyaXB0LXRlc3RzL25vLXNlbWktaW5zZXJ0aW9uLWF0LWVuZC1vZi1zY3JpcHQuanM6IEFkZGVk
LgorCisyMDEwLTA3LTA4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKICAgICAg
ICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCiAKICAgICAgICAgTWFrZSBvYmplY3Qt
bGl0ZXJhbCBwYXJzaW5nIGNvbmZvcm1hbnQgd2l0aCB0aGUgc3BlYy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvanMvbm8tc2VtaS1pbnNlcnRpb24tYXQtZW5kLW9mLXNjcmlwdC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL25vLXNlbWktaW5zZXJ0aW9uLWF0LWVuZC1v
Zi1zY3JpcHQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5Y2Q4NzgzNDI4OGJhZDc2OGE4Mjli
Nzg3M2YwN2YwZTI2MGM5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pz
L25vLXNlbWktaW5zZXJ0aW9uLWF0LWVuZC1vZi1zY3JpcHQtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMTEgQEAKK1Rlc3QgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0
IHNlbWljb2xvbnMgYXQgdGhlIGVuZCBvZiBhIHNjcmlwdC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgaWYgKDApIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogUGFy
c2UgZXJyb3IuCitQQVNTIGV2YWwoJ2lmICgwKScpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJv
cjogUGFyc2UgZXJyb3IuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9uby1zZW1pLWluc2Vy
dGlvbi1hdC1lbmQtb2Ytc2NyaXB0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL25vLXNlbWkt
aW5zZXJ0aW9uLWF0LWVuZC1vZi1zY3JpcHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWJlNWEzMDhlNjll
MjE1ZjAxMDA2NGM3MWVlZjBlMDE3MjE3MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9qcy9uby1zZW1pLWluc2VydGlvbi1hdC1lbmQtb2Ytc2NyaXB0Lmh0bWwKQEAgLTAs
MCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9uby1z
ZW1pLWluc2VydGlvbi1hdC1lbmQtb2Ytc2NyaXB0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL25vLXNlbWktaW5z
ZXJ0aW9uLWF0LWVuZC1vZi1zY3JpcHQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10
ZXN0cy9uby1zZW1pLWluc2VydGlvbi1hdC1lbmQtb2Ytc2NyaXB0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNm
ZjlmZTM5ZGY2YjE1Y2FmMDI2ZTgyYTk1ZDkxZmNkY2JkYzM3YjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9uby1zZW1pLWluc2VydGlvbi1hdC1l
bmQtb2Ytc2NyaXB0LmpzCkBAIC0wLDAgKzEsNiBAQAorZGVzY3JpcHRpb24oIlRlc3QgdG8gbWFr
ZSBzdXJlIHdlIGRvbid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IHNlbWljb2xvbnMgYXQgdGhlIGVu
ZCBvZiBhIHNjcmlwdC4iKTsKKworc2hvdWxkVGhyb3coImlmICgwKSIpOworc2hvdWxkVGhyb3co
ImV2YWwoJ2lmICgwKScpIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="48858"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>