Defensive code to avoid SEGFAULT
authordankcushions <chris.bransden@gmail.com>
Fri, 13 May 2016 15:21:37 +0000 (16:21 +0100)
committercbransden <chris.bransden@objectway.com>
Fri, 13 May 2016 17:30:02 +0000 (18:30 +0100)
frontend/plugin.c
libpcsxcore/plugins.c

index cf93df8..53ecac9 100644 (file)
@@ -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;
index 3d0ed3c..1369b1c 100644 (file)
@@ -384,8 +384,8 @@ static int bufcount, bufc;
 \r
 //PadDataS padd1, padd2;\r
 unsigned char _PADstartPollMultitap(PadDataS padd[4]) {\r
-       int i=0;\r
-       int decallage=2;\r
+    int i=0;\r
+    int decallage=2;\r
     bufc = 0;\r
     PadDataS pad;\r
     for(i=0;i<4;i++){\r
@@ -626,7 +626,7 @@ unsigned char CALLBACK PAD2__startPoll(int pad) {
                return _PADstartPoll(&padd);\r
        }else{\r
                //a multitap is plugged : refresh all pad.\r
-               int i=pad_index;\r
+               int i=0;\r
                PadDataS padd[4];\r
                for(i=0;i<4;i++){\r
                        PAD2_readPort2(&padd[i],i+pad_index);\r