- From: CVS User ylafon <cvsmail@w3.org>
- Date: Mon, 27 Jan 2014 15:04:41 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/util In directory roscoe:/tmp/cvs-serv12316/util Modified Files: Util.java Log Message: Added support to stop recursive checking (might do it better later) --- /sources/public/2002/css-validator/org/w3c/css/util/Util.java 2012/08/04 21:17:07 1.8 +++ /sources/public/2002/css-validator/org/w3c/css/util/Util.java 2014/01/27 15:04:41 1.9 @@ -1,5 +1,5 @@ // -// $Id: Util.java,v 1.8 2012/08/04 21:17:07 ylafon Exp $ +// $Id: Util.java,v 1.9 2014/01/27 15:04:41 ylafon Exp $ // From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) // // (c) COPYRIGHT MIT and INRIA, 1997. @@ -39,10 +39,16 @@ package org.w3c.css.util; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * This class holds various utility methods. * - * @version $Revision: 1.8 $ + * @version $Revision: 1.9 $ */ public final class Util { @@ -54,6 +60,50 @@ private Util() { } + private static Pattern uri_param = Pattern.compile("[&?][^&?=]+=([^&?]+)"); + + //unravel uris contained in querystrings by url decoding and then looking for all sub URIs + // like http://www.example.com/foo?bar=http%3A%2F%2fwww.example.org%2Ftoto + // -> http://www.example.com/foo?bar=http%3A%2F%2fwww.example.org%2Ftoto + // and http://www.example.org/toto + private static ArrayList<String> parseURIs(String uri) { + ArrayList<String> uris = new ArrayList<String>(); + int pos = 0; + uris.add(uri); + // we avoid recursion by putting stuff on our plate at the right place for processing + while (pos < uris.size()) { + String u = uris.get(pos++); + Matcher m = uri_param.matcher(u); + while (m.find()) { + try { + String compound = URLDecoder.decode(m.group(1), "UTF-8"); + if (compound.contains("://")) { + uris.add(compound); + } + } catch (UnsupportedEncodingException e) { + // it is supported + } + } + } + return uris; + } + + public static boolean checkURI(String uri) { + ArrayList<String> uris = parseURIs(uri); + // now let's check if there is a recursive call + for (String u: uris) { + int qm = u.indexOf('?'); + if (qm != -1) { + u = u.substring(0, qm); + } + u.toLowerCase(); + // TODO: use a list of forbidden URIs + if (u.startsWith("http://jigsaw.w3.org/css-validator/validator")) { + return false; + } + } + return true; + } // Methods
Received on Monday, 27 January 2014 15:04:44 UTC