Skip to content

Commit 1418238

Browse files
committed
fix eol detection
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/sandbox/csv/trunk@558883 13f79535-47bb-0310-9956-ffa450edef68
1 parent ee4962c commit 1418238

1 file changed

Lines changed: 15 additions & 14 deletions

File tree

src/java/org/apache/commons/csv/CSVParser.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ private Token encapsulatedTokenLexer(Token tkn, int c) throws IOException {
459459
// assert c == delimiter;
460460
c = in.read();
461461
while (!tkn.isReady) {
462+
boolean skipRead = false;
462463
if (c == strategy.getEncapsulator() || c == '\\') {
463464
// check lookahead
464465
if (in.lookAhead() == strategy.getEncapsulator()) {
@@ -483,26 +484,26 @@ private Token encapsulatedTokenLexer(Token tkn, int c) throws IOException {
483484
} else {
484485
// token finish mark (encapsulator) reached: ignore whitespace till delimiter
485486
while (!tkn.isReady) {
486-
int n = in.lookAhead();
487-
if (n == strategy.getDelimiter()) {
487+
c = in.read();
488+
if (c == strategy.getDelimiter()) {
488489
tkn.type = TT_TOKEN;
489490
tkn.isReady = true;
490-
} else if (isEndOfFile(n)) {
491+
} else if (isEndOfFile(c)) {
491492
tkn.type = TT_EOF;
492493
tkn.isReady = true;
493-
} else if (isEndOfLine(n)) {
494+
} else if (isEndOfLine(c)) {
494495
// ok eo token reached
495496
tkn.type = TT_EORECORD;
496497
tkn.isReady = true;
497-
} else if (!isWhitespace(n)) {
498-
// error invalid char between token and next delimiter
499-
throw new IOException(
500-
"(line " + getLineNumber()
501-
+ ") invalid char between encapsualted token end delimiter"
502-
);
503-
}
504-
c = in.read();
498+
} else if (!isWhitespace(c)) {
499+
// error invalid char between token and next delimiter
500+
throw new IOException(
501+
"(line " + getLineNumber()
502+
+ ") invalid char between encapsulated token end delimiter"
503+
);
504+
}
505505
}
506+
skipRead = true;
506507
}
507508
} else if (isEndOfFile(c)) {
508509
// error condition (end of file before end of token)
@@ -515,8 +516,8 @@ private Token encapsulatedTokenLexer(Token tkn, int c) throws IOException {
515516
tkn.content.append((char) c);
516517
}
517518
// get the next char
518-
if (!tkn.isReady) {
519-
c = in.read();
519+
if (!tkn.isReady && !skipRead) {
520+
c = in.read();
520521
}
521522
}
522523
return tkn;

0 commit comments

Comments
 (0)