diff --git a/src/dom/sgml/scanner.c b/src/dom/sgml/scanner.c
index 13a517ee..656fad20 100644
--- a/src/dom/sgml/scanner.c
+++ b/src/dom/sgml/scanner.c
@@ -449,13 +449,13 @@ scan_sgml_element_token(struct dom_scanner *scanner, struct dom_scanner_token *t
if (scanner->state == SGML_STATE_ELEMENT) {
/* Already inside an element so insert a tag end token
* and continue scanning in next iteration. */
- string--;
- real_length = 0;
type = SGML_TOKEN_TAG_END;
scanner_state = SGML_STATE_TEXT;
/* We are creating a 'virtual' that has no source. */
possibly_incomplete = 0;
+ string = token->string.string;
+ real_length = 0;
} else if (is_sgml_ident(*string)) {
token->string.string = string;
diff --git a/src/dom/test/test-sgml-parser-basic b/src/dom/test/test-sgml-parser-basic
index 1a22b7fe..f19f158e 100755
--- a/src/dom/test/test-sgml-parser-basic
+++ b/src/dom/test/test-sgml-parser-basic
@@ -56,7 +56,7 @@ element: root
#text: a'
test_output_equals \
-'Parse tag soup elements.' \
+'Parse tag soup elements. (I)' \
'>a' \
'
element: parent
@@ -65,6 +65,14 @@ element: parent
element: child:2
#text: a'
+test_output_equals \
+'Parse tag soup elements. (II)' \
+'< a >< b < c / >< / >' \
+'
+element: a
+ element: b
+ element: c'
+
test_output_equals \
'Parse an enclosed comment.' \
'' \