diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java index c4af0ffc9..da532470e 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java @@ -222,7 +222,7 @@ public class DelimitedLineTokenizer extends AbstractLineTokenizer String value; - if ((chars.length > 2) && (chars[start] == quoteCharacter) && (chars[start + len - 1] == quoteCharacter)) { + if ((chars.length >= 2) && (chars[start] == quoteCharacter) && (chars[start + len - 1] == quoteCharacter)) { value = new String(chars, start + 1, len - 2); if (value.contains(escapedQuoteString)) { value = StringUtils.replace(value, escapedQuoteString, quoteString); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java index f10cd6761..72b192e57 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java @@ -52,6 +52,12 @@ public class DelimitedLineTokenizerTests { assertTrue(TOKEN_MATCHES, tokens.readString(0).equals("")); } + @Test + public void testEmptyString() { + FieldSet tokens = tokenizer.tokenize("\"\""); + assertTrue(TOKEN_MATCHES, tokens.readString(0).equals("")); + } + @Test public void testInvalidConstructorArgument() { try {