Skip to content

Commit

Permalink
[giow] (1) Make WebSocket silently convert isolated surrogated to U+F…
Browse files Browse the repository at this point in the history
…FFD rather than throwing an exception. This will result in data corruption when a user types in astral-plane characters that get truncated by naiive script half-way through, rather than crashing the application.

Fixing https://www.w3.org/Bugs/Public/show_bug.cgi?id=16157
Affected topics: DOM APIs, WebSocket API

git-svn-id: http://svn.whatwg.org/webapps@7084 340c8d12-0b0e-0410-8428-c7bf67bfef74
  • Loading branch information
Hixie committed May 2, 2012
1 parent 7a43ff2 commit a817b04
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 37 deletions.
40 changes: 28 additions & 12 deletions complete.html
Expand Up @@ -3988,7 +3988,10 @@ <h4 id=dependencies><span class=secno>2.2.2 </span>Dependencies</h4>
property</dfn>, <dfn id=support-named-properties>support named properties</dfn>,
<dfn id=supported-property-names>supported property names</dfn>, <dfn id=determine-the-value-of-a-named-property>determine the value of a
named property</dfn>, <dfn id=platform-array-objects>platform array objects</dfn>, and <dfn id=dfn-read-only-array title=dfn-read-only-array>read only</dfn> (when applied to
arrays) are used as defined in the Web IDL specification.</p>
arrays) are used as defined in the Web IDL specification. The
algorithm to <dfn id=convert-a-domstring-to-a-sequence-of-unicode-characters>convert a DOMString to a sequence of Unicode
characters</dfn> is similarly that defined in the Web IDL
specification.</p>

<p id=float-nan>Except where otherwise specified, if an IDL
attribute that is a floating point number type (<code title="">double</code>) is assigned an Infinity or Not-a-Number
Expand Down Expand Up @@ -81320,14 +81323,27 @@ <h4 id=the-websocket-interface><span class=secno>10.3.2 </span>The <code><a href
<code><a href=#invalidaccesserror>InvalidAccessError</a></code> exception and abort these
steps.</li>

<li><p>If the method's second argument has any isolated surrogates,
then throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception and abort these
steps. <a href=#refsUNICODE>[UNICODE]</a></li>
<li>

<p>If the method's second argument is present, then run these
substeps:</p>

<ol><li><p>Let <var title="">raw reason</var> be the method's second
argument.</li>

<li><p>If the method's second argument is present, then let <var title="">reason</var> be the result of encoding that argument as
UTF-8. If <var title="">reason</var> is longer than 123 bytes, then
throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception and abort these steps.
<a href=#refsRFC3629>[RFC3629]</a></li>
<li><p>Let <var title="">Unicode reason</var> be the result of
<a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence of Unicode
characters">converting <var title="">raw reason</var> to a
sequence of Unicode characters</a>.</li>

<li><p>Let <var title="">reason</var> be the result of encoding
<var title="">Unicode reason</var> as UTF-8.</li>

<li><p>If <var title="">reason</var> is longer than 123 bytes,
then throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception and abort these
steps. <a href=#refsRFC3629>[RFC3629]</a></li>

</ol></li>

<li><p>Run the first matching steps from the following list:</p>

Expand Down Expand Up @@ -81475,10 +81491,10 @@ <h4 id=the-websocket-interface><span class=secno>10.3.2 </span>The <code><a href

<dd>

<p>If the <var title="">data</var> argument has any isolated
surrogates, then throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception. If
<i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and the string has
no isolated surrogates, and <i title="the WebSocket closing
<p>Let <var title="">data</var> be the result of <a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence of Unicode
characters">converting the <var title="">data</var> argument to a
sequence of Unicode characters</a>. If <i><a href=#the-websocket-connection-is-established>the WebSocket
connection is established</a></i> and <i title="the WebSocket closing
handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet
started</a></i>, then the user agent must <i>send a WebSocket
Message</i> comprised of <var title="">data</var> using a text
Expand Down
40 changes: 28 additions & 12 deletions index
Expand Up @@ -3988,7 +3988,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
property</dfn>, <dfn id=support-named-properties>support named properties</dfn>,
<dfn id=supported-property-names>supported property names</dfn>, <dfn id=determine-the-value-of-a-named-property>determine the value of a
named property</dfn>, <dfn id=platform-array-objects>platform array objects</dfn>, and <dfn id=dfn-read-only-array title=dfn-read-only-array>read only</dfn> (when applied to
arrays) are used as defined in the Web IDL specification.</p>
arrays) are used as defined in the Web IDL specification. The
algorithm to <dfn id=convert-a-domstring-to-a-sequence-of-unicode-characters>convert a DOMString to a sequence of Unicode
characters</dfn> is similarly that defined in the Web IDL
specification.</p>

<p id=float-nan>Except where otherwise specified, if an IDL
attribute that is a floating point number type (<code title="">double</code>) is assigned an Infinity or Not-a-Number
Expand Down Expand Up @@ -81320,14 +81323,27 @@ interface <dfn id=websocket>WebSocket</dfn> : <a href=#eventtarget>EventTarget</
<code><a href=#invalidaccesserror>InvalidAccessError</a></code> exception and abort these
steps.</li>

