UBFix: uninitialized variables in m4a engine and siirtc.c (#1432)

This commit is contained in:
gAlfonso-bit 2021-05-23 10:56:37 -04:00 committed by GitHub
parent ffbbc88801
commit ff16812f99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 8 deletions

View File

@ -1525,6 +1525,10 @@ void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
{
u32 wav;
#ifdef UBFIX
wav = 0;
#endif
READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
READ_XCMD_BYTE(wav, 1)
READ_XCMD_BYTE(wav, 2)
@ -1592,6 +1596,10 @@ void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tra
{
u32 unk;
#ifdef UBFIX
unk = 0;
#endif
READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
READ_XCMD_BYTE(unk, 1)
@ -1611,6 +1619,7 @@ void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tra
void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
{
u32 unk;
#ifdef UBFIX
unk = 0;
#endif

View File

@ -71,6 +71,7 @@ static bool8 sLocked;
static int WriteCommand(u8 value);
static int WriteData(u8 value);
static u8 ReadData();
static void EnableGpioPortRead();
static void DisableGpioPortRead();
@ -98,8 +99,12 @@ u8 SiiRtcProbe(void)
errorCode = 0;
#ifdef BUGFIX
if (!(rtc.status & SIIRTCINFO_24HOUR) || (rtc.status & SIIRTCINFO_POWER))
#else
if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER
|| (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0)
#endif
{
// The RTC is in 12-hour mode. Reset it and switch to 24-hour mode.
@ -131,7 +136,7 @@ u8 SiiRtcProbe(void)
bool8 SiiRtcReset(void)
{
u8 result;
bool8 result;
struct SiiRtcInfo rtc;
if (sLocked == TRUE)
@ -392,7 +397,11 @@ static int WriteCommand(u8 value)
GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI;
}
// control reaches end of non-void function
// Nothing uses the returned value from this function,
// so the undefined behavior is harmless in the vanilla game.
#ifdef UBFIX
return 0;
#endif
}
static int WriteData(u8 value)
@ -409,7 +418,11 @@ static int WriteData(u8 value)
GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI;
}
// control reaches end of non-void function
// Nothing uses the returned value from this function,
// so the undefined behavior is harmless in the vanilla game.
#ifdef UBFIX
return 0;
#endif
}
static u8 ReadData()
@ -417,9 +430,10 @@ static u8 ReadData()
u8 i;
u8 temp;
u8 value;
#ifdef UBFIX
#ifdef UBFIX
value = 0;
#endif
#endif
for (i = 0; i < 8; i++)
{
@ -431,7 +445,7 @@ static u8 ReadData()
GPIO_PORT_DATA = SCK_HI | CS_HI;
temp = ((GPIO_PORT_DATA & SIO_HI) >> 1);
value = (value >> 1) | (temp << 7); // UB: value is uninitialized on first iteration
value = (value >> 1) | (temp << 7);
}
return value;
@ -439,10 +453,10 @@ static u8 ReadData()
static void EnableGpioPortRead()
{
GPIO_PORT_READ_ENABLE = 1;
GPIO_PORT_READ_ENABLE = TRUE;
}
static void DisableGpioPortRead()
{
GPIO_PORT_READ_ENABLE = 0;
GPIO_PORT_READ_ENABLE = FALSE;
}