You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by yo...@apache.org on 2010/07/15 03:32:55 UTC
svn commit: r964273 - in /commons/sandbox/csv/trunk/src:
java/org/apache/commons/csv/CSVParser.java
test/org/apache/commons/csv/CSVParserTest.java
test/org/apache/commons/csv/CSVPrinterTest.java
Author: yonik
Date: Thu Jul 15 01:32:55 2010
New Revision: 964273
URL: http://svn.apache.org/viewvc?rev=964273&view=rev
Log:
SANDBOX-313: Endless loops in CSV parser when last line is comment
Modified:
commons/sandbox/csv/trunk/src/java/org/apache/commons/csv/CSVParser.java
commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVParserTest.java
commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVPrinterTest.java
Modified: commons/sandbox/csv/trunk/src/java/org/apache/commons/csv/CSVParser.java
URL: http://svn.apache.org/viewvc/commons/sandbox/csv/trunk/src/java/org/apache/commons/csv/CSVParser.java?rev=964273&r1=964272&r2=964273&view=diff
==============================================================================
--- commons/sandbox/csv/trunk/src/java/org/apache/commons/csv/CSVParser.java (original)
+++ commons/sandbox/csv/trunk/src/java/org/apache/commons/csv/CSVParser.java Thu Jul 15 01:32:55 2010
@@ -343,7 +343,7 @@ public class CSVParser {
}
// important: make sure a new char gets consumed in each iteration
- while (!tkn.isReady) {
+ while (!tkn.isReady && tkn.type != TT_EOF) {
// ignore whitespaces at beginning of a token
while (strategy.getIgnoreLeadingWhitespaces() && isWhitespace(c) && !eol) {
wsBuf.append((char) c);
Modified: commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVParserTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVParserTest.java?rev=964273&r1=964272&r2=964273&view=diff
==============================================================================
--- commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVParserTest.java (original)
+++ commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVParserTest.java Thu Jul 15 01:32:55 2010
@@ -497,7 +497,7 @@ public class CSVParserTest extends TestC
String[][] res = {
{ "a", "b" },
{ "\n", " " },
- { "", "#" }, // WARNING: TODO: this causes a hang if comments are enabled
+ { "", "#" },
};
CSVStrategy strategy = CSVStrategy.DEFAULT_STRATEGY;
@@ -510,6 +510,20 @@ public class CSVParserTest extends TestC
if (!CSVPrinterTest.equals(res, tmp)) {
assertTrue(false);
}
+
+ String[][] res_comments = {
+ { "a", "b" },
+ { "\n", " " },
+ { ""},
+ };
+
+ strategy = new CSVStrategy(',','"','#');
+ parser = new CSVParser(new StringReader(code), strategy);
+ tmp = parser.getAllValues();
+
+ if (!CSVPrinterTest.equals(res_comments, tmp)) {
+ assertTrue(false);
+ }
}
Modified: commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVPrinterTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVPrinterTest.java?rev=964273&r1=964272&r2=964273&view=diff
==============================================================================
--- commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVPrinterTest.java (original)
+++ commons/sandbox/csv/trunk/src/test/org/apache/commons/csv/CSVPrinterTest.java Thu Jul 15 01:32:55 2010
@@ -133,9 +133,15 @@ public class CSVPrinterTest extends Test
}
public static boolean equals(String[][] a, String[][] b) {
+ if (a.length != b.length) {
+ return false;
+ }
for (int i=0; i<a.length; i++) {
String[] linea = a[i];
String[] lineb = b[i];
+ if (linea.length != lineb.length) {
+ return false;
+ }
for (int j=0; j<linea.length; j++) {
String aval = linea[j];
String bval = lineb[j];