[
https://issues.apache.org/jira/browse/CSV-307?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gary D. Gregory updated CSV-307:
--------------------------------
Summary: Document minimum Android version (was: Exception change in
CSVParser.getNextRecord() raises minimum Android version)
> Document minimum Android version
> --------------------------------
>
> Key: CSV-307
> URL: https://issues.apache.org/jira/browse/CSV-307
> Project: Commons CSV
> Issue Type: Bug
> Components: Parser
> Affects Versions: 1.10.0
> Reporter: Sylvia van Os
> Priority: Major
>
> I have an Android project targeting minSdk 21 (Android 5). Recently,
> dependabot offered 1.10.0 as an update for commons-csv.
> 1.10.0 changes the behaviour of
> org.apache.commons.csv.CSVParser$CSVRecordIterator.getNextRecord to throw an
> java.io.UncheckedIOException instead of an IllegalArgumentException or
> IllegalStateException (I wrote the code long ago and am no longer sure which
> of the two exceptions has been replaced).
> I use the following input:
> {code:java}
> String csvText = "2\n" +
> "\n" +
> "_id\n" +
> "Health\n" +
> "Food\n" +
> "Fashion\n" +
> "\n" +
>
> "_id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus\n"
> +
> "1,Card 1,Note
> 1,1601510400,1618053234,100,USD,1234,5432,1,QR_CODE,0,\r\n" +
> "8,Clothes Store,Note about store,,,0,,a,,-5317,,0,\n" +
> "2,Department Store,,,1618041729,0,,A,,-9977996,,0,\n" +
> "3,Grocery Store,\"Multiline note about grocery store\n" +
> "\n" +
> "with blank line\",,,150,,dhd,,-9977996,,0,\n" +
> "4,Pharmacy,,,,0,,dhshsvshs,,-10902850,,1,\n" +
> "5,Restaurant,Note about restaurant
> here,,,0,,98765432,23456,-10902850,CODE_128,0,\n" +
> "6,Shoe Store,,,,12.50,EUR,a,-5317,,AZTEC,0,\n" +
> "\n" +
> "cardId,groupId\n" +
> "8,Fashion\n" +
> "3,Food\n" +
> "4,Health\n" +
> "5,Food\n" +
> "6,Fashion\n";
> {code}
> (Source:
> https://github.com/CatimaLoyalty/Android/blob/19f406cd8c5fc0defe0948e8ec7b391514dbb408/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java#L108-L169)
> which gets read line-by-line until whitespace is found. This causes the
> following invalid CSV to given to the CSVParser on the first pass:
> {code}
> _id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus
> 1,Card 1,Note 1,1601510400,1618053234,100,USD,1234,5432,1,QR_CODE,0,
> 8,Clothes Store,Note about store,,,0,,a,,-5317,,0,
> 2,Department Store,,,1618041729,0,,A,,-9977996,,0,
> 3,Grocery Store,"Multiline note about grocery store
> {code}
> In the following code snippet, this used to first throw an
> IllegalArgumentException or an IllegalStateException, but now throws and
> UncheckedIOException:
> {code:java}
> final CSVParser cardParser = new CSVParser(new StringReader(data),
> CSVFormat.RFC4180.builder().setHeader().build());
> List<CSVRecord> records = new ArrayList<>();
> try {
> for (CSVRecord record : cardParser) {
> records.add(record);
> if (Thread.currentThread().isInterrupted()) {
> throw new InterruptedException();
> }
> }
> } catch (IllegalArgumentException | IllegalStateException e) {
> throw new FormatException("Issue parsing CSV data", e);
> } finally {
> cardParser.close();
> }
> {code}
> (Source:
> https://github.com/CatimaLoyalty/Android/blob/19f406cd8c5fc0defe0948e8ec7b391514dbb408/app/src/main/java/protect/card_locker/importexport/CatimaImporter.java#L198-L214)
> Trying to change the catch statement to catch UncheckedIOException instead,
> gives the following error in Android Studio: "Exception requires API level 24
> (current min is 21): java.io.UncheckedIOException".
> Effectively, this means the minimal Android version for some parts of this
> library is now Android 7.
> Is this bump in minimal Android version for certain parts of the codebase
> intended? The changelogs on
> https://commons.apache.org/proper/commons-csv/changes-report.html#a1.10.0 do
> not seem to suggest any such thing.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)