Changeset b8f17c7


Ignore:
Timestamp:
Jan 6, 2018 11:23:47 AM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
f32d3aae
Parents:
d82499f
Message:

i2ptunnel: Escape chars unescaped by browsers (ticket #2130)

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java

    rd82499f rb8f17c7  
    481481                    // This will be the incoming URI but will then get modified
    482482                    // to be the outgoing URI (with http:// if going to outproxy, otherwise without)
    483                     URI requestURI;
     483                    URI requestURI = null;
    484484                    try {
    485                         origRequestURI = requestURI = new URI(request);
     485                        try {
     486                            requestURI = new URI(request);
     487                        } catch(URISyntaxException use) {
     488                            // fixup []| in path/query not escaped by browsers, see ticket #2130
     489                            boolean error = true;
     490                            // find 3rd /
     491                            int idx = 0;
     492                            for (int i = 0; i < 2; i++) {
     493                                idx = request.indexOf('/', idx);
     494                                if (idx < 0)
     495                                    break;
     496                                idx++;
     497                            }
     498                            if (idx > 0) {
     499                                String schemeHostPort = request.substring(0, idx);
     500                                String rest = request.substring(idx);
     501                                rest = rest.replace("[", "%5B");
     502                                rest = rest.replace("]", "%5D");
     503                                rest = rest.replace("|", "%7C");
     504                                String testRequest = schemeHostPort + rest;
     505                                if (!testRequest.equals(request)) {
     506                                    try {
     507                                        requestURI = new URI(testRequest);
     508                                        request = testRequest;
     509                                        error = false;
     510                                    } catch(URISyntaxException use2) {
     511                                        // didn't work, give up
     512                                    }
     513                                }
     514                            }
     515                            // guess it wasn't []|
     516                            if (error)
     517                                throw use;
     518                        }
     519                        origRequestURI = requestURI;
    486520                        if(requestURI.getRawUserInfo() != null || requestURI.getRawFragment() != null) {
    487521                            // these should never be sent to the proxy in the request line
     
    502536                            _log.warn(getPrefix(requestId) + "Bad request [" + request + "]", use);
    503537                        }
    504                         // TODO fixup []| not escaped by browsers
    505538                        try {
    506539                            out.write(getErrorPage("baduri", ERR_BAD_URI).getBytes("UTF-8"));
  • history.txt

    rd82499f rb8f17c7  
     12018-01-06 zzz
     2 * i2ptunnel: Escape chars unescaped by browsers (ticket #2130)
     3 * i2ptunnel, eepget: Better error message on invalid URLs (ticket #2130)
     4
    152018-01-04 zzz
    26 * i2psnark: Fix overflow in ratio sorter (ticket #2129)
  • router/java/src/net/i2p/router/RouterVersion.java

    rd82499f rb8f17c7  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 17;
     21    public final static long BUILD = 18;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.