View | Details | Raw Unified | Return to bug 45272
Collapse All | Expand All

(-)java/org/apache/tomcat/util/http/ServerCookie.java (-5 / +23 lines)
Lines 135-140 Link Here
135
    
135
    
136
    private static final String tspecials = ",; ";
136
    private static final String tspecials = ",; ";
137
    private static final String tspecials2 = "()<>@,;:\\\"/[]?={} \t";
137
    private static final String tspecials2 = "()<>@,;:\\\"/[]?={} \t";
138
    private static final String tspecials2NoSlash = "()<>@,;:\\\"[]?={} \t";
138
139
139
    /*
140
    /*
140
     * Tests a string and returns true if the string counts as a
141
     * Tests a string and returns true if the string counts as a
Lines 146-151 Link Here
146
     *              token; <code>false</code> if it is not
147
     *              token; <code>false</code> if it is not
147
     */
148
     */
148
    public static boolean isToken(String value) {
149
    public static boolean isToken(String value) {
150
        return isToken(value,null);
151
    }
152
    
153
    public static boolean isToken(String value, String literals) {
154
        String tspecials = (literals==null?ServerCookie.tspecials:literals);
149
        if( value==null) return true;
155
        if( value==null) return true;
150
        int len = value.length();
156
        int len = value.length();
151
157
Lines 172-179 Link Here
172
        return false;
178
        return false;
173
    }
179
    }
174
180
181
    public static boolean isToken2(String value) {
182
        return isToken2(value,null);
183
    }
175
184
176
    public static boolean isToken2(String value) {
185
    public static boolean isToken2(String value, String literals) {
186
        String tspecials2 = (literals==null?ServerCookie.tspecials2:literals);
177
        if( value==null) return true;
187
        if( value==null) return true;
178
        int len = value.length();
188
        int len = value.length();
179
189
Lines 299-305 Link Here
299
        // Path=path
309
        // Path=path
300
        if (path!=null) {
310
        if (path!=null) {
301
            buf.append ("; Path=");
311
            buf.append ("; Path=");
302
            maybeQuote2(version, buf, path);
312
            if (version==0) {
313
                maybeQuote2(version, buf, path);
314
            } else {
315
                maybeQuote2(version, buf, path, ServerCookie.tspecials2NoSlash, false);
316
            }
303
        }
317
        }
304
318
305
        // Secure
319
        // Secure
Lines 341-346 Link Here
341
    }
355
    }
342
356
343
    public static int maybeQuote2 (int version, StringBuffer buf, String value, boolean allowVersionSwitch) {
357
    public static int maybeQuote2 (int version, StringBuffer buf, String value, boolean allowVersionSwitch) {
358
        return maybeQuote2(version,buf,value,null,allowVersionSwitch);
359
    }
360
361
    public static int maybeQuote2 (int version, StringBuffer buf, String value, String literals, boolean allowVersionSwitch) {
344
        if (value==null || value.length()==0) {
362
        if (value==null || value.length()==0) {
345
            buf.append("\"\"");
363
            buf.append("\"\"");
346
        }else if (containsCTL(value,version)) 
364
        }else if (containsCTL(value,version)) 
Lines 349-364 Link Here
349
            buf.append('"');
367
            buf.append('"');
350
            buf.append(escapeDoubleQuotes(value,1,value.length()-1));
368
            buf.append(escapeDoubleQuotes(value,1,value.length()-1));
351
            buf.append('"');
369
            buf.append('"');
352
        } else if (allowVersionSwitch && (!STRICT_SERVLET_COMPLIANCE) && version==0 && !isToken2(value)) {
370
        } else if (allowVersionSwitch && (!STRICT_SERVLET_COMPLIANCE) && version==0 && !isToken2(value, literals)) {
353
            buf.append('"');
371
            buf.append('"');
354
            buf.append(escapeDoubleQuotes(value,0,value.length()));
372
            buf.append(escapeDoubleQuotes(value,0,value.length()));
355
            buf.append('"');
373
            buf.append('"');
356
            version = 1;
374
            version = 1;
357
        } else if (version==0 && !isToken(value)) {
375
        } else if (version==0 && !isToken(value,literals)) {
358
            buf.append('"');
376
            buf.append('"');
359
            buf.append(escapeDoubleQuotes(value,0,value.length()));
377
            buf.append(escapeDoubleQuotes(value,0,value.length()));
360
            buf.append('"');
378
            buf.append('"');
361
        } else if (version==1 && !isToken2(value)) {
379
        } else if (version==1 && !isToken2(value,literals)) {
362
            buf.append('"');
380
            buf.append('"');
363
            buf.append(escapeDoubleQuotes(value,0,value.length()));
381
            buf.append(escapeDoubleQuotes(value,0,value.length()));
364
            buf.append('"');
382
            buf.append('"');

Return to bug 45272