summaryrefslogtreecommitdiff
path: root/content/handlers/html/box_construct.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2018-10-09 17:00:22 +0100
committerVincent Sanders <vince@kyllikki.org>2018-10-09 17:00:22 +0100
commite275b3175b710d3289e83bf0130bd0504951adc2 (patch)
treee218fae2ffa11b3740fd2fca63f5c3085937f501 /content/handlers/html/box_construct.c
parent8687265c9a2f26a0ee40f80366d4f17a3d600fac (diff)
downloadnetsurf-e275b3175b710d3289e83bf0130bd0504951adc2.tar.gz
netsurf-e275b3175b710d3289e83bf0130bd0504951adc2.tar.bz2
check dom call return and improve handling of missing form type
Diffstat (limited to 'content/handlers/html/box_construct.c')
-rw-r--r--content/handlers/html/box_construct.c52
1 files changed, 30 insertions, 22 deletions
diff --git a/content/handlers/html/box_construct.c b/content/handlers/html/box_construct.c
index 5650fbf55..5e5d90d42 100644
--- a/content/handlers/html/box_construct.c
+++ b/content/handlers/html/box_construct.c
@@ -2476,49 +2476,57 @@ static bool box_input_text(html_content *html, struct box *box,
bool box_input(BOX_SPECIAL_PARAMS)
{
- struct form_control *gadget = NULL;
+ struct form_control *gadget;
dom_string *type = NULL;
dom_exception err;
nsurl *url;
nserror error;
- dom_element_get_attribute(n, corestring_dom_type, &type);
-
gadget = html_forms_get_control_for_node(content->forms, n);
- if (gadget == NULL)
- goto no_memory;
+ if (gadget == NULL) {
+ return false;
+ }
+
box->gadget = gadget;
box->flags |= IS_REPLACED;
gadget->box = box;
gadget->html = content;
- if (type && dom_string_caseless_lwc_isequal(type,
- corestring_lwc_password)) {
+ /* get entry type */
+ err = dom_element_get_attribute(n, corestring_dom_type, &type);
+ if ((err != DOM_NO_ERR) || (type == NULL)) {
+ /* no type so "text" is assumed */
+ if (box_input_text(content, box, n) == false) {
+ return false;
+ }
+ *convert_children = false;
+ return true;
+ }
+
+
+ if (dom_string_caseless_lwc_isequal(type, corestring_lwc_password)) {
if (box_input_text(content, box, n) == false)
goto no_memory;
- } else if (type && dom_string_caseless_lwc_isequal(type,
- corestring_lwc_file)) {
+ } else if (dom_string_caseless_lwc_isequal(type, corestring_lwc_file)) {
box->type = BOX_INLINE_BLOCK;
- } else if (type && dom_string_caseless_lwc_isequal(type,
+ } else if (dom_string_caseless_lwc_isequal(type,
corestring_lwc_hidden)) {
/* no box for hidden inputs */
box->type = BOX_NONE;
- } else if (type &&
- (dom_string_caseless_lwc_isequal(type,
+ } else if ((dom_string_caseless_lwc_isequal(type,
corestring_lwc_checkbox) ||
dom_string_caseless_lwc_isequal(type,
corestring_lwc_radio))) {
- } else if (type &&
- (dom_string_caseless_lwc_isequal(type,
+ } else if (dom_string_caseless_lwc_isequal(type,
corestring_lwc_submit) ||
dom_string_caseless_lwc_isequal(type,
corestring_lwc_reset) ||
dom_string_caseless_lwc_isequal(type,
- corestring_lwc_button))) {
+ corestring_lwc_button)) {
struct box *inline_container, *inline_box;
if (box_button(n, content, box, 0) == false)
@@ -2560,11 +2568,12 @@ bool box_input(BOX_SPECIAL_PARAMS)
box_add_child(box, inline_container);
- } else if (type && dom_string_caseless_lwc_isequal(type,
+ } else if (dom_string_caseless_lwc_isequal(type,
corestring_lwc_image)) {
gadget->type = GADGET_IMAGE;
- if (box->style && ns_computed_display(box->style,
+ if (box->style &&
+ ns_computed_display(box->style,
box_is_root(n)) != CSS_DISPLAY_NONE &&
nsoption_bool(foreground_images) == true) {
dom_string *s;
@@ -2595,20 +2604,19 @@ bool box_input(BOX_SPECIAL_PARAMS)
}
}
} else {
- /* the default type is "text" */
+ /* unhandled type the default is "text" */
if (box_input_text(content, box, n) == false)
goto no_memory;
}
- if (type)
- dom_string_unref(type);
+ dom_string_unref(type);
*convert_children = false;
+
return true;
no_memory:
- if (type)
- dom_string_unref(type);
+ dom_string_unref(type);
return false;
}