Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-dev] WindowsPathParser bug in 9.3.10?

ok thanks for the prompt replies and support!


Michele




On 12 July 2016 at 16:20, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
Michele, 

This isn't a problem for Jetty, its a limitation of the Windows FileSystem implementation in Java.
It won't allow quotes in paths on Windows.

Quotes are allowed on Unix filesystems, hence the lack of exception when not running on Windows.

At this point, you have to fix your dojo installation to produce proper requests for resources, as it *really* shouldn't be requesting things with quote characters or square brackets.

As for your embedded jetty setup, here's a a few different setups setups for you to work with ...


or ...

        Server server = new Server(8080);

        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
        context.setBaseResource(new PathResource(cfg.sdkRootDir));
        context.setContextPath("/js");
        context.setDisplayName("IOD SDK Resources Servlet Context");

        server.setHandler(context);

        ServletHolder defHolder = context.addServlet(DefaultServlet.class, "default");
        defHolder.setDisplayName("Resources Servlet");
        defHolder.setAsyncSupported(true); // leave this as true
        defHolder.setInitParameter("cacheControl", "max-age=0, no-cache, no-store");
        defHolder.setInitParameter("useFileMappedBuffer", "false");
        defHolder.setInitParameter("gzip", "false");
        defHolder.setInitParameter("etags", "true");
        defHolder.setInitParameter("redirectWelcome", "false");
        defHolder.setInitParameter("welcomeServlets", "false");
        defHolder.setInitParameter("dirAllowed", "true");
        defHolder.setInitParameter("maxCachedFiles", "2048");
        defHolder.setInitParameter("maxCachedFileSize", "200000000");
        defHolder.setInitParameter("maxCacheSize", "256000000");
        defHolder.setInitParameter("acceptRanges", "true");
        defHolder.setInitParameter("aliases", "true");
        defHolder.setInitParameter("acceptRanges", "true");

        server.start();




Joakim Erdfelt / joakim@xxxxxxxxxxx

On Tue, Jul 12, 2016 at 6:22 AM, Michele Rossi <michele.rossi@xxxxxxxxx> wrote:
hi,

I was just being lazy, as I said that code it's basically only a dev tool, I had to put it together quickly and did't bother understanding the API properly when I did.

So the correct place where to put the init params (and to call setResourceBase) is the context. 
I will change the code in that sense.

To answer your other question, I don't have those weird characters anywhere on the file system.


thanks,
Michele

On 12 July 2016 at 15:19, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
Oh, and don't set the resourceBase on the DefaultServlet at all

sdkHld.setInitParameter("resourceBase", cfg.sdkRootDir.getAbsolutePath());

The DefaultServlet will use the resourceBase from the context.

And, I'm not sure why you are repeating the same initParameters in the root context and the defaultServlet?
Most of those context initParameters are completely ignored.


Joakim Erdfelt / joakim@xxxxxxxxxxx

