From df28d4345b981d2f81463215efa3284a091c3b3f Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sun, 20 Nov 2022 18:09:53 +0100 Subject: [PATCH] [ecmascript] Random fixes --- src/document/xml/renderer2.cpp | 4 +++ src/ecmascript/ecmascript.cpp | 3 +- src/ecmascript/mujs/element.cpp | 3 +- src/ecmascript/quickjs/element.cpp | 3 +- src/ecmascript/spidermonkey/element.cpp | 3 +- test/ecmascript/document_write.html | 38 +++++++++++++------------ 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/document/xml/renderer2.cpp b/src/document/xml/renderer2.cpp index 48dc8f017..42ef67acc 100644 --- a/src/document/xml/renderer2.cpp +++ b/src/document/xml/renderer2.cpp @@ -296,6 +296,10 @@ walk_tree(std::map *mapa, struct string *buf, void *nod, { xmlpp::Node *node = static_cast(nod); + if (!node) { + return; + } + if (!start) { const auto textNode = dynamic_cast(node); diff --git a/src/ecmascript/ecmascript.cpp b/src/ecmascript/ecmascript.cpp index 102b640eb..bb054f2cc 100644 --- a/src/ecmascript/ecmascript.cpp +++ b/src/ecmascript/ecmascript.cpp @@ -395,7 +395,8 @@ check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text) auto it2 = children2.begin(); auto end2 = children2.end(); for (; it2 != end2; ++it2) { - xmlAddPrevSibling(el->cobj(), (*it2)->cobj()); + auto n = xmlAddPrevSibling(el->cobj(), (*it2)->cobj()); + xmlpp::Node::create_wrapper(n); } xmlpp::Node::remove_node(el); } diff --git a/src/ecmascript/mujs/element.cpp b/src/ecmascript/mujs/element.cpp index 4589e1a87..1613b0808 100644 --- a/src/ecmascript/mujs/element.cpp +++ b/src/ecmascript/mujs/element.cpp @@ -1646,7 +1646,8 @@ mjs_element_replaceWith(js_State *J) js_pushundefined(J); return; } - xmlAddPrevSibling(el->cobj(), rep->cobj()); + auto n = xmlAddPrevSibling(el->cobj(), rep->cobj()); + xmlpp::Node::create_wrapper(n); xmlpp::Node::remove_node(el); interpreter->changed = true; diff --git a/src/ecmascript/quickjs/element.cpp b/src/ecmascript/quickjs/element.cpp index 44ff2abef..709052e8d 100644 --- a/src/ecmascript/quickjs/element.cpp +++ b/src/ecmascript/quickjs/element.cpp @@ -1787,7 +1787,8 @@ js_element_replaceWith(JSContext *ctx, JSValueConst this_val, int argc, JSValueC } JSValue replacement = argv[0]; xmlpp::Node *rep = static_cast(js_getopaque(replacement, js_element_class_id)); - xmlAddPrevSibling(el->cobj(), rep->cobj()); + auto n = xmlAddPrevSibling(el->cobj(), rep->cobj()); + xmlpp::Node::create_wrapper(n); xmlpp::Node::remove_node(el); interpreter->changed = true; diff --git a/src/ecmascript/spidermonkey/element.cpp b/src/ecmascript/spidermonkey/element.cpp index 53af4bbec..c9a939aa2 100644 --- a/src/ecmascript/spidermonkey/element.cpp +++ b/src/ecmascript/spidermonkey/element.cpp @@ -3457,7 +3457,8 @@ element_replaceWith(JSContext *ctx, unsigned int argc, JS::Value *rval) JS::RootedObject replacement(ctx, &args[0].toObject()); xmlpp::Node *rep = JS::GetMaybePtrFromReservedSlot(replacement, 0); - xmlAddPrevSibling(el->cobj(), rep->cobj()); + auto n = xmlAddPrevSibling(el->cobj(), rep->cobj()); + xmlpp::Node::create_wrapper(n); xmlpp::Node::remove_node(el); interpreter->changed = true; args.rval().setUndefined(); diff --git a/test/ecmascript/document_write.html b/test/ecmascript/document_write.html index 5b7fb3b5f..249eb5d2e 100644 --- a/test/ecmascript/document_write.html +++ b/test/ecmascript/document_write.html @@ -4,6 +4,26 @@ -| 16 colors |-