<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[246072] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/246072">246072</a></dd>
<dt>Author</dt> <dd>krollin@apple.com</dd>
<dt>Date</dt> <dd>2019-06-04 10:59:51 -0700 (Tue, 04 Jun 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Fix 32-bit/64-bit mismatch in PointerCaptureController::elementWasRemoved
https://bugs.webkit.org/show_bug.cgi?id=198501
<rdar://problem/51370464>

Reviewed by Chris Dumez.

keyAndValue.key is assigned to pointerId. KeyAndValue.key is a
int64_t, whereas pointerId is a PointerID, aka int32_t. This mismatch
is normally just a warning, but breaks builds where warnings are
treated as errors.

This issue is not encountered in most builds because the warning is
disabled in the majority of build configurations. But there are some
where the warning is not disabled, and so those builds break.

Address this conversion error/warning by explicitly casting
keyAndValue.key to a PointerID (and adding a debug check to make sure
the cast is OK).

No new tests -- no new functionality.

* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::elementWasRemoved):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepagePointerCaptureControllercpp">trunk/Source/WebCore/page/PointerCaptureController.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (246071 => 246072)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-06-04 17:56:59 UTC (rev 246071)
+++ trunk/Source/WebCore/ChangeLog      2019-06-04 17:59:51 UTC (rev 246072)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2019-06-04  Keith Rollin  <krollin@apple.com>
+
+        Fix 32-bit/64-bit mismatch in PointerCaptureController::elementWasRemoved
+        https://bugs.webkit.org/show_bug.cgi?id=198501
+        <rdar://problem/51370464>
+
+        Reviewed by Chris Dumez.
+
+        keyAndValue.key is assigned to pointerId. KeyAndValue.key is a
+        int64_t, whereas pointerId is a PointerID, aka int32_t. This mismatch
+        is normally just a warning, but breaks builds where warnings are
+        treated as errors.
+
+        This issue is not encountered in most builds because the warning is
+        disabled in the majority of build configurations. But there are some
+        where the warning is not disabled, and so those builds break.
+
+        Address this conversion error/warning by explicitly casting
+        keyAndValue.key to a PointerID (and adding a debug check to make sure
+        the cast is OK).
+
+        No new tests -- no new functionality.
+
+        * page/PointerCaptureController.cpp:
+        (WebCore::PointerCaptureController::elementWasRemoved):
+
</ins><span class="cx"> 2019-06-02  Antoine Quint  <graouts@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [Pointer Events] Expose navigator.maxTouchPoints
</span></span></pre></div>
<a id="trunkSourceWebCorepagePointerCaptureControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PointerCaptureController.cpp (246071 => 246072)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PointerCaptureController.cpp   2019-06-04 17:56:59 UTC (rev 246071)
+++ trunk/Source/WebCore/page/PointerCaptureController.cpp      2019-06-04 17:59:51 UTC (rev 246072)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include "EventTarget.h"
</span><span class="cx"> #include "Page.h"
</span><span class="cx"> #include "PointerEvent.h"
</span><ins>+#include <wtf/CheckedArithmetic.h>
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(POINTER_LOCK)
</span><span class="cx"> #include "PointerLockController.h"
</span><span class="lines">@@ -133,7 +134,8 @@
</span><span class="cx">             // When the pointer capture target override is no longer connected, the pending pointer capture target override and pointer capture target
</span><span class="cx">             // override nodes SHOULD be cleared and also a PointerEvent named lostpointercapture corresponding to the captured pointer SHOULD be fired
</span><span class="cx">             // at the document.
</span><del>-            auto pointerId = keyAndValue.key;
</del><ins>+            ASSERT(WTF::isInBounds<PointerID>(keyAndValue.key));
+            auto pointerId = static_cast<PointerID>(keyAndValue.key);
</ins><span class="cx">             auto pointerType = capturingData.pointerType;
</span><span class="cx">             releasePointerCapture(&element, pointerId);
</span><span class="cx">             element.document().enqueueDocumentEvent(PointerEvent::create(eventNames().lostpointercaptureEvent, pointerId, pointerType));
</span></span></pre>
</div>
</div>

</body>
</html>