aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-06-30 13:12:10 -0700
committerAlon Zakai <alonzakai@gmail.com>2014-06-30 13:12:10 -0700
commitf5b6f032baef8a9ee397a24e49cd4512aa45681e (patch)
treea67d8430c4c889f8b71c2d6f21575c7da08c5ac2
parentf963a3566b0fab2df7a0dce0627e2098dba87ca5 (diff)
fix uninitialized structure data in ignored touchmove events; fixes #2466
-rw-r--r--src/library_sdl.js22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js
index 7e61cbbb..4857c672 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -778,13 +778,18 @@ var LibrarySDL = {
// to automatically query for events, query for joystick events.
SDL.queryJoysticks();
}
- if (SDL.events.length === 0) return 0;
if (ptr) {
- SDL.makeCEvent(SDL.events.shift(), ptr);
+ while (SDL.events.length > 0) {
+ if (SDL.makeCEvent(SDL.events.shift(), ptr) !== false) return 1;
+ }
+ return 0;
+ } else {
+ // XXX: somewhat risky in that we do not check if the event is real or not (makeCEvent returns false) if no pointer supplied
+ return SDL.events.length > 0;
}
- return 1;
},
+ // returns false if the event was determined to be irrelevant
makeCEvent: function(event, ptr) {
if (typeof event === 'number') {
// This is a pointer to a native C event that was SDL_PushEvent'ed
@@ -873,7 +878,7 @@ var LibrarySDL = {
var dx = x - lx;
var dy = y - ly;
if (touch['deviceID'] === undefined) touch.deviceID = SDL.TOUCH_DEFAULT_ID;
- if (dx === 0 && dy === 0 && event.type === 'touchmove') return; // don't send these if nothing happened
+ if (dx === 0 && dy === 0 && event.type === 'touchmove') return false; // don't send these if nothing happened
{{{ makeSetValue('ptr', C_STRUCTS.SDL_TouchFingerEvent.type, 'SDL.DOMEventToSDLEvent[event.type]', 'i32') }}};
{{{ makeSetValue('ptr', C_STRUCTS.SDL_TouchFingerEvent.timestamp, '_SDL_GetTicks()', 'i32') }}};
{{{ makeSetValue('ptr', C_STRUCTS.SDL_TouchFingerEvent.touchId, 'touch.deviceID', 'i64') }}};
@@ -1779,9 +1784,12 @@ var LibrarySDL = {
var event = SDL.events[index];
var type = SDL.DOMEventToSDLEvent[event.type];
if (from <= type && type <= to) {
- SDL.makeCEvent(event, events);
- SDL.events.splice(index, 1);
- retrievedEventCount++;
+ if (SDL.makeCEvent(event, events) === false) {
+ index++;
+ } else {
+ SDL.events.splice(index, 1);
+ retrievedEventCount++;
+ }
} else {
index++;
}