vaadin / touchkit

TouchKit is a library of mobile components for Vaadin Framework
https://vaadin.com/touchkit
Other
11 stars 25 forks source link

NPE when user-agent is missing in http request #417

Closed vaadin-bot closed 8 years ago

vaadin-bot commented 8 years ago

Originally by mvysny2


Touchkit 4.1.0: Good day, I was trying the https://www.ssllabs.com SSL test on my https TouchKit-powered site, when I noticed the following stacktrace:

20:03:24.273 [http-bio-8080-exec-1] ERROR sk.baka.aedictweb.TouchkitCDIServlet - Servlet failed
javax.servlet.ServletException: com.vaadin.server.ServiceException: com.vaadin.event.ListenerMethod$MethodException: Invocation of method modifyBootstrapPage in com.vaadin.addon.touchkit.settings.TouchKitSettings failed.
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:366) ~[vaadin-server-7.6.2.jar:7.6.2]
        at sk.baka.aedictweb.TouchkitCDIServlet.service(TouchkitCDIServlet.java:60) ~[TouchkitCDIServlet.class:na]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) [servlet-api.jar:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.63]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.63]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.63]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.63]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.63]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.63]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.63]
        at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) [tomee-catalina-1.7.3.jar:1.7.3]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [catalina.jar:7.0.63]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.63]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.63]
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957) [catalina.jar:7.0.63]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.63]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) [catalina.jar:7.0.63]
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) [tomcat-coyote.jar:7.0.63]
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) [tomcat-coyote.jar:7.0.63]
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) [tomcat-coyote.jar:7.0.63]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_72]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_72]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.63]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_72]
Caused by: com.vaadin.server.ServiceException: com.vaadin.event.ListenerMethod$MethodException: Invocation of method modifyBootstrapPage in com.vaadin.addon.touchkit.settings.TouchKitSettings failed.
        at com.vaadin.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1464) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1421) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.cdi.server.VaadinCDIServletService.handleRequest(VaadinCDIServletService.java:92) ~[vaadin-cdi-1.0.3.jar:1.0.3]
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:364) ~[vaadin-server-7.6.2.jar:7.6.2]
        ... 23 common frames omitted
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method modifyBootstrapPage in com.vaadin.addon.touchkit.settings.TouchKitSettings failed.
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:528) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.server.VaadinSession.modifyBootstrapResponse(VaadinSession.java:855) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.server.BootstrapHandler.getBootstrapHtml(BootstrapHandler.java:299) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:268) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) ~[vaadin-server-7.6.2.jar:7.6.2]
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409) ~[vaadin-server-7.6.2.jar:7.6.2]
        ... 25 common frames omitted
Caused by: java.lang.NullPointerException: null
        at com.vaadin.shared.VBrowserDetails.<init>(VBrowserDetails.java:71) ~[vaadin-shared-7.6.2.jar:7.6.2]
        at com.vaadin.addon.touchkit.settings.ApplicationCacheSettings.generateManifestFileName(ApplicationCacheSettings.java:85) ~[vaadin-touchkit-agpl-4.1.0.jar:4.1.0]
        at com.vaadin.addon.touchkit.settings.ApplicationCacheSettings.modifyBootstrapPage(ApplicationCacheSettings.java:70) ~[vaadin-touchkit-agpl-4.1.0.jar:4.1.0]
        at com.vaadin.addon.touchkit.settings.TouchKitSettings.modifyBootstrapPage(TouchKitSettings.java:186) ~[vaadin-touchkit-agpl-4.1.0.jar:4.1.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_72]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_72]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_72]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_72]
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) ~[vaadin-server-7.6.2.jar:7.6.2]
        ... 32 common frames omitted

It seems that the VBrowserDetails fails if null is passed into its constructor.


Imported from https://dev.vaadin.com/ issue #19564

vaadin-bot commented 8 years ago

Originally by @Peppe


Hi! Thanks for the report. Have you tested the same test against a non-TouckKit Vaadin application? VBrowserDetails comes from the Framework so it sounds like a problem in every Vaadin applicaiton.

vaadin-bot commented 8 years ago

Originally by @Artur-


As the stack trace suggests, this is a problem in TouchKit

        at com.vaadin.addon.touchkit.settings.ApplicationCacheSettings.generateManifestFileName(ApplicationCacheSettings.java:85) ~[vaadin-touchkit-agpl-4.1.0.jar:4.1.0]

The framework does not assume that a user-agent header is present

        String agent = request.getHeader("User-Agent");

        if (agent != null) {
            browserApplication = agent;
            browserDetails = new VBrowserDetails(agent);
        }
vaadin-bot commented 8 years ago

Originally by @Artur-


https://dev.vaadin.com/review/13026

vaadin-bot commented 8 years ago

Originally by mvysny2


Wow, you guys are FAST! I am very sorry for bugging during Sunday :( Just verified that a plain Vaadin app seems unaffected:

curl -H "User-Agent:" http://localhost:8080

will just return the regular page of

... cut ...
<body>...<noscript>You have to enable javascript in your browser to use an application built with Vaadin.</noscript>
... cut ...

On the other hand, issuing that very same command against a Touchkit app, for example

curl -H "User-Agent:" https://aedict-online.eu

Will produce a nasty NPE stacktrace.

vaadin-bot commented 8 years ago

Originally by @alvarezguille


Patch was merged. Will be included in next maintenance release