summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2016-11-13 16:59:14 -0800
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2016-11-13 16:59:14 -0800
commit1e23402eb23adf4ecd6c1c6bc83ecf21c8e0a6cd (patch)
tree847f7cb9ad1db1e5ce21b344e05d0abc10d64f29 /src
parent5ca7e7cffc53b2378d3d9eb5168458935ca21627 (diff)
Change status_end_element_mismatch to point to closing tag name
Previously the error offset pointed to the first mismatching character, which can be confusing especially if the start tag name is a prefix of the end tag name. Instead, move the offset to the first character of the name - that way it should be more obvious that the problem is that the entire name mismatches. Fixes #112.
Diffstat (limited to 'src')
-rw-r--r--src/pugixml.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index dc3e7be..f4fa792 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -3346,18 +3346,20 @@ PUGI__NS_BEGIN
{
++s;
+ mark = s;
+
char_t* name = cursor->name;
- if (!name) PUGI__THROW_ERROR(status_end_element_mismatch, s);
+ if (!name) PUGI__THROW_ERROR(status_end_element_mismatch, mark);
while (PUGI__IS_CHARTYPE(*s, ct_symbol))
{
- if (*s++ != *name++) PUGI__THROW_ERROR(status_end_element_mismatch, s);
+ if (*s++ != *name++) PUGI__THROW_ERROR(status_end_element_mismatch, mark);
}
if (*name)
{
if (*s == 0 && name[0] == endch && name[1] == 0) PUGI__THROW_ERROR(status_bad_end_element, s);
- else PUGI__THROW_ERROR(status_end_element_mismatch, s);
+ else PUGI__THROW_ERROR(status_end_element_mismatch, mark);
}
PUGI__POPNODE(); // Pop.