summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSierra A <6080951+Sierraffinity@users.noreply.github.com>2020-05-04 21:14:57 -0700
committerGitHub <noreply@github.com>2020-05-04 21:14:57 -0700
commit4dd3cc7b7691afb8ecd2e8af8b2ebfa717dd2414 (patch)
tree76cd7fa5a9ed806e19221e8d9a11337355f074f5
parentb3b99b52ca978104ebed318f1d238fc97892836a (diff)
parenta1244aa5dd4c7519ba6c2dcba5796eec2eba1c90 (diff)
Merge pull request #1035 from Sierraffinity/master
Document undefined sprite template behavior
-rw-r--r--gflib/sprite.c2
-rw-r--r--gflib/sprite.h4
-rwxr-xr-xsrc/mevent2.c4
3 files changed, 10 insertions, 0 deletions
diff --git a/gflib/sprite.c b/gflib/sprite.c
index 2e96acf2c..c7e3d09a3 100644
--- a/gflib/sprite.c
+++ b/gflib/sprite.c
@@ -878,12 +878,14 @@ void ResetAllSprites(void)
ResetSprite(&gSprites[i]);
}
+// UB: template pointer may point to freed temporary storage
void FreeSpriteTiles(struct Sprite *sprite)
{
if (sprite->template->tileTag != 0xFFFF)
FreeSpriteTilesByTag(sprite->template->tileTag);
}
+// UB: template pointer may point to freed temporary storage
void FreeSpritePalette(struct Sprite *sprite)
{
FreeSpritePaletteByTag(sprite->template->paletteTag);
diff --git a/gflib/sprite.h b/gflib/sprite.h
index 9753837fd..c9ba9585d 100644
--- a/gflib/sprite.h
+++ b/gflib/sprite.h
@@ -182,6 +182,10 @@ struct SpriteTemplate
SpriteCallback callback;
};
+// UB: template pointer is often used to point to temporary storage,
+// then later dereferenced after being freed. Usually this won't
+// be visible in-game, but this is (part of) what causes the item
+// icon palette to flicker when changing items in the bag.
struct Sprite
{
/*0x00*/ struct OamData oam;
diff --git a/src/mevent2.c b/src/mevent2.c
index 0bbaf6db8..2991ac27c 100755
--- a/src/mevent2.c
+++ b/src/mevent2.c
@@ -484,9 +484,13 @@ static void sub_801B7D8(u32 command)
}
if (dest == NULL)
+ {
AGB_ASSERT(0);
+ }
else if (++(*dest) > 999)
+ {
*dest = 999;
+ }
}
}