summaryrefslogtreecommitdiff
path: root/sys/src/cmd/mothra/forms.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-10-10 19:54:15 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-10-10 19:54:15 +0200
commit4ad59914e8a570d869f4e66540578cc3bdbc04eb (patch)
tree68e0b5ba990ec1dbcc7439a3d7cb323805703d61 /sys/src/cmd/mothra/forms.c
parent19d38407011bf4b6b16053b699cca8a689bf5808 (diff)
mothra: fix unicode buffer overflow and spurious select crash, webfs: dont rewrite relative url
Diffstat (limited to 'sys/src/cmd/mothra/forms.c')
-rw-r--r--sys/src/cmd/mothra/forms.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/src/cmd/mothra/forms.c b/sys/src/cmd/mothra/forms.c
index 2c1e3b22b..9ce604efb 100644
--- a/sys/src/cmd/mothra/forms.c
+++ b/sys/src/cmd/mothra/forms.c
@@ -225,7 +225,7 @@ void rdform(Hglob *g){
break;
case Tag_option:
if(g->form==0) goto BadTag;
- f=g->form->efields;
+ if((f=g->form->efields)==0) goto BadTag;
o=emallocz(sizeof(Option), 1);
for(op=&f->options;*op;op=&(*op)->next);
*op=o;
@@ -288,6 +288,8 @@ void rdform(Hglob *g){
* Called by rdhtml on seeing a forms-related end tag
*/
void endform(Hglob *g){
+ Field *f;
+
switch(g->tag){
case Tag_form:
g->form=0;
@@ -295,8 +297,10 @@ void endform(Hglob *g){
case Tag_select:
if(g->form==0)
htmlerror(g->name, g->lineno, "</select> not in form, ignored\n");
+ else if((f=g->form->efields)==0)
+ htmlerror(g->name, g->lineno, "spurious </select>\n");
else
- pl_htmloutput(g, g->nsp, g->form->efields->name,g->form->efields);
+ pl_htmloutput(g, g->nsp, f->name, f);
break;
case Tag_textarea:
break;