forked from mirrors/gecko-dev
		
	Bug 1752498 - XML error shows garbage for location. r=bholley
Differential Revision: https://phabricator.services.mozilla.com/D137262
This commit is contained in:
		
							parent
							
								
									a9dda47334
								
							
						
					
					
						commit
						dd05949994
					
				
					 3 changed files with 48 additions and 6 deletions
				
			
		|  | @ -4,6 +4,7 @@ | ||||||
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||||||
| 
 | 
 | ||||||
| #include "nsExpatDriver.h" | #include "nsExpatDriver.h" | ||||||
|  | #include "mozilla/fallible.h" | ||||||
| #include "nsCOMPtr.h" | #include "nsCOMPtr.h" | ||||||
| #include "nsParserCIID.h" | #include "nsParserCIID.h" | ||||||
| #include "CParserContext.h" | #include "CParserContext.h" | ||||||
|  | @ -15,6 +16,7 @@ | ||||||
| #include "nsIUnicharInputStream.h" | #include "nsIUnicharInputStream.h" | ||||||
| #include "nsIProtocolHandler.h" | #include "nsIProtocolHandler.h" | ||||||
| #include "nsNetUtil.h" | #include "nsNetUtil.h" | ||||||
|  | #include "nsString.h" | ||||||
| #include "nsTextFormatter.h" | #include "nsTextFormatter.h" | ||||||
| #include "nsDirectoryServiceDefs.h" | #include "nsDirectoryServiceDefs.h" | ||||||
| #include "nsCRT.h" | #include "nsCRT.h" | ||||||
|  | @ -46,6 +48,7 @@ | ||||||
| using mozilla::fallible; | using mozilla::fallible; | ||||||
| using mozilla::LogLevel; | using mozilla::LogLevel; | ||||||
| using mozilla::MakeStringSpan; | using mozilla::MakeStringSpan; | ||||||
|  | using mozilla::Unused; | ||||||
| using mozilla::dom::Document; | using mozilla::dom::Document; | ||||||
| 
 | 
 | ||||||
| // We only pass chunks of length sMaxChunkLength to Expat in the RLBOX sandbox.
 | // We only pass chunks of length sMaxChunkLength to Expat in the RLBOX sandbox.
 | ||||||
|  | @ -1041,12 +1044,18 @@ nsresult nsExpatDriver::HandleError() { | ||||||
|                        1; |                        1; | ||||||
|   uint32_t lineNumber = RLBOX_EXPAT_SAFE_MCALL(MOZ_XML_GetCurrentLineNumber, |   uint32_t lineNumber = RLBOX_EXPAT_SAFE_MCALL(MOZ_XML_GetCurrentLineNumber, | ||||||
|                                                safe_unverified<XML_Size>); |                                                safe_unverified<XML_Size>); | ||||||
| 
 |   const XML_Char* expatBase = | ||||||
|  |       RLBOX_EXPAT_MCALL(MOZ_XML_GetBase) | ||||||
|  |           .copy_and_verify_address(unverified_xml_string); | ||||||
|  |   nsAutoString uri; | ||||||
|  |   nsCOMPtr<nsIURI> baseURI; | ||||||
|  |   if (expatBase && (baseURI = GetBaseURI(expatBase))) { | ||||||
|  |     // Let's ignore if this fails, we're already reporting a parse error.
 | ||||||
|  |     Unused << CopyUTF8toUTF16(baseURI->GetSpecOrDefault(), uri, fallible); | ||||||
|  |   } | ||||||
|   nsAutoString errorText; |   nsAutoString errorText; | ||||||
|   const auto* aBase = RLBOX_EXPAT_MCALL(MOZ_XML_GetBase) |   CreateErrorText(description.get(), uri.get(), lineNumber, colNumber, | ||||||
|                           .copy_and_verify_address(unverified_xml_string); |                   errorText, spoofEnglish); | ||||||
|   CreateErrorText(description.get(), aBase, lineNumber, colNumber, errorText, |  | ||||||
|                   spoofEnglish); |  | ||||||
| 
 | 
 | ||||||
|   nsAutoString sourceText(mLastLine); |   nsAutoString sourceText(mLastLine); | ||||||
|   AppendErrorPointer(colNumber, mLastLine.get(), sourceText); |   AppendErrorPointer(colNumber, mLastLine.get(), sourceText); | ||||||
|  |  | ||||||
|  | @ -140,7 +140,8 @@ skip-if = (xorigin && debug) | ||||||
| support-files = | support-files = | ||||||
|   file_defer_bug1104732.js |   file_defer_bug1104732.js | ||||||
|   file_async_bug1104732.sjs |   file_async_bug1104732.sjs | ||||||
| 
 | [test_bug1752498.html] | ||||||
|  | skip-if = true # Bug 1751796 | ||||||
| [test_compatmode.html] | [test_compatmode.html] | ||||||
| [test_html5_tree_construction.html] | [test_html5_tree_construction.html] | ||||||
| [test_html5_tree_construction_part2.html] | [test_html5_tree_construction_part2.html] | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								parser/htmlparser/tests/mochitest/test_bug1752498.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								parser/htmlparser/tests/mochitest/test_bug1752498.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | ||||||
|  | <!DOCTYPE HTML> | ||||||
|  | <html> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |   <title><!-- TODO: insert title here --></title> | ||||||
|  |   <script src="/tests/SimpleTest/SimpleTest.js"></script> | ||||||
|  |   <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> | ||||||
|  |   <script> | ||||||
|  |     add_task(async function test() { | ||||||
|  |       let string = "<p>Not a <<b>well-formed</b> xml string</p>"; | ||||||
|  |       // Line and column are 1-based. | ||||||
|  |       let line = (string.match(/\r\n|\r|\n/g)?.length || 0) + 1; | ||||||
|  |       let column = string.search("<b>") + 1; | ||||||
|  |       let expectedError = `XML Parsing Error: not well-formed | ||||||
|  | Location: ${location.href} | ||||||
|  | Line Number ${line}, Column ${column}:${string} | ||||||
|  | ${"^".padStart(column, "-")}`; | ||||||
|  | 
 | ||||||
|  |       let error = new window.DOMParser() | ||||||
|  |         .parseFromString(string, "text/xml") | ||||||
|  |         .getElementsByTagName("parsererror")[0].textContent; | ||||||
|  | 
 | ||||||
|  |       is(error, expectedError, "Check that parsererror contains the right data."); | ||||||
|  |     }); | ||||||
|  |   </script> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  | <p id="display"></p> | ||||||
|  | <div id="content" style="display: none"></div> | ||||||
|  | <pre id="test"></pre> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
		Loading…
	
		Reference in a new issue
	
	 Peter Van der Beken
						Peter Van der Beken