XMLC or Tidy DOM Bug
"Aaron M. Folmsbee" <[email protected]> Fri, 17 Feb 2006 18:33:29 -0800
| Newsgroups | gmane.comp.java.enhydra.barracuda.general |
|---|---|
| Message-ID | <[email protected]> |
This is a cryptographically signed message in MIME format.
--------------ms080801080808090604060808
Content-Type: multipart/alternative;
boundary="------------020209070906050707040100"
This is a multi-part message in MIME format.
--------------020209070906050707040100
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
I've come across an insidious bug with either XMLC or tidy. It is
unclear which.
Given the following HTML:
<html>
<body>
<table>
<tr>
<td>
<input type="hidden" name="xxxx" value="xxx">
</td>
</tr>
</table>
<div id="sibling">
Sibling to table.
</div>
</body>
<html>
Compiling with XMLC properly results in the following DOM tree:
[xmlc] DOM hierarchy:
[xmlc] LazyHTMLDocument%[T]:
[xmlc] HTMLHtmlElementImpl: HTML
[xmlc] HTMLHeadElementImpl: HEAD
[xmlc] HTMLTitleElementImpl: TITLE
[xmlc] HTMLBodyElementImpl: BODY
[xmlc] HTMLTableElementImpl: TABLE
[xmlc] HTMLTableRowElementImpl: TR
[xmlc] HTMLTableCellElementImpl: TD
[xmlc] HTMLInputElementImpl: INPUT:
name="xxxx" type="hidden" value="xxx"
[xmlc] LazyText:
[xmlc] HTMLDivElementImpl: DIV: id="sibling"
[xmlc] LazyText: Sibling to table.
If you add a '/' to the input element <input type="hidden" ... />, the
DOM will be incorrect, with what should be sibling elements ending up as
child elements of the table:
[xmlc] DOM hierarchy:
[xmlc] LazyHTMLDocument%[T]:
[xmlc] HTMLHtmlElementImpl: HTML
[xmlc] HTMLHeadElementImpl: HEAD
[xmlc] HTMLTitleElementImpl: TITLE
[xmlc] HTMLBodyElementImpl: BODY
[xmlc] HTMLTableElementImpl: TABLE
[xmlc] HTMLTableRowElementImpl: TR
[xmlc] HTMLTableCellElementImpl: TD
[xmlc] HTMLInputElementImpl: INPUT:
name="xxxx" type="hidden" value="xxx"
[xmlc] LazyText:
[xmlc] HTMLDivElementImpl: DIV: id="sibling"
[xmlc] LazyText: Sibling to table.
Note that the sibling DIV element is now a child of the table element.
Using either <input> or <input></input> works, but <input/> will cause
the problem.
The result is that when rendering, elements that should have been
sibling (same level) as the table will be added to the table as new rows.
I don't believe the <input/> syntax is in any way invalid, so this seems
to be a bug.
The command line version of tidy doesn't seem to care which way the
input element is terminated...
--------------020209070906050707040100
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
<font size="-2">I've come across an insidious bug with either XMLC or
tidy. It is unclear which.<br>
<br>
Given the following HTML:<br>
<br>
</font><font size="-2"><font face="Courier New"><html><br>
<body><br>
<table><br>
<tr><br>
<td><br>
<input type="hidden" name="xxxx" value="xxx"><br>
</td><br>
</tr><br>
</table><br>
<br>
<div id="sibling"><br>
Sibling to table.<br>
</div><br>
<br>
</body><br>
<html></font></font><font size="-2"><br>
<br>
Compiling with XMLC properly results in the following DOM tree:<br>
<br>
<font face="Courier New">[xmlc] DOM hierarchy:<br>
[xmlc] LazyHTMLDocument%[T]:<br>
[xmlc] HTMLHtmlElementImpl: HTML<br>
[xmlc] HTMLHeadElementImpl: HEAD<br>
[xmlc] HTMLTitleElementImpl: TITLE<br>
[xmlc] HTMLBodyElementImpl: BODY<br>
[xmlc] HTMLTableElementImpl: TABLE<br>
[xmlc] HTMLTableRowElementImpl: TR<br>
[xmlc] HTMLTableCellElementImpl: TD<br>
[xmlc] HTMLInputElementImpl: INPUT:
name="xxxx" type="hidden" value="xxx"<br>
[xmlc] LazyText:<br>
[xmlc] HTMLDivElementImpl: DIV: id="sibling"<br>
[xmlc] LazyText: Sibling to table.<br>
</font><br>
<br>
If you add a '/' to the input element <input type="hidden" ...
/>, the DOM will be incorrect, with what should be sibling elements
ending up as child elements of the table:<br>
<br>
</font><font face="Courier New" size="-2">[xmlc] DOM hierarchy:<br>
[xmlc] LazyHTMLDocument%[T]:<br>
[xmlc] HTMLHtmlElementImpl: HTML<br>
[xmlc] HTMLHeadElementImpl: HEAD<br>
[xmlc] HTMLTitleElementImpl: TITLE<br>
[xmlc] HTMLBodyElementImpl: BODY<br>
[xmlc] HTMLTableElementImpl: TABLE<br>
[xmlc] HTMLTableRowElementImpl: TR<br>
[xmlc] HTMLTableCellElementImpl: TD<br>
[xmlc] HTMLInputElementImpl: INPUT:
name="xxxx" type="hidden" value="xxx"<br>
[xmlc] LazyText:<br>
[xmlc] HTMLDivElementImpl: DIV: id="sibling"<br>
[xmlc] LazyText: Sibling to table.<br>
</font><font size="-2"><br>
Note that the sibling DIV element is now a child of the table element.<br>
<br>
Using either <input> or <input></input> works, but
<input/> will cause the problem.<br>
<br>
The result is that when rendering, elements that should have been
sibling (same level) as the table will be added to the table as new
rows.<br>
<br>
I don't believe the <input/> syntax is in any way invalid, so
this seems to be a bug.<br>
<br>
The command line version of tidy doesn't seem to care which way the
input element is terminated...<br>
<br>
<br>
<br>
<br>
<br>
<br>
</font>
</body>
</html>
--------------020209070906050707040100--
--------------ms080801080808090604060808
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEH
AQAAoIIQHDCCBSowggSToAMCAQICBAIAApowDQYJKoZIhvcNAQEFBQAwdTEL
MAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UE
CxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYDVQQDExpH
VEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdDAeFw0wMjA4MjcxOTAyMDBaFw0x
MjA4MjcyMzU5MDBaMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2Rv
IExpbWl0ZWQxHTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYD
VQQLEz1UZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cu
Y29tb2RvLm5ldC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAyIENvbW9k
byBMaW1pdGVkMSwwKgYDVQQDEyNDb21vZG8gQ2xhc3MgMyBTZWN1cml0eSBT
ZXJ2aWNlcyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPIM
ts+HhOoKcRRSLehXXElSOs/D8EJtYvL+puk+PHhkAw4gfmtraYeJVDgF9NrH
BUAFGHd+/GuLDhyigsyshZs56ctLSBhIayjkwtFbrgOpfpgvTBNx37ApDE6q
pjcmOLnQRFKCkD5wSNZ6mwkHvJTk9FUs8rcqvhyRHGqLg001bBDhc9oh2WLY
8Rmw8ecgjbWXRyNLaoE1G69I4DaokExNTOz1iM7GsdAv/3mQAdhRZOcvsQiN
Xc+t+rKAlqusi7VMtHTCRxPt6CMx9Cq5YRu9zqRbNzG95Zyc+7IP18U7v8xa
qw/IhkCJIqaQINOzbL4S8+MgLLvBrkNa2hZ26B8CAwEAAaOCAdkwggHVMEUG
A1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0LmNvbS9j
Z2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFDbg6HxtnUWR7pnl
QnZNcLNQMKxeMIGSBgNVHSAEgYowgYcwSQYKKoZIhvhjAQIBBTA7MDkGCCsG
AQUFBwIBFi1odHRwOi8vd3d3LnB1YmxpYy10cnVzdC5jb20vQ1BTL09tbmlS
b290Lmh0bWwwOgYMKwYBBAGyMQECAQMBMCowKAYIKwYBBQUHAgEWHGh0dHBz
Oi8vc2VjdXJlLmNvbW9kby5uZXQvQ1AwgYkGA1UdIwSBgTB/oXmkdzB1MQsw
CQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdU
RSBDeWJlclRydXN0IEdsb2JhbCBSb290ggIBpTArBgNVHRAEJDAigA8yMDAy
MDgyNzE5MDIyNFqBDzIwMDkwODI3MjM1OTAwWjAOBgNVHQ8BAf8EBAMCAeYw
DwYDVR0TBAgwBgEB/wIBADANBgkqhkiG9w0BAQUFAAOBgQA6HiRv2ts2bP46
czndzWocaaEAH2/UrtUf1IgppSHCV/ZVezDn0mTWDsSqcDx2dOIqrsdGZzKS
yUvxp9fgVrz2chCdf7B11p1XtXGFqsQ6p0u47A/m0vj/tc3URSWs6ganirXN
MiLkIZIb7840rjBEGu6bf/CUEYaKhxkBKDrPszCCBXMwggRboAMCAQICEHg7
s7MUzEd/ZrfsHdab4JYwDQYJKoZIhvcNAQEFBQAwgdwxCzAJBgNVBAYTAkdC
MRcwFQYDVQQKEw5Db21vZG8gTGltaXRlZDEdMBsGA1UECxMUQ29tb2RvIFRy
dXN0IE5ldHdvcmsxRjBEBgNVBAsTPVRlcm1zIGFuZCBDb25kaXRpb25zIG9m
IHVzZTogaHR0cDovL3d3dy5jb21vZG8ubmV0L3JlcG9zaXRvcnkxHzAdBgNV
BAsTFihjKTIwMDIgQ29tb2RvIExpbWl0ZWQxLDAqBgNVBAMTI0NvbW9kbyBD
bGFzcyAzIFNlY3VyaXR5IFNlcnZpY2VzIENBMB4XDTA1MDkwMTAwMDAwMFoX
DTA2MDkwMTIzNTk1OVowgdwxNTAzBgNVBAsTLENvbW9kbyBUcnVzdCBOZXR3
b3JrIC0gUEVSU09OQSBOT1QgVkFMSURBVEVEMUYwRAYDVQQLEz1UZXJtcyBh
bmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9y
ZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAzIENvbW9kbyBMaW1pdGVkMRcw
FQYDVQQDEw5BYXJvbiBGb2xtc2JlZTEhMB8GCSqGSIb3DQEJARYSYWFyb25A
Zm9sbXNiZWUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVVpV/
4FGA8Vn/gwqa34/8BVlguLbnfwv3gbWvlOUDxz8a5vkDMM+tZM8L+7CNP9rk
2zOcwHMSM8x9twnexLzqnqmd4wug9A7EoaWLJ7b+1XZYrqhlVw6c5Te4fcGP
AKZ5qzJnpouTrflkywbFjH96SuYy4YTBkKYHZVMZSt5AeQIDAQABo4IBsTCC
Aa0wHwYDVR0jBBgwFoAUNuDofG2dRZHumeVCdk1ws1AwrF4wHQYDVR0OBBYE
FNmjYZDisnf96BBdDH7pJEsAFXBcMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMB
Af8EAjAAMCAGA1UdJQQZMBcGCCsGAQUFBwMEBgsrBgEEAbIxAQMFAjARBglg
hkgBhvhCAQEEBAMCBSAwRgYDVR0gBD8wPTA7BgwrBgEEAbIxAQIBAQEwKzAp
BggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29tb2RvLm5ldC9DUFMwgbAG
A1UdHwSBqDCBpTA4oDagNIYyaHR0cDovL2NybC5jb21vZG8ubmV0L0NsYXNz
M1NlY3VyaXR5U2VydmljZXNfMy5jcmwwOqA4oDaGNGh0dHA6Ly9jcmwuY29t
b2RvY2EuY29tL0NsYXNzM1NlY3VyaXR5U2VydmljZXNfMy5jcmwwLaAroCmB
J0NsYXNzM1NlY3VyaXR5U2VydmljZXNfM0BjcmwuY29tb2RvLm5ldDAdBgNV
HREEFjAUgRJhYXJvbkBmb2xtc2JlZS5jb20wDQYJKoZIhvcNAQEFBQADggEB
AOOQ+iNPhdcrlTg5XCIb4aG80NdXkikf2iW3Ha0eT/1EGGlbWOi+C255sZ++
wSHQ2ZsVBFKIzi/tIppqW5pewYN41sVoOB56ZwykVbA79W43RvVo1tnz8RG7
iOXAMHmKNJvZlGQM7iitwLi+f09OUVlYP4pOPJx20p7BjPRQkRmPOF6tIlWp
N384nXcl6eWnxY7MaBGS92tVUw0qHOzaOyvgkF3n8ReGqLOFU1I0HO3+1q/0
+ZfUxyA0LcOEIOxPr66BfRjv+6LpgHy4AdMypZtBJdlS3s1XLlhfLyQ7VGSH
Lcq8HAXJ3AGx3OD2ZW/TGykp3HZUWYYJaPi4Pd8gn8YwggVzMIIEW6ADAgEC
AhB4O7OzFMxHf2a37B3Wm+CWMA0GCSqGSIb3DQEBBQUAMIHcMQswCQYDVQQG
EwJHQjEXMBUGA1UEChMOQ29tb2RvIExpbWl0ZWQxHTAbBgNVBAsTFENvbW9k
byBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz1UZXJtcyBhbmQgQ29uZGl0aW9u
cyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5ldC9yZXBvc2l0b3J5MR8w
HQYDVQQLExYoYykyMDAyIENvbW9kbyBMaW1pdGVkMSwwKgYDVQQDEyNDb21v
ZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2aWNlcyBDQTAeFw0wNTA5MDEwMDAw
MDBaFw0wNjA5MDEyMzU5NTlaMIHcMTUwMwYDVQQLEyxDb21vZG8gVHJ1c3Qg
TmV0d29yayAtIFBFUlNPTkEgTk9UIFZBTElEQVRFRDFGMEQGA1UECxM9VGVy
bXMgYW5kIENvbmRpdGlvbnMgb2YgdXNlOiBodHRwOi8vd3d3LmNvbW9kby5u
ZXQvcmVwb3NpdG9yeTEfMB0GA1UECxMWKGMpMjAwMyBDb21vZG8gTGltaXRl
ZDEXMBUGA1UEAxMOQWFyb24gRm9sbXNiZWUxITAfBgkqhkiG9w0BCQEWEmFh
cm9uQGZvbG1zYmVlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
1VaVf+BRgPFZ/4MKmt+P/AVZYLi2538L94G1r5TlA8c/Gub5AzDPrWTPC/uw
jT/a5NsznMBzEjPMfbcJ3sS86p6pneMLoPQOxKGliye2/tV2WK6oZVcOnOU3
uH3BjwCmeasyZ6aLk635ZMsGxYx/ekrmMuGEwZCmB2VTGUreQHkCAwEAAaOC
AbEwggGtMB8GA1UdIwQYMBaAFDbg6HxtnUWR7pnlQnZNcLNQMKxeMB0GA1Ud
DgQWBBTZo2GQ4rJ3/egQXQx+6SRLABVwXDAOBgNVHQ8BAf8EBAMCBaAwDAYD
VR0TAQH/BAIwADAgBgNVHSUEGTAXBggrBgEFBQcDBAYLKwYBBAGyMQEDBQIw
EQYJYIZIAYb4QgEBBAQDAgUgMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQEB
MCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BT
MIGwBgNVHR8EgagwgaUwOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvLm5ldC9D
bGFzczNTZWN1cml0eVNlcnZpY2VzXzMuY3JsMDqgOKA2hjRodHRwOi8vY3Js
LmNvbW9kb2NhLmNvbS9DbGFzczNTZWN1cml0eVNlcnZpY2VzXzMuY3JsMC2g
K6ApgSdDbGFzczNTZWN1cml0eVNlcnZpY2VzXzNAY3JsLmNvbW9kby5uZXQw
HQYDVR0RBBYwFIESYWFyb25AZm9sbXNiZWUuY29tMA0GCSqGSIb3DQEBBQUA
A4IBAQDjkPojT4XXK5U4OVwiG+GhvNDXV5IpH9oltx2tHk/9RBhpW1jovgtu
ebGfvsEh0NmbFQRSiM4v7SKaaluaXsGDeNbFaDgeemcMpFWwO/VuN0b1aNbZ
8/ERu4jlwDB5ijSb2ZRkDO4orcC4vn9PTlFZWD+KTjycdtKewYz0UJEZjzhe
rSJVqTd/OJ13Jenlp8WOzGgRkvdrVVMNKhzs2jsr4JBd5/EXhqizhVNSNBzt
/tav9PmX1McgNC3DhCDsT6+ugX0Y7/ui6YB8uAHTMqWbQSXZUt7NVy5YXy8k
O1Rkhy3KvBwFydwBsdzg9mVv0xspKdx2VFmGCWj4uD3fIJ/GMYIEWzCCBFcC
AQEwgfEwgdwxCzAJBgNVBAYTAkdCMRcwFQYDVQQKEw5Db21vZG8gTGltaXRl
ZDEdMBsGA1UECxMUQ29tb2RvIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsTPVRl
cm1zIGFuZCBDb25kaXRpb25zIG9mIHVzZTogaHR0cDovL3d3dy5jb21vZG8u
bmV0L3JlcG9zaXRvcnkxHzAdBgNVBAsTFihjKTIwMDIgQ29tb2RvIExpbWl0
ZWQxLDAqBgNVBAMTI0NvbW9kbyBDbGFzcyAzIFNlY3VyaXR5IFNlcnZpY2Vz
IENBAhB4O7OzFMxHf2a37B3Wm+CWMAkGBSsOAwIaBQCgggK/MBgGCSqGSIb3
DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA2MDIxODAyMzMy
OVowIwYJKoZIhvcNAQkEMRYEFPxhd991JQi4webtibtMA2TlwxadMFIGCSqG
SIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqG
SIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIIBAgYJKwYBBAGC
NxAEMYH0MIHxMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2RvIExp
bWl0ZWQxHTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQL
Ez1UZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29t
b2RvLm5ldC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAyIENvbW9kbyBM
aW1pdGVkMSwwKgYDVQQDEyNDb21vZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2
aWNlcyBDQQIQeDuzsxTMR39mt+wd1pvgljCCAQQGCyqGSIb3DQEJEAILMYH0
oIHxMIHcMQswCQYDVQQGEwJHQjEXMBUGA1UEChMOQ29tb2RvIExpbWl0ZWQx
HTAbBgNVBAsTFENvbW9kbyBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz1UZXJt
cyBhbmQgQ29uZGl0aW9ucyBvZiB1c2U6IGh0dHA6Ly93d3cuY29tb2RvLm5l
dC9yZXBvc2l0b3J5MR8wHQYDVQQLExYoYykyMDAyIENvbW9kbyBMaW1pdGVk
MSwwKgYDVQQDEyNDb21vZG8gQ2xhc3MgMyBTZWN1cml0eSBTZXJ2aWNlcyBD
QQIQeDuzsxTMR39mt+wd1pvgljANBgkqhkiG9w0BAQEFAASBgLE6d5GKtGuo
61PV9vXp8qYwqsC+vJ+dmUArrgolCxmq4zcac6G/gV3NrGK82hIqTtB17ghD
KMcqD4KAeM4V4z5Ibk94LI1uzNU6cc6+K1ZzfYHQbQJLPa7VbKXLwAYV4Sg2
vt22ZcilFG3KQxABAWKo4Ir82ty7qBJCTrIQQsfvAAAAAAAA
--------------ms080801080808090604060808
Content-Type: text/plain; name="message-footer.txt"
Content-Disposition: inline; filename="message-footer.txt"
Content-Transfer-Encoding: 8bit
--
Barracuda mailing list
[email protected]
http://www.objectweb.org/wws/lists/projects/barracuda
--------------ms080801080808090604060808--