On Tue, Jul 12, 2016 at 6:17 AM, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
3 things ...

  1. There's a encoding bug on our end - opened an issue for the quote (") character - https://github.com/eclipse/jetty.project/issues/715
  2. The raw request you are getting from your browser is entirely wacky, the existence of the square brackets ([) and quotes (") are highly suspect.  Do you have those characters as path names on disk??
  3. And on a minor note, set the resourceBase properly on the ServletContextHandler.
Don't use 

sdkContextHandler.setInitParameter("resourceBase", cfg.sdkRootDir.getAbsolutePath());

use this instead

sdkContextHandler.setBaseResource(new PathResource(cfg.sdkRootDir));


Joakim Erdfelt / joakim@xxxxxxxxxxx

On Tue, Jul 12, 2016 at 6:13 AM, Michele Rossi <michele.rossi@xxxxxxxxx> wrote:
it's a context path.

I have an embedded version of Jetty for dev and a normal Jetty distro for production / staging.

This occurs in the Jetty that I build by myself using Java code.

Perhaps I am doing something wrong then?


Here is the code.. as I said I only use it so that I can run my system easily in Eclipse.


thanks,
Michele



        ServletHolder sdkHld = new ServletHolder();
        sdkHld.setClassName(DefaultServlet.class.getName());
        sdkHld.setDisplayName("Resources Servlet");
        sdkHld.setAsyncSupported(false);
        sdkHld.setEnabled(true);

        sdkHld.setInitParameter("cacheControl", "max-age=0, no-cache, no-store");
        sdkHld.setInitParameter("useFileMappedBuffer", "false");
        sdkHld.setInitParameter("gzip", "false");
        sdkHld.setInitParameter("etags", "true");
        sdkHld.setInitParameter("redirectWelcome", "false");
        sdkHld.setInitParameter("welcomeServlets", "false");
        sdkHld.setInitParameter("dirAllowed", "true");
        sdkHld.setInitParameter("maxCachedFiles", "2048");
        sdkHld.setInitParameter("maxCachedFileSize", "200000000");
        sdkHld.setInitParameter("maxCacheSize", "256000000");
        sdkHld.setInitParameter("acceptRanges", "true");
        sdkHld.setInitParameter("aliases", "true");
        sdkHld.setInitParameter("acceptRanges", "true");
        sdkHld.setInitParameter("resourceBase", cfg.sdkRootDir.getAbsolutePath());

        ServletContextHandler sdkContextHandler = new ServletContextHandler(ServletContextHandler.NO_SECURITY
                | ServletContextHandler.NO_SESSIONS);


// ============>>> here it is ===========>
        sdkContextHandler.setContextPath("/js");

        sdkContextHandler.setDisplayName("IOD SDK Resources Servlet Context");
        sdkContextHandler.addServlet(sdkHld, "/*");
        sdkContextHandler.setInitParameter("resourceBase", cfg.sdkRootDir.getAbsolutePath());
        sdkContextHandler.setInitParameter("cacheControl", "max-age=0, no-cache, no-store");
        sdkContextHandler.setInitParameter("useFileMappedBuffer", "false");
        sdkContextHandler.setInitParameter("gzip", "false");
        sdkContextHandler.setInitParameter("etags", "true");
        sdkContextHandler.setInitParameter("redirectWelcome", "false");
        sdkContextHandler.setInitParameter("welcomeServlets", "false");
        sdkContextHandler.setInitParameter("dirAllowed", "true");
        sdkContextHandler.setInitParameter("maxCachedFiles", "2048");
        sdkContextHandler.setInitParameter("maxCachedFileSize", "200000000");
        sdkContextHandler.setInitParameter("maxCacheSize", "256000000");
        sdkContextHandler.setInitParameter("acceptRanges", "true");
        sdkContextHandler.setInitParameter("aliases", "true");
        sdkContextHandler.setInitParameter("acceptRanges", "true");
        sdkContextHandler.setInitParameter("resourceBase", cfg.sdkRootDir.getAbsolutePath());
        sdkContextHandler.setServer(server);

On 12 July 2016 at 15:06, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
That seems like a horribly bad request to me.

Is /js/ a webapp Context Path? a servlet mapping? or a directory?

Joakim Erdfelt / joakim@xxxxxxxxxxx

On Tue, Jul 12, 2016 at 6:02 AM, Michele Rossi <michele.rossi@xxxxxxxxx> wrote:
here it is, I am not sure what JS library is producing those weird requests.

In any case, there is no problem on Linux for some reason.


thanks,
Michele




Host: localhost:8686
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: test; iod_session=FCD9AC5D1C23F25310; BAYEUX_BROWSER=ehsfdtllbaa518nf
Connection: keep-alive





On 12 July 2016 at 14:50, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
Can you capture/inspect the request from your browser and copy/paste it here?

Joakim Erdfelt / joakim@xxxxxxxxxxx

On Tue, Jul 12, 2016 at 5:26 AM, Michele Rossi <michele.rossi@xxxxxxxxx> wrote:
hi all,

when running my Jetty 9.3.10 system on Windows 7 I am observing the behaviour below which looks wrong.

I don't understand what that code is trying to do but it looks like it's somehow forming paths with some of the content of the files a client is downloading and it's then trying to normalise them using WindowsPathParser?


In any case I thought you might want to know.

Many thanks,
Michele




14:21:49.211|WARN |   o.e.j.s.DefaultServlet|7C662196D528189A4E|a_bates   |UBSW_LON| EXCEPTION 
java.nio.file.InvalidPathException: Illegal char <"> at index 66: C:\Work\Workspaces\idr\iod-aggregator\iod-html\src\main\js\dist\/["dojo/_base/lang"]/</p.hitch/<@http://localhost:8686/js/html5/lib/gridx/gridx/grid-all.js
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
at org.eclipse.jetty.util.resource.PathResource.<init>(PathResource.java:202)
at org.eclipse.jetty.util.resource.PathResource.addPath(PathResource.java:293)
at org.eclipse.jetty.servlet.DefaultServlet.getResource(DefaultServlet.java:401)
at org.eclipse.jetty.server.ResourceCache.getContent(ResourceCache.java:202)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:468)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.eclipse.jetty.server.Server.handle(Server.java:524)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
at java.lang.Thread.run(Thread.java:745)

_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev



_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-dev


Back to the top