From bebaef4be9a87d92b11bc29a002a531a9d1fa5d7 Mon Sep 17 00:00:00 2001 From: dankcushions Date: Fri, 13 May 2016 16:21:37 +0100 Subject: [PATCH] Defensive code to avoid SEGFAULT --- frontend/plugin.c | 7 ++++++- libpcsxcore/plugins.c | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/frontend/plugin.c b/frontend/plugin.c index cf93df8b..53ecac9b 100644 --- a/frontend/plugin.c +++ b/frontend/plugin.c @@ -67,7 +67,12 @@ static long PADreadPort1(PadDataS *pad, int pad_index) { } static long PADreadPort2(PadDataS *pad, int pad_index) { - pad->controllerType = in_type[pad_index]; + /* Temporary hack to avoid segfault when pad_index is a crazy number */ + if (pad_index <= 1 || pad_index > 8) { + pad_index = 1; + } + + pad->controllerType = in_type[pad_index]; pad->buttonStatus = ~in_keystate[pad_index]; if(multitap2==1){ pad->portMultitap=2; diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 3d0ed3c5..1369b1c9 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -384,8 +384,8 @@ static int bufcount, bufc; //PadDataS padd1, padd2; unsigned char _PADstartPollMultitap(PadDataS padd[4]) { - int i=0; - int decallage=2; + int i=0; + int decallage=2; bufc = 0; PadDataS pad; for(i=0;i<4;i++){ @@ -626,7 +626,7 @@ unsigned char CALLBACK PAD2__startPoll(int pad) { return _PADstartPoll(&padd); }else{ //a multitap is plugged : refresh all pad. - int i=pad_index; + int i=0; PadDataS padd[4]; for(i=0;i<4;i++){ PAD2_readPort2(&padd[i],i+pad_index); -- 2.39.5