diff options
author | Tor Norbye <tnorbye@google.com> | 2011-12-17 09:45:52 -0800 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2011-12-17 09:45:52 -0800 |
commit | c563d4c4a574eb7884307a6be2e691188f6f6520 (patch) | |
tree | bff7586d519033b6bb653514bae6c2c5ea4b00d6 | |
parent | d5f733212db0aaa7b80d0f9d7184f8cc6943503d (diff) | |
download | sdk-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.java | 7 | ||||
-rw-r--r-- | lint/libs/lint_checks/tests/src/com/android/tools/lint/PositionXmlParserTest.java | 22 |
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(); + } } |