aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2011-12-17 09:45:52 -0800
committerTor Norbye <tnorbye@google.com>2011-12-17 09:45:52 -0800
commitc563d4c4a574eb7884307a6be2e691188f6f6520 (patch)
treebff7586d519033b6bb653514bae6c2c5ea4b00d6
parentd5f733212db0aaa7b80d0f9d7184f8cc6943503d (diff)
downloadsdk-c563d4c4a574eb7884307a6be2e691188f6f6520.zip
sdk-c563d4c4a574eb7884307a6be2e691188f6f6520.tar.gz
sdk-c563d4c4a574eb7884307a6be2e691188f6f6520.tar.bz2
Handle lint input files with line ending errors
Lint's cli parser would throw an exception if handling a file that has \r's without correspoding \n's. This changeset fixes that. This addresses issue 22925: Lint: StringIndexOutOfBoundsException when reading xml files containing incorrect line endings Change-Id: I68c134e15d148f6f0bbcd477ec37b0fd2e70f0c0
-rw-r--r--lint/cli/src/com/android/tools/lint/PositionXmlParser.java7
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/PositionXmlParserTest.java22
2 files changed, 28 insertions, 1 deletions
diff --git a/lint/cli/src/com/android/tools/lint/PositionXmlParser.java b/lint/cli/src/com/android/tools/lint/PositionXmlParser.java
index 0515993..c6c4574 100644
--- a/lint/cli/src/com/android/tools/lint/PositionXmlParser.java
+++ b/lint/cli/src/com/android/tools/lint/PositionXmlParser.java
@@ -300,7 +300,12 @@ public class PositionXmlParser implements IDomParser {
// numbers
while (mCurrentLine < line) {
char c = mXml.charAt(mCurrentOffset);
- if (c == '\n') {
+ if (c == '\r' && mCurrentOffset < mXml.length() - 1) {
+ if (mXml.charAt(mCurrentOffset + 1) != '\n') {
+ mCurrentLine++;
+ mCurrentColumn = 0;
+ }
+ } else if (c == '\n') {
mCurrentLine++;
mCurrentColumn = 0;
} else {
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/PositionXmlParserTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/PositionXmlParserTest.java
index 7c47ceb..1c78c44 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/PositionXmlParserTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/PositionXmlParserTest.java
@@ -123,4 +123,26 @@ public class PositionXmlParserTest extends TestCase {
file.delete();
}
+
+ public void testLineEndings() throws Exception {
+ // Test for http://code.google.com/p/android/issues/detail?id=22925
+ String xml =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
+ "<LinearLayout>\r\n" +
+ "\r" +
+ "<LinearLayout></LinearLayout>\r\n" +
+ "</LinearLayout>\r\n";
+ PositionXmlParser parser = new PositionXmlParser();
+ File file = File.createTempFile("parsertest2", ".xml");
+ Writer fw = new BufferedWriter(new FileWriter(file));
+ fw.write(xml);
+ fw.close();
+ Project project = new Project(null, file.getParentFile(), file.getParentFile());
+ XmlContext context = new XmlContext(new Main(), project, file,
+ EnumSet.of(Scope.RESOURCE_FILE));
+ Document document = parser.parseXml(context);
+ assertNotNull(document);
+
+ file.delete();
+ }
}