Skip to content

Commit 1707b89

Browse files
committed
Fix frames being read out of bounds
1 parent 39ba8ee commit 1707b89

2 files changed

Lines changed: 8 additions & 5 deletions

File tree

common/src/main/java/io/github/moremcmeta/animationplugin/metadata/AnimationMetadataAnalyzer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,12 @@ private AnimationMetadata readAnimationProperties(MetadataView metadata, int ima
225225
private List<Frame> findFrames(NativeImage texture, int frameWidth, int frameHeight) {
226226
List<Frame> frames = new ArrayList<>();
227227

228-
for (int minY = 0; minY < texture.getHeight(); minY += frameHeight) {
229-
for (int minX = 0; minX < texture.getWidth(); minX += frameWidth) {
230-
int finalMinX = minX;
231-
int finalMinY = minY;
228+
int framesY = texture.getHeight() / frameHeight;
229+
int framesX = texture.getWidth() / frameWidth;
230+
for (int frameY = 0; frameY < framesY; frameY++) {
231+
for (int frameX = 0; frameX < framesX; frameX++) {
232+
int finalMinX = frameX * frameWidth;
233+
int finalMinY = frameY * frameHeight;
232234
frames.add((x, y) -> texture.getPixelRGBA(finalMinX + x, finalMinY + y));
233235
}
234236
}

common/src/test/java/io/github/moremcmeta/animationplugin/metadata/AnimationMetadataAnalyzerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ public void analyze_HasPartsFrameWidthNotMultipleOfPartSize_InvalidMetadataExcep
10661066
"0", new MockMetadataView(ImmutableMap.of(
10671067
"width", 4,
10681068
"height", 10,
1069-
"texture", MOCK_TEXTURE.apply(10, 20),
1069+
"texture", MOCK_TEXTURE.apply(10, 22),
10701070
"x", 0,
10711071
"y", 0
10721072
))
@@ -1081,6 +1081,7 @@ public void analyze_HasPartsFrameWidthNotMultipleOfPartSize_InvalidMetadataExcep
10811081
assertEquals(10, metadata.parts().get(0).frameHeight());
10821082
assertEquals(0, metadata.parts().get(0).xInBase());
10831083
assertEquals(0, metadata.parts().get(0).yInBase());
1084+
assertEquals(4, metadata.parts().get(0).partFrames().orElseThrow().size());
10841085
}
10851086

10861087
@Test

0 commit comments

Comments
 (0)