1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-27 23:36:22 +00:00

Fix misc 21 (#1573)

* Make `sNew` in (unused) `code_800FC620.c` a string

It is passed as a filename to `__osMallocDebug` so should be a nul-terminated string, not a char[3] missing an explicit \0

* Fix gcc warning in `JpegDecoder_ParseNextSymbol` about SLL on negative value

-1U is an unsigned value, aka 0xFFFFFFFF
I keep -1 because it seems that's what a jpeg standard has too

References:
https://stackoverflow.com/questions/40508958/shifting-a-negative-signed-value-is-undefined
https://www.w3.org/Graphics/JPEG/itu-t81.pdf (page 105, figure F.12)

* Small cleanup

* Fix few mistakes (thanks gcc warnings)

* Add `@bug` in file select settings draw code, using the wrong array

* format

* format main

* rename arg for a happy formatter

* Move important function call out of a printf
This commit is contained in:
Dragorn421 2023-11-12 22:59:52 +01:00 committed by GitHub
parent dc323052c3
commit 4c75260097
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 47 additions and 39 deletions

View file

@ -13,7 +13,7 @@ typedef struct InitFunc {
// .data // .data
void* sInitFuncs = NULL; void* sInitFuncs = NULL;
char sNew[] = { 'n', 'e', 'w' }; char sNew[] = "new";
char D_80134488[0x18] = { char D_80134488[0x18] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00,
@ -100,7 +100,7 @@ void func_800FCB34(void) {
initFunc = (InitFunc*)((s32)initFunc + nextOffset); initFunc = (InitFunc*)((s32)initFunc + nextOffset);
if (initFunc->func != NULL) { if (initFunc->func != NULL) {
(*initFunc->func)(); initFunc->func();
} }
nextOffset = initFunc->nextOffset; nextOffset = initFunc->nextOffset;

View file

@ -154,7 +154,7 @@ s32 JpegDecoder_ParseNextSymbol(JpegHuffmanTable* hTable, s16* outCoeff, s8* out
if (sym) { if (sym) {
*outCoeff = JpegDecoder_ReadBits(sym); *outCoeff = JpegDecoder_ReadBits(sym);
if (*outCoeff < (1 << (sym - 1))) { if (*outCoeff < (1 << (sym - 1))) {
*outCoeff += (-1 << sym) + 1; *outCoeff += (-1U << sym) + 1;
} }
} }

View file

@ -1447,6 +1447,7 @@ void Play_InitScene(PlayState* this, s32 spawn) {
void Play_SpawnScene(PlayState* this, s32 sceneId, s32 spawn) { void Play_SpawnScene(PlayState* this, s32 sceneId, s32 spawn) {
SceneTableEntry* scene = &gSceneTable[sceneId]; SceneTableEntry* scene = &gSceneTable[sceneId];
u32 size;
scene->unk_13 = 0; scene->unk_13 = 0;
this->loadedScene = scene; this->loadedScene = scene;
@ -1463,7 +1464,9 @@ void Play_SpawnScene(PlayState* this, s32 sceneId, s32 spawn) {
Play_InitScene(this, spawn); Play_InitScene(this, spawn);
osSyncPrintf("ROOM SIZE=%fK\n", func_80096FE8(this, &this->roomCtx) / 1024.0f); size = func_80096FE8(this, &this->roomCtx);
osSyncPrintf("ROOM SIZE=%fK\n", size / 1024.0f);
} }
void Play_GetScreenPos(PlayState* this, Vec3f* src, Vec3f* dest) { void Play_GetScreenPos(PlayState* this, Vec3f* src, Vec3f* dest) {

View file

@ -1061,7 +1061,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx**
// Note: The increment would not be done for the root limb, even if it had a non-NULL `dList`. // Note: The increment would not be done for the root limb, even if it had a non-NULL `dList`.
// So if the root limb had a non-NULL `dList` (which is not the case in vanilla), // So if the root limb had a non-NULL `dList` (which is not the case in vanilla),
// an out-of-bounds write to `bodyPartsPos` would occur. // an out-of-bounds write to `bodyPartsPos` would occur.
sCurBodyPartPos = &this->bodyPartsPos[-1]; sCurBodyPartPos = &this->bodyPartsPos[0] - 1;
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
if (!(this->skelAnime.moveFlags & ANIM_FLAG_PLAYER_2) || (this->skelAnime.moveFlags & ANIM_FLAG_0)) { if (!(this->skelAnime.moveFlags & ANIM_FLAG_PLAYER_2) || (this->skelAnime.moveFlags & ANIM_FLAG_0)) {

View file

@ -28,8 +28,8 @@ long long __ll_mul(long long left, long long right) {
return left * right; return left * right;
} }
void __ull_divremi(unsigned long long int* quotient, unsigned long long int* remainder, void __ull_divremi(unsigned long long int* quotient, unsigned long long int* remainder, unsigned long long dividend,
unsigned long long dividend, unsigned short divisor) { unsigned short divisor) {
*quotient = dividend / divisor; *quotient = dividend / divisor;
*remainder = dividend % divisor; *remainder = dividend % divisor;
} }

View file

@ -7,24 +7,24 @@
static char ldigs[] = "0123456789abcdef"; static char ldigs[] = "0123456789abcdef";
static char udigs[] = "0123456789ABCDEF"; static char udigs[] = "0123456789ABCDEF";
void _Litob(_Pft* args, char type) { void _Litob(_Pft* args, char code) {
char buff[BUFF_LEN]; char buff[BUFF_LEN];
const char* digs; const char* digs;
int base; int base;
int i; int i;
unsigned long long num; unsigned long long num;
if (type == 'X') { if (code == 'X') {
digs = udigs; digs = udigs;
} else { } else {
digs = ldigs; digs = ldigs;
} }
base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16); base = (code == 'o') ? 8 : ((code != 'x' && code != 'X') ? 10 : 16);
i = BUFF_LEN; i = BUFF_LEN;
num = args->v.ll; num = args->v.ll;
if ((type == 'd' || type == 'i') && args->v.ll < 0) { if ((code == 'd' || code == 'i') && args->v.ll < 0) {
num = -num; num = -num;
} }

View file

@ -8,9 +8,9 @@
#define isdigit(x) (((x) >= '0' && (x) <= '9')) #define isdigit(x) (((x) >= '0' && (x) <= '9'))
#define LDSIGN(x) (((unsigned short*)&(x))[0] & 0x8000) #define LDSIGN(x) (((unsigned short*)&(x))[0] & 0x8000)
#define ATOI(i, a) \ #define ATOI(i, a) \
for (i = 0; isdigit(*a); a++) \ for (i = 0; isdigit(*a); a++) \
if (i < 999) \ if (i < 999) \
i = *a + i * 10 - '0'; i = *a + i * 10 - '0';
#define PUT(fmt, _size) \ #define PUT(fmt, _size) \
@ -24,17 +24,17 @@
#define MAX_PAD ((int)sizeof(spaces) - 1) #define MAX_PAD ((int)sizeof(spaces) - 1)
#define PAD(src, m) \ #define PAD(src, m) \
if (m > 0) { \ if (m > 0) { \
int i; \ int i; \
int j; \ int j; \
for (j = m; j > 0; j -= i) { \ for (j = m; j > 0; j -= i) { \
if ((unsigned)j > MAX_PAD) \ if ((unsigned)j > MAX_PAD) \
i = MAX_PAD; \ i = MAX_PAD; \
else \ else \
i = j; \ i = j; \
PUT(src, i); \ PUT(src, i); \
} \ } \
} }
char spaces[] = " "; char spaces[] = " ";
@ -69,7 +69,7 @@ int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) {
for (x.flags = 0; (t = strchr(fchar, *s)) != NULL; s++) { for (x.flags = 0; (t = strchr(fchar, *s)) != NULL; s++) {
x.flags |= fbit[t - fchar]; x.flags |= fbit[t - fchar];
} }
if (*s == '*') { if (*s == '*') {
x.width = va_arg(ap, int); x.width = va_arg(ap, int);
if (x.width < 0) { if (x.width < 0) {

View file

@ -84,7 +84,7 @@ void BgJyaBigmirror_HandleCobra(Actor* thisx, PlayState* play) {
curSpawnData->pos.z, 0, curCobraInfo->rotY, 0, curSpawnData->params); curSpawnData->pos.z, 0, curCobraInfo->rotY, 0, curSpawnData->params);
this->actor.child = NULL; this->actor.child = NULL;
if (&curCobraInfo->cobra->dyna.actor == NULL) { if (curCobraInfo->cobra == NULL) {
// "Cobra generation failed" // "Cobra generation failed"
osSyncPrintf("Error : コブラ発生失敗 (%s %d)\n", "../z_bg_jya_bigmirror.c", 221); osSyncPrintf("Error : コブラ発生失敗 (%s %d)\n", "../z_bg_jya_bigmirror.c", 221);
} }

View file

@ -2522,8 +2522,8 @@ s32 BossGanon2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
} }
if (limbIndex >= GANON_LIMB_TAIL1) { if (limbIndex >= GANON_LIMB_TAIL1) {
rot->x += this->unk_2F4[limbIndex] + this->unk_346; rot->x += this->unk_348[limbIndex - GANON_LIMB_TAIL1] + this->unk_346;
rot->y += this->unk_2FE[limbIndex]; rot->y += this->unk_352[limbIndex - GANON_LIMB_TAIL1];
if (this->unk_342 & 1) { if (this->unk_342 & 1) {
gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);

View file

@ -152,7 +152,7 @@ static InitChainEntry sInitChain[] = {
}; };
// possibly color data // possibly color data
static s32 sUnused[] = { 0xFFFFFFFF, 0x969696FF }; static u32 sUnused[] = { 0xFFFFFFFF, 0x969696FF };
void EnBigokuta_Init(Actor* thisx, PlayState* play) { void EnBigokuta_Init(Actor* thisx, PlayState* play) {
EnBigokuta* this = (EnBigokuta*)thisx; EnBigokuta* this = (EnBigokuta*)thisx;

View file

@ -776,19 +776,19 @@ void EnFr_CheckOcarinaInputFrogSong(u8 ocarinaNote) {
s32 frogIndex; s32 frogIndex;
switch (ocarinaNote) { switch (ocarinaNote) {
case 0: case OCARINA_BTN_A:
frogIndexButterfly = FROG_BLUE; frogIndexButterfly = FROG_BLUE;
break; break;
case 1: case OCARINA_BTN_C_DOWN:
frogIndexButterfly = FROG_YELLOW; frogIndexButterfly = FROG_YELLOW;
break; break;
case 2: case OCARINA_BTN_C_RIGHT:
frogIndexButterfly = FROG_RED; frogIndexButterfly = FROG_RED;
break; break;
case 3: case OCARINA_BTN_C_LEFT:
frogIndexButterfly = FROG_PURPLE; frogIndexButterfly = FROG_PURPLE;
break; break;
case 4: case OCARINA_BTN_C_UP:
frogIndexButterfly = FROG_WHITE; frogIndexButterfly = FROG_WHITE;
} }
// Turn on or off butterfly above frog // Turn on or off butterfly above frog

View file

@ -435,7 +435,7 @@ void func_80A4F13C(EnGs* this, PlayState* play) {
tmp = this->unk_1A0[0].y; tmp = this->unk_1A0[0].y;
if (tmp > 0) { if (tmp > 0) {
tmp += 0xFFFF0000; tmp -= 0x10000;
} }
this->unk_1E8 = tmp; this->unk_1E8 = tmp;
@ -446,7 +446,7 @@ void func_80A4F13C(EnGs* this, PlayState* play) {
if (this->unk_19F == 5) { if (this->unk_19F == 5) {
tmp = this->unk_1A0[0].y; tmp = this->unk_1A0[0].y;
if (tmp > 0) { if (tmp > 0) {
tmp += 0xFFFF0001; tmp -= 0xFFFF;
} }
this->unk_1E8 = tmp; this->unk_1E8 = tmp;
tmpf1 = Math_SmoothStepToF(&this->unk_1E8, this->unk_1EC, 0.8f, 3640.0f, 0.001f); tmpf1 = Math_SmoothStepToF(&this->unk_1E8, this->unk_1EC, 0.8f, 3640.0f, 0.001f);

View file

@ -1275,9 +1275,9 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
if (limbIndex == 1 && (this->unk_199 & 0x40)) { if (limbIndex == 1 && (this->unk_199 & 0x40)) {
if (this->unk_19A >= 284) { if (this->unk_19A >= 284) {
rot->x += (this->unk_19A * 0x1000) + 0xFFEE4000; rot->x += (this->unk_19A * 0x1000) - 0x11C000;
} else { } else {
rot->x += (this->unk_19A * 0x1000) + 0xFFFF1000; rot->x += (this->unk_19A * 0x1000) - 0xF000;
} }
} }
if (this->unk_22E.a == 0 || limbIndex == 8 || (this->actionFunc == func_80ADAFC0 && this->unk_19A >= 8)) { if (this->unk_22E.a == 0 || limbIndex == 8 || (this->actionFunc == func_80ADAFC0 && this->unk_19A >= 8)) {

View file

@ -917,6 +917,8 @@ void FileSelect_DrawOptionsImpl(GameState* thisx) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
} }
//! @bug Mistakenly using sOptionsMenuHeaders instead of sOptionsMenuSettings for the height.
//! This works out anyway because all heights are 16.
gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuSettings[i].texture[gSaveContext.language], G_IM_FMT_IA, gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuSettings[i].texture[gSaveContext.language], G_IM_FMT_IA,
G_IM_SIZ_8b, sOptionsMenuSettings[i].width[gSaveContext.language], G_IM_SIZ_8b, sOptionsMenuSettings[i].width[gSaveContext.language],
sOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, sOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
@ -941,6 +943,9 @@ void FileSelect_DrawOptionsImpl(GameState* thisx) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
} }
//! @bug Mistakenly using sOptionsMenuHeaders instead of sOptionsMenuSettings for the height.
//! This is also an OOB read that happens to access the height of the first two elements in
//! sOptionsMenuSettings, and since all heights are 16, it works out anyway.
gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuSettings[i].texture[gSaveContext.language], G_IM_FMT_IA, gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuSettings[i].texture[gSaveContext.language], G_IM_FMT_IA,
G_IM_SIZ_8b, sOptionsMenuSettings[i].width[gSaveContext.language], G_IM_SIZ_8b, sOptionsMenuSettings[i].width[gSaveContext.language],
sOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, sOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,