<html>
<head>
<base href="https://bugs.webkit.org/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - [WebRTC] SDP sess-id in the "o=" line should be a value between 0 and LLONG_MAX."
href="https://bugs.webkit.org/show_bug.cgi?id=169681">169681</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>[WebRTC] SDP sess-id in the "o=" line should be a value between 0 and LLONG_MAX.
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr>
<tr>
<th>Product</th>
<td>WebKit
</td>
</tr>
<tr>
<th>Version</th>
<td>WebKit Nightly Build
</td>
</tr>
<tr>
<th>Hardware</th>
<td>Unspecified
</td>
</tr>
<tr>
<th>OS</th>
<td>Unspecified
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>Normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P2
</td>
</tr>
<tr>
<th>Component</th>
<td>WebCore Misc.
</td>
</tr>
<tr>
<th>Assignee</th>
<td>webkit-unassigned@lists.webkit.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>clopez@igalia.com
</td>
</tr>
<tr>
<th>CC</th>
<td>alex@igalia.com, bugs-noreply@webkitgtk.org
</td>
</tr></table>
<p>
<div>
<pre>For the origin ("o=") line of the SDP
o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
RFC 3264 says:
The numeric value of the session id and version in the o line MUST be representable with a 64 bit signed integer.
The initial value of the version MUST be less than (2**62)-1, to avoid rollovers.
RFC 4566 defines both values as:
sess-id = 1*DIGIT
;should be unique for this username/host
sess-version = 1*DIGIT
According to the ABNF grammar defined in RFC 5234:
1*DIGIT means at least one ([1-inf]) numeric characters [0-9].
So, this means this values should be an integer value >= 0.
The combination says only values from 0 - 2^63-1 pass both tests for the session-id and values from 0 - 2^62-1 for the version.
Therefore I understand the following:
- We should use int64_t for representing both values (sess-id and sess-version).
- The session-id value generated must be an integer inside [0 - 2^63-1]
- The version value generated must be an integer inside [0 - 2^62-1]
Right now we are using uint_64t for the session id, and for the initial session id value we generate a random number that sometimes exceeds LLONG_MAX.
And when that happens firefox rejects our SDP offer.
I observed that firefox gives this fatal error on AppRTC when we generate a session-id bigger than LLONG_MAX
setRemoteDescription: InvalidSessionDescriptionError: Failed to parse SDP: SDP Parse Error on line 2: Invalid owner session id specified for o=.
References:
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=861895#c5">https://bugzilla.mozilla.org/show_bug.cgi?id=861895#c5</a>
<a href="https://bugs.chromium.org/p/webrtc/issues/detail?id=1628#c8">https://bugs.chromium.org/p/webrtc/issues/detail?id=1628#c8</a></pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>