Skip to content
Permalink
Browse files

[giow] (1) Make WebSocket silently convert isolated surrogated to U+F…

…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 a817b04f4c262645ef996a5176b4a3f0a3a11928
Showing with 89 additions and 37 deletions.
  1. +28 −12 complete.html
  2. +28 −12 index
  3. +33 −13 source
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
<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>


<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
40 index
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
<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>


<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
46 source
@@ -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
<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>


<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

0 comments on commit a817b04

Please sign in to comment.