<li><p>If the method's second argument has any isolated surrogates,
then throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception and abort these
steps. <a href=#refsUNICODE>[UNICODE]</a></li>
<li>

<p>If the method's second argument is present, then run these
substeps:</p>

<ol><li><p>Let <var title="">raw reason</var> be the method's second
argument.</li>

<li><p>If the method's second argument is present, then let <var title="">reason</var> be the result of encoding that argument as
UTF-8. If <var title="">reason</var> is longer than 123 bytes, then
throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception and abort these steps.
<a href=#refsRFC3629>[RFC3629]</a></li>
<li><p>Let <var title="">Unicode reason</var> be the result of
<a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence of Unicode
characters">converting <var title="">raw reason</var> to a
sequence of Unicode characters</a>.</li>

<li><p>Let <var title="">reason</var> be the result of encoding
<var title="">Unicode reason</var> as UTF-8.</li>

<li><p>If <var title="">reason</var> is longer than 123 bytes,
then throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception and abort these
steps. <a href=#refsRFC3629>[RFC3629]</a></li>

</ol></li>

<li><p>Run the first matching steps from the following list:</p>

Expand Down Expand Up @@ -81475,10 +81491,10 @@ socket.onopen = function () {

<dd>

<p>If the <var title="">data</var> argument has any isolated
surrogates, then throw a <code><a href=#syntaxerror>SyntaxError</a></code> exception. If
<i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and the string has
no isolated surrogates, and <i title="the WebSocket closing
<p>Let <var title="">data</var> be the result of <a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence of Unicode
characters">converting the <var title="">data</var> argument to a
sequence of Unicode characters</a>. If <i><a href=#the-websocket-connection-is-established>the WebSocket
connection is established</a></i> and <i title="the WebSocket closing
handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet
started</a></i>, then the user agent must <i>send a WebSocket
Message</i> comprised of <var title="">data</var> using a text
Expand Down
46 changes: 33 additions & 13 deletions source
Expand Up @@ -2945,7 +2945,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
<dfn>supported property names</dfn>, <dfn>determine the value of a
named property</dfn>, <dfn>platform array objects</dfn>, and <dfn
title="dfn-read-only-array">read only</dfn> (when applied to
arrays) are used as defined in the Web IDL specification.</p>
arrays) are used as defined in the Web IDL specification. The
algorithm to <dfn>convert a DOMString to a sequence of Unicode
characters</dfn> is similarly that defined in the Web IDL
specification.</p>

<p id="float-nan">Except where otherwise specified, if an IDL
attribute that is a floating point number type (<code
Expand Down Expand Up @@ -94491,15 +94494,31 @@ interface <dfn>WebSocket</dfn> : <span>EventTarget</span> {
<code>InvalidAccessError</code> exception and abort these
steps.</p></li>

<li><p>If the method's second argument has any isolated surrogates,
then throw a <code>SyntaxError</code> exception and abort these
steps. <a href="#refsUNICODE">[UNICODE]</a></p></li>
<li>

<p>If the method's second argument is present, then run these
substeps:</p>

<ol>

<li><p>Let <var title="">raw reason</var> be the method's second
argument.</p></li>

<li><p>If the method's second argument is present, then let <var
title="">reason</var> be the result of encoding that argument as
UTF-8. If <var title="">reason</var> is longer than 123 bytes, then
throw a <code>SyntaxError</code> exception and abort these steps.
<a href="#refsRFC3629">[RFC3629]</a></p></li>
<li><p>Let <var title="">Unicode reason</var> be the result of
<span title="convert a DOMString to a sequence of Unicode
characters">converting <var title="">raw reason</var> to a
sequence of Unicode characters</span>.</p></li>

<li><p>Let <var title="">reason</var> be the result of encoding
<var title="">Unicode reason</var> as UTF-8.</p></li>

<li><p>If <var title="">reason</var> is longer than 123 bytes,
then throw a <code>SyntaxError</code> exception and abort these
steps. <a href="#refsRFC3629">[RFC3629]</a></p></li>

</ol>

</li>

<li><p>Run the first matching steps from the following list:</p>

Expand Down Expand Up @@ -94687,10 +94706,11 @@ socket.onopen = function () {

<dd>

<p>If the <var title="">data</var> argument has any isolated
surrogates, then throw a <code>SyntaxError</code> exception. If
<i>the WebSocket connection is established</i>, and the string has
no isolated surrogates, and <i title="the WebSocket closing
<p>Let <var title="">data</var> be the result of <span
title="convert a DOMString to a sequence of Unicode
characters">converting the <var title="">data</var> argument to a
sequence of Unicode characters</span>. If <i>the WebSocket
connection is established</i> and <i title="the WebSocket closing
handshake is started">the WebSocket closing handshake has not yet
started</i>, then the user agent must <i>send a WebSocket
Message</i> comprised of <var title="">data</var> using a text
Expand Down

0 comments on commit a817b04

Please sign in to comment.