xml parser BUGFIX double free
value was freed but counter wasn't decremented and lyxml_context_clear then caused double free error
diff --git a/src/xml.c b/src/xml.c
index b5af06f..23c0307 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -703,7 +703,7 @@
                     e = (struct lyxml_elem*)context->elements.objs[context->elements.count - 1];
                     LY_CHECK_ERR_GOTO(e->prefix_len != prefix_len || e->name_len != name_len
                                       || (prefix_len && strncmp(prefix, e->prefix, e->prefix_len)) || strncmp(name, e->name, e->name_len),
-                            free(e); LOGVAL(ctx, LY_VLOG_LINE, &fakecontext.line, LYVE_SYNTAX,
+                            free(e); --context->elements.count; LOGVAL(ctx, LY_VLOG_LINE, &fakecontext.line, LYVE_SYNTAX,
                                             "Opening and closing elements tag missmatch (\"%.*s\").", name_len, name),
                             error);
                     /* opening and closing element tags matches */
diff --git a/tests/src/test_xml.c b/tests/src/test_xml.c
index ebca0da..75819b7 100644
--- a/tests/src/test_xml.c
+++ b/tests/src/test_xml.c
@@ -224,6 +224,15 @@
     logbuf_assert("Mixed XML content is not allowed (text <b>). Line number 1.");
     lyxml_context_clear(&ctx);
 
+    /* tag missmatch */
+    str = "<a>text</b>";
+    assert_int_equal(LY_SUCCESS, lyxml_get_element(&ctx, &str, &prefix, &prefix_len, &name, &name_len));
+    assert_string_equal("text</b>", str);
+    assert_int_equal(LYXML_ELEM_CONTENT, ctx.status);
+    assert_int_equal(LY_EVALID, lyxml_get_string(&ctx, &str, &buf, &buf_len, &out, &len, &dynamic));
+    logbuf_assert("Opening and closing elements tag missmatch (\"b\"). Line number 1.");
+    lyxml_context_clear(&ctx);
+
 }
 
 static void