From 460c9c4f7380be1779651363da110a80d8abaee4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 06:57:02 +0000 Subject: [PATCH 1/2] Initial plan From 283d2012ebd0b7f582b7dd5b52da7869f7db7a41 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 06:59:29 +0000 Subject: [PATCH 2/2] fix: guard against mismatched array lengths in extractFieldsFromRecord Co-authored-by: holmeso <7066552+holmeso@users.noreply.github.com> --- .../au/edu/qimr/qannotate/nanno/AnnotationSourceTSV.java | 2 +- .../edu/qimr/qannotate/nanno/AnnotationSourceTSVTest.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/qannotate/src/au/edu/qimr/qannotate/nanno/AnnotationSourceTSV.java b/qannotate/src/au/edu/qimr/qannotate/nanno/AnnotationSourceTSV.java index 41e20e907..8d91add62 100644 --- a/qannotate/src/au/edu/qimr/qannotate/nanno/AnnotationSourceTSV.java +++ b/qannotate/src/au/edu/qimr/qannotate/nanno/AnnotationSourceTSV.java @@ -112,7 +112,7 @@ public static String extractFieldsFromRecord(String[] record, String[] fieldName StringBuilder dataToReturn = new StringBuilder(); int recordLength = null != record ? record.length : 0; if (recordLength > 0 && null != fieldNames && null != fieldPositions) { - for (int i = 0; i < fieldNames.length; i++) { + for (int i = 0; i < Math.min(fieldNames.length, fieldPositions.length); i++) { int pos = fieldPositions[i]; if (recordLength > pos) { dataToReturn.append((!dataToReturn.isEmpty()) ? FIELD_DELIMITER_TAB : "") diff --git a/qannotate/test/au/edu/qimr/qannotate/nanno/AnnotationSourceTSVTest.java b/qannotate/test/au/edu/qimr/qannotate/nanno/AnnotationSourceTSVTest.java index 0754e6865..b45dc0562 100644 --- a/qannotate/test/au/edu/qimr/qannotate/nanno/AnnotationSourceTSVTest.java +++ b/qannotate/test/au/edu/qimr/qannotate/nanno/AnnotationSourceTSVTest.java @@ -37,6 +37,14 @@ public void extractFieldsFromRecord() { fieldPositions = new int[]{100, 11}; assertEquals("", AnnotationSourceTSV.extractFieldsFromRecord(new String[]{"slightly_longer","record","","","","","","","","","bar"}, fieldNames, fieldPositions)); + // mismatched array lengths - fieldNames longer than fieldPositions + fieldNames = new String[]{"foo", "foo2", "foo3"}; + fieldPositions = new int[]{10}; + assertEquals("foo=bar", AnnotationSourceTSV.extractFieldsFromRecord(new String[]{"slightly_longer", "record", "", "", "", "", "", "", "", "", "bar"}, fieldNames, fieldPositions)); + // mismatched array lengths - fieldPositions longer than fieldNames + fieldNames = new String[]{"foo"}; + fieldPositions = new int[]{10, 1, 0}; + assertEquals("foo=bar", AnnotationSourceTSV.extractFieldsFromRecord(new String[]{"slightly_longer", "record", "", "", "", "", "", "", "", "", "bar"}, fieldNames, fieldPositions)); } @Test