ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/jasper/util/UniqueAttributesImpl.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/jasper/util/UniqueAttributesImpl.java
Status
scanned
Type
file
Name
UniqueAttributesImpl.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
4132 (4.0 KB)
MD5
0f10412462cff1f9bdca6e518da4d103
SHA1
4ac08c4ff893de7a22b4941e0512cbe6ae18d625
SHA256
e68f3105572ae06bdb8526ec82a6d65b7c38684833f296c5df9f7680bcc6c844
SHA512

      
    
SHA1_git
692a17ee1475ac6c40b3bf43bad2d012e78c49ad
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
UniqueAttributesImpl.java | 4.0 KB |

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jasper.util; import java.util.HashSet; import java.util.Set; import org.apache.jasper.compiler.Localizer; import org.xml.sax.Attributes; import org.xml.sax.helpers.AttributesImpl; /** * Wraps the default attributes implementation and ensures that each attribute has a unique qname as required by the JSP * specification. */ public class UniqueAttributesImpl extends AttributesImpl { private static final String IMPORT = "import"; private static final String PAGE_ENCODING = "pageEncoding"; private final boolean pageDirective; private final Set<String> qNames = new HashSet<>(); public UniqueAttributesImpl() { this.pageDirective = false; } public UniqueAttributesImpl(boolean pageDirective) { this.pageDirective = pageDirective; } @Override public void clear() { qNames.clear(); super.clear(); } @Override public void setAttributes(Attributes atts) { for (int i = 0; i < atts.getLength(); i++) { if (!qNames.add(atts.getQName(i))) { handleDuplicate(atts.getQName(i), atts.getValue(i)); } } super.setAttributes(atts); } @Override public void addAttribute(String uri, String localName, String qName, String type, String value) { if (qNames.add(qName)) { super.addAttribute(uri, localName, qName, type, value); } else { handleDuplicate(qName, value); } } @Override public void setAttribute(int index, String uri, String localName, String qName, String type, String value) { qNames.remove(super.getQName(index)); if (qNames.add(qName)) { super.setAttribute(index, uri, localName, qName, type, value); } else { handleDuplicate(qName, value); } } @Override public void removeAttribute(int index) { qNames.remove(super.getQName(index)); super.removeAttribute(index); } @Override public void setQName(int index, String qName) { qNames.remove(super.getQName(index)); super.setQName(index, qName); } private void handleDuplicate(String qName, String value) { if (pageDirective) { if (IMPORT.equalsIgnoreCase(qName)) { // Always merge imports int i = super.getIndex(IMPORT); String v = super.getValue(i); super.setValue(i, v + "," + value); return; } else if (PAGE_ENCODING.equalsIgnoreCase(qName)) { // Page encoding can only occur once per file so a second // attribute - even one with a duplicate value - is an error } else { // Other attributes can be repeated if and only if the values // are identical String v = super.getValue(qName); if (v.equals(value)) { return; } } } // Ordinary tag attributes can't be repeated, even with identical values throw new IllegalArgumentException(Localizer.getMessage("jsp.error.duplicateqname", qName)); } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
26.8
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9