[Scummvm-cvs-logs] scummvm master -> 4920b3ab3ef104cc2278ad7e52fe120bde6c7336

tramboi bertrand_augereau at yahoo.fr
Mon Nov 9 22:54:00 CET 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4920b3ab3e COMMON: Some ill-formed xml files triggered a seek(CUR, -2) in the parser


Commit: 4920b3ab3ef104cc2278ad7e52fe120bde6c7336
    https://github.com/scummvm/scummvm/commit/4920b3ab3ef104cc2278ad7e52fe120bde6c7336
Author: Bertrand Augereau (bertrand.augereau at gmail.com)
Date: 2015-11-09T22:51:15+01:00

Commit Message:
COMMON: Some ill-formed xml files triggered a seek(CUR, -2) in the parser

Changed paths:
    common/xmlparser.cpp



diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp
index 67a3d36..da4f577 100644
--- a/common/xmlparser.cpp
+++ b/common/xmlparser.cpp
@@ -97,36 +97,38 @@ bool XMLParser::parserError(const String &errStr) {
 	assert(_stream->pos() == startPosition);
 	currentPosition = startPosition;
 
-	int keyOpening = 0;
-	int keyClosing = 0;
-
-	while (currentPosition-- && keyOpening == 0) {
-		_stream->seek(-2, SEEK_CUR);
-		c = _stream->readByte();
+	Common::String errorMessage = Common::String::format("\n  File <%s>, line %d:\n", _fileName.c_str(), lineCount);
 
-		if (c == '<')
-			keyOpening = currentPosition - 1;
-		else if (c == '>')
-			keyClosing = currentPosition;
-	}
+	if (startPosition > 1) {
+		int keyOpening = 0;
+		int keyClosing = 0;
 
-	_stream->seek(startPosition, SEEK_SET);
-	currentPosition = startPosition;
-	while (keyClosing == 0 && c && currentPosition++) {
-		c = _stream->readByte();
+		while (currentPosition-- && keyOpening == 0) {
+			_stream->seek(-2, SEEK_CUR);
+			c = _stream->readByte();
 
-		if (c == '>')
-			keyClosing = currentPosition;
-	}
+			if (c == '<')
+				keyOpening = currentPosition - 1;
+			else if (c == '>')
+				keyClosing = currentPosition;
+		}
 
-	Common::String errorMessage = Common::String::format("\n  File <%s>, line %d:\n", _fileName.c_str(), lineCount);
+		_stream->seek(startPosition, SEEK_SET);
+		currentPosition = startPosition;
+		while (keyClosing == 0 && c && currentPosition++) {
+			c = _stream->readByte();
 
-	currentPosition = (keyClosing - keyOpening);
-	_stream->seek(keyOpening, SEEK_SET);
+			if (c == '>')
+				keyClosing = currentPosition;
+		}
 
-	while (currentPosition--)
-		errorMessage += (char)_stream->readByte();
+		currentPosition = (keyClosing - keyOpening);
+		_stream->seek(keyOpening, SEEK_SET);
 
+		while (currentPosition--)
+			errorMessage += (char)_stream->readByte();
+	}
+	
 	errorMessage += "\n\nParser error: ";
 	errorMessage += errStr;
 	errorMessage += "\n\n";






More information about the Scummvm-git-logs mailing list