Skip to content

GRID step: ArrayIndexOutOfBoundsException with negative index (SectionTally.getSubList / AreaUtil.verticalCore) on public OLiMPiC scans #961

Description

@KirylPaheryla

Summary

While batch-transcribing the public OLiMPiC scanned test set (1,493 single-system pianoform scans, CC BY-SA, from ufal/olimpic-icdar24), 10 images belonging to 4 scores consistently crash in the GRID step with ArrayIndexOutOfBoundsException carrying a negative index. The sheet is then flagged as failed and -export refuses with "Could not export since transcription did not complete successfully" (exit code 1).

The remaining ~1,300 scans of the same corpus transcribe fine with the same binary and settings, and the crashes are reproducible per image. The affected images are normal-resolution scans (2,602–4,959 px wide), so this is not the documented low-interline refusal path (which we also observe on this corpus, but as an explicit, graceful refusal).

Environment

  • Audiveris 5.10.2 (latest release), built from tag 5.10.2 (commit 1b7cf440) via gradlew :app:installDist
  • Temurin JDK 25 (JAVA_HOME), Windows 11 Pro
  • Command per image:
Audiveris.bat -batch -export -output <out_dir> <image>.png

Variant A — SectionTally.getSubList, index -1 (2 images)

WARN GridBuilder.java:161 | Error in GridBuilder: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1219
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1219
	at org.audiveris.omr.lag.SectionTally.getSubList(SectionTally.java:90)
	at org.audiveris.omr.sheet.grid.LinesRetriever.includeStickers(LinesRetriever.java:955)
	at org.audiveris.omr.sheet.grid.LinesRetriever.completeLines(LinesRetriever.java:536)
	at org.audiveris.omr.sheet.grid.GridBuilder.buildInfo(GridBuilder.java:157)
	at org.audiveris.omr.sheet.grid.GridStep.doit(GridStep.java:97)
	at org.audiveris.omr.step.OmrStep.doit(OmrStep.java:138)
	at org.audiveris.omr.sheet.SheetStub.lambda$doOneStep$0(SheetStub.java:503)
	...

The failing length equals imageHeight + 1 (e.g. length 1219 for a 4426×1218 image, length 733 for 2616×732), so a section's position apparently resolves to y = -1 in the tally.

Variant B — AreaUtil.verticalCore / ByteProcessor.get, large negative index (8 images)

WARN GridBuilder.java:161 | Error in GridBuilder: java.lang.ArrayIndexOutOfBoundsException: Index -98660 out of bounds for length 6307848
java.lang.ArrayIndexOutOfBoundsException: Index -98660 out of bounds for length 6307848
	at ij.process.ByteProcessor.get(ByteProcessor.java:251)
	at org.audiveris.omr.math.AreaUtil.verticalCore(AreaUtil.java:153)
	at org.audiveris.omr.sheet.grid.StaffProjector.createPeak(StaffProjector.java:656)
	at org.audiveris.omr.sheet.grid.StaffProjector.browseRange(StaffProjector.java:287)
	at org.audiveris.omr.sheet.grid.StaffProjector.findPeaksInRange(StaffProjector.java:910)
	...

The failing length equals width × height of the image (e.g. 6,307,848 = 4959×1272), i.e. a probed pixel coordinate goes negative (y*width+x < 0) while sampling a vertical core inside StaffProjector.createPeak.

Affected images

All are from the OLiMPiC scanned test split (paths inside the dataset release; p{page}-s{system} naming):

Dataset path Size (px) Variant Index / length
samples/5656522/p1-s1.png 4426×1218 A -1 / 1219
samples/6209602/p5-s3.png 2616×732 A -1 / 733
samples/6209602/p5-s4.png 2604×742 B -16126 / 1932168
samples/6209608/p4-s4.png 2602×712 B -14670 / 1852624
samples/6209608/p5-s4.png 2637×730 B -21857 / 1925010
samples/6302395/p1-s1.png 4472×1206 B -5724 / 5393232
samples/6302395/p5-s3.png 4959×1194 B -1503 / 5921046
samples/6302395/p6-s1.png 4959×1310 B -19615 / 6496290
samples/6302395/p6-s2.png 4959×1272 B -98660 / 6307848
samples/6302395/p7-s1.png 4959×1220 B -13208 / 6049980

The images can be fetched from the datasets release of ufal/olimpic-icdar24 (license CC BY-SA); I can also attach individual PNGs or full per-image logs here on request.

Expected behavior

Either successful staff-grid retrieval, or a graceful per-sheet failure/refusal (as happens with the low-interline check) instead of an uncaught ArrayIndexOutOfBoundsException that aborts transcription of the sheet.

Possibly related

#711 and #750 also report ArrayIndexOutOfBoundsException on pixel buffers, but with positive indices slightly past the buffer end and different frames — filing separately since both signatures here have negative indices rooted in SectionTally.getSubList / AreaUtil.verticalCore during GRID.


Context, if useful: these crashes surfaced in a systematic benchmark of Audiveris 5.10.2 as a baseline over the full OLiMPiC scanned test set (1,493 images); 10/1,493 images fail with the above signatures, deterministically per image.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions