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