Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1065)

Unified Diff: third_party/WebKit/Source/core/events/WheelEvent.cpp

Issue 2246923003: Avoid integer overflow in WheelEvent constructor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/events/WheelEvent.cpp
diff --git a/third_party/WebKit/Source/core/events/WheelEvent.cpp b/third_party/WebKit/Source/core/events/WheelEvent.cpp
index 2d23921d8361523c34697fb0d943c77e2c06f68b..689d56af9011e5bd9c14729f85f1aef5f4a778e9 100644
--- a/third_party/WebKit/Source/core/events/WheelEvent.cpp
+++ b/third_party/WebKit/Source/core/events/WheelEvent.cpp
@@ -34,6 +34,14 @@ inline static unsigned convertDeltaMode(const PlatformWheelEvent& event)
return event.granularity() == ScrollByPageWheelEvent ? WheelEvent::kDomDeltaPage : WheelEvent::kDomDeltaPixel;
}
+// Negate a long value without integer overflow.
+inline static long negateIfPossible(long value)
+{
+ if (value == LONG_MIN)
+ return value;
+ return -value;
+}
+
WheelEvent* WheelEvent::create(const PlatformWheelEvent& event, AbstractView* view)
{
return new WheelEvent(FloatPoint(event.wheelTicksX(), event.wheelTicksY()), FloatPoint(event.deltaX(), event.deltaY()),
@@ -63,8 +71,8 @@ WheelEvent::WheelEvent()
WheelEvent::WheelEvent(const AtomicString& type, const WheelEventInit& initializer)
: MouseEvent(type, initializer)
, m_wheelDelta(initializer.wheelDeltaX() ? initializer.wheelDeltaX() : -initializer.deltaX(), initializer.wheelDeltaY() ? initializer.wheelDeltaY() : -initializer.deltaY())
- , m_deltaX(initializer.deltaX() ? initializer.deltaX() : -initializer.wheelDeltaX())
- , m_deltaY(initializer.deltaY() ? initializer.deltaY() : -initializer.wheelDeltaY())
+ , m_deltaX(initializer.deltaX() ? initializer.deltaX() : negateIfPossible(initializer.wheelDeltaX()))
+ , m_deltaY(initializer.deltaY() ? initializer.deltaY() : negateIfPossible(initializer.wheelDeltaY()))
, m_deltaZ(initializer.deltaZ())
, m_deltaMode(initializer.deltaMode())
, m_resendingPluginId(-1)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698