2222 "main/resources/META-INF/java-encoder-advanced.tld" : (
2323 "https://www.owasp.org/index.php/OWASP_Java_Encoder_Project#advanced" , "owasp.encoder.jakarta.advanced" ),
2424}
25+ TLD_SHORT_NAMES = {
26+ "main/resources/META-INF/java-encoder.tld" : ("java-encoder" , "e" ),
27+ "main/resources/META-INF/java-encoder-advanced.tld" : ("java-encoder" , "java-encoder" ),
28+ }
2529CONSUMERS = "test/modules/owasp.encoder.jsp.consumer/"
2630
2731
@@ -34,6 +38,17 @@ def target_path(path):
3438
3539def descriptor (text , path , translate ):
3640 root = ET .fromstring (text )
41+ namespace = JAVAX_XML if translate else JAKARTA_XML
42+ family = "jsp" if translate else "jakarta"
43+ index = 0 if translate else 1
44+ # Pin the published identities before normalization: coordinated edits to
45+ # both families must not silently redefine a user's taglib URI or metadata.
46+ for name , expected in (("uri" , TLD_URIS [path ][index ]),
47+ ("short-name" , TLD_SHORT_NAMES [path ][index ])):
48+ elements = root .findall ("{" + namespace + "}" + name )
49+ if len (elements ) != 1 or (elements [0 ].text or "" ).strip () != expected :
50+ raise ValueError ("{}/src/{}: expected exactly one <{}> with value {!r}" .format (
51+ family , path , name , expected ))
3752 if translate :
3853 for element in root .iter ():
3954 element .tag = element .tag .replace ("{" + JAVAX_XML + "}" , "{" + JAKARTA_XML + "}" )
@@ -43,15 +58,8 @@ def descriptor(text, path, translate):
4358 schema = "{http://www.w3.org/2001/XMLSchema-instance}schemaLocation"
4459 if root .get (schema ) == JAVAX_XML + " " + JAVAX_XML + "/web-jsptaglibrary_2_1.xsd" :
4560 root .set (schema , JAKARTA_XML + " " + JAKARTA_XML + "/web-jsptaglibrary_3_0.xsd" )
46- uri = root .find ("{" + JAKARTA_XML + "}uri" )
47- before , after = TLD_URIS [path ]
48- if uri is not None and uri .text == before :
49- uri .text = after
50- # This metadata difference has shipped since Jakarta support was added.
51- if path == "main/resources/META-INF/java-encoder.tld" :
52- short_name = root .find ("{" + JAKARTA_XML + "}short-name" )
53- if short_name is not None and short_name .text == "java-encoder" :
54- short_name .text = "e"
61+ root .find ("{" + JAKARTA_XML + "}uri" ).text = TLD_URIS [path ][1 ]
62+ root .find ("{" + JAKARTA_XML + "}short-name" ).text = TLD_SHORT_NAMES [path ][1 ]
5563
5664 def canonical (element ):
5765 return (element .tag , sorted (element .attrib .items ()), " " .join ((element .text or "" ).split ()),
@@ -97,8 +105,12 @@ def main():
97105 expected = (jsp / path ).read_text (encoding = "utf-8" )
98106 actual = (jakarta / target ).read_text (encoding = "utf-8" )
99107 if path in TLD_URIS :
100- expected = descriptor (expected , path , True )
101- actual = descriptor (actual , path , False )
108+ try :
109+ expected = descriptor (expected , path , True )
110+ actual = descriptor (actual , path , False )
111+ except (ValueError , ET .ParseError ) as error :
112+ errors .append (str (error ))
113+ continue
102114 else :
103115 expected = translated (expected , path )
104116 if expected != actual :
0 commit comments