From 5698608b5ac2e7a5ff24d9e6927bf134b76f8e85 Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Tue, 7 Dec 2021 15:03:30 +0100 Subject: [PATCH] [ecmascript] fix form_view issue --- src/ecmascript/quickjs/form.c | 17 +++++++++++++++-- src/ecmascript/spidermonkey/form.c | 26 ++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/ecmascript/quickjs/form.c b/src/ecmascript/quickjs/form.c index 1fc171e1f..97bf1c9d0 100644 --- a/src/ecmascript/quickjs/form.c +++ b/src/ecmascript/quickjs/form.c @@ -549,8 +549,21 @@ js_form_get_property_elements(JSContext *ctx, JSValueConst this_val) #endif struct ecmascript_interpreter *interpreter = JS_GetContextOpaque(ctx); struct view_state *vs = interpreter->vs; - struct form_view *fv = vs->forms.next; - if (!fv) { + + struct form *form = form_GetOpaque(this_val); + assert(form); + + struct form_view *fv = nullptr; + bool found = false; + + foreach (fv, vs->forms) { + if (form->form_num == fv->form_num) { + found = true; + break; + } + } + + if (!found || !fv) { #ifdef ECMASCRIPT_DEBUG fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__); #endif diff --git a/src/ecmascript/spidermonkey/form.c b/src/ecmascript/spidermonkey/form.c index 05017c977..1ec7edee2 100644 --- a/src/ecmascript/spidermonkey/form.c +++ b/src/ecmascript/spidermonkey/form.c @@ -994,12 +994,30 @@ form_get_property_elements(JSContext *ctx, unsigned int argc, JS::Value *vp) return false; } - struct form_view *fv = vs->forms.next; - if (!fv) { + struct form *form = JS_GetInstancePrivate(ctx, hobj, &form_class, nullptr); + + if (!form) { #ifdef ECMASCRIPT_DEBUG - fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__); + fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__); #endif - return false; /* detached */ + return false; + } + + struct form_view *fv = nullptr; + bool found = false; + + foreach (fv, vs->forms) { + if (fv->form_num == form->form_num) { + found = true; + break; + } + } + + if (!found || !fv) { +#ifdef ECMASCRIPT_DEBUG + fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__); +#endif + return false; } /* jsform ('form') is form_elements' parent; who knows is that's correct */