uadetector
uadetector copied to clipboard
Handle invalid regular expression patterns
If a regular expression is invalid and cannot be compiled by java.util.regex.Pattern.compile(String, int) the whole parsing process will be stopped.
18:41:38 [main] WARN n.s.u.datareader.XmlDataReader - Illegal/unsupported escape sequence near index 35
^Mozilla.*Android.*LG\-F200K|F200L\F200S
^
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 35
^Mozilla.*Android.*LG\-F200K|F200L\F200S
^
at java.util.regex.Pattern.error(Pattern.java:1713) ~[na:1.6.0_51]
at java.util.regex.Pattern.escape(Pattern.java:2177) ~[na:1.6.0_51]
at java.util.regex.Pattern.atom(Pattern.java:1952) ~[na:1.6.0_51]
at java.util.regex.Pattern.sequence(Pattern.java:1885) ~[na:1.6.0_51]
at java.util.regex.Pattern.expr(Pattern.java:1752) ~[na:1.6.0_51]
at java.util.regex.Pattern.compile(Pattern.java:1460) ~[na:1.6.0_51]
at java.util.regex.Pattern.<init>(Pattern.java:1133) ~[na:1.6.0_51]
at java.util.regex.Pattern.compile(Pattern.java:847) ~[na:1.6.0_51]
at net.sf.uadetector.internal.util.RegularExpressionConverter.convertPerlRegexToPattern(RegularExpressionConverter.java:315) ~[classes/:na]
at net.sf.uadetector.internal.util.RegularExpressionConverter.convertPerlRegexToPattern(RegularExpressionConverter.java:286) ~[classes/:na]
at net.sf.uadetector.internal.data.domain.DevicePattern$Builder.setPerlRegularExpression(DevicePattern.java:142) ~[classes/:na]
at net.sf.uadetector.internal.data.XmlDataHandler.addToDevicePatternBuilder(XmlDataHandler.java:434) ~[classes/:na]
at net.sf.uadetector.internal.data.XmlDataHandler.transferToSpecificBuilderAndReset(XmlDataHandler.java:697) ~[classes/:na]
at net.sf.uadetector.internal.data.XmlDataHandler.endElement(XmlDataHandler.java:502) ~[classes/:na]
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endNamespaceScope(XMLDTDValidator.java:2077) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2028) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:901) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2939) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) ~[na:1.6.0_51]
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) ~[na:1.6.0_51]
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) ~[na:1.6.0_51]
at javax.xml.parsers.SAXParser.parse(SAXParser.java:198) ~[na:1.6.0_51]
at net.sf.uadetector.datareader.XmlDataReader$XmlParser.parse(XmlDataReader.java:61) ~[classes/:na]
at net.sf.uadetector.datareader.XmlDataReader.readXml(XmlDataReader.java:111) [classes/:na]
at net.sf.uadetector.datareader.XmlDataReader.read(XmlDataReader.java:170) [classes/:na]
at net.sf.uadetector.datastore.AbstractDataStore.readData(AbstractDataStore.java:72) [classes/:na]
at net.sf.uadetector.datastore.AbstractDataStore.<init>(AbstractDataStore.java:168) [classes/:na]
at net.sf.uadetector.service.UADetectorServiceFactory$ResourceModuleXmlDataStore.<init>(UADetectorServiceFactory.java:84) [classes/:na]
at net.sf.uadetector.service.UADetectorServiceFactory.<clinit>(UADetectorServiceFactory.java:92) [classes/:na]
at net.sf.uadetector.UserAgentStringParserIntegrationTest.<clinit>(UserAgentStringParserIntegrationTest.java:74) [test-classes/:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.6.0_51]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [na:1.6.0_51]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [na:1.6.0_51]
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [na:1.6.0_51]
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195) [junit-4.11.jar:na]
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244) [junit-4.11.jar:na]
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.11.jar:na]
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241) [junit-4.11.jar:na]
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) [junit-4.11.jar:na]
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) [junit-4.11.jar:na]
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [.cp/:na]
We should avoid this and log a specific warning message.