Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Fixed bug #1056 (Frequent crashes in Touch events by simply touching …

…the screen)

 Joseba Garc?a Echebarria      2010-12-15 01:55:22 PST

I believe the crash is caused by a check not being performed on wether an
SDL_Touch element is NULL before using it in the SDL_SendTouchMotion function
in src/events/SDL_touch.c around line 400.
Judging from the rest of the code, there's a missing

    if (!touch) {
        return 0;
    }

before using "touch" as SDL_GetFinger(), SDL_GetFingerIndexId() use
touch->num_fingers without checking.

I can attach a patch if you like. It seems pretty straightforward, though.

I have yet to discover why touch is being returned as NULL as this error is
only triggered when an actual gesture has been performed, maybe something
related to SDL_AddTouch()?
  • Loading branch information
slouken committed Jan 28, 2011
1 parent 58af890 commit c10326ceacae9bbad833d5a4853de6499a1bce19
Showing with 10 additions and 6 deletions.
  1. +10 −6 src/events/SDL_touch.c
@@ -397,15 +397,16 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, int relative,
float xin, float yin, float pressurein)
{
int index = SDL_GetTouchIndexId(id);
SDL_Touch *touch = SDL_GetTouch(id);
SDL_Finger *finger = SDL_GetFinger(touch,fingerid);
SDL_Touch *touch;
SDL_Finger *finger;
int posted;
Sint16 xrel, yrel;
float x_max = 0, y_max = 0;
Uint16 x;
Uint16 y;
Uint16 pressure;
Uint16 x;
Uint16 y;
Uint16 pressure;

touch = SDL_GetTouch(id);
if (!touch) {
return SDL_TouchNotFoundError(id);
}
@@ -418,6 +419,7 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, int relative,
return 0;
}

finger = SDL_GetFinger(touch,fingerid);
if(finger == NULL || !finger->down) {
return SDL_SendFingerDown(id,fingerid,SDL_TRUE,xin,yin,pressurein);
} else {
@@ -496,14 +498,16 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, int relative,
return posted;
}
}

int
SDL_SendTouchButton(SDL_TouchID id, Uint8 state, Uint8 button)
{
SDL_Touch *touch = SDL_GetTouch(id);
SDL_Touch *touch;
int posted;
Uint32 type;


touch = SDL_GetTouch(id);
if (!touch) {
return SDL_TouchNotFoundError(id);
}

0 comments on commit c10326c

Please sign in to comment.