diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-07-11 20:06:34 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-07-11 20:06:34 +0200 |
commit | 4c47ba6996843c6bf2e6f4b300ef405c1f23ac74 (patch) | |
tree | 858ac0b57af70dc88fcabeb77ad5d08c834c7286 | |
parent | ee67552c4bbe674461e7db7b87ceef0a742aeac7 (diff) | |
download | plan9front-4c47ba6996843c6bf2e6f4b300ef405c1f23ac74.tar.xz |
mothra: handle empty attributes (for base-tag and others...)
empty href="" attribute in base-tag causes the page to break.
while at it, handle empty attributes in other parts of the
code as well. (mostly stuff like id, name shouldnt be empty)
-rw-r--r-- | sys/src/cmd/mothra/forms.c | 20 | ||||
-rw-r--r-- | sys/src/cmd/mothra/rdhtml.c | 29 |
2 files changed, 29 insertions, 20 deletions
diff --git a/sys/src/cmd/mothra/forms.c b/sys/src/cmd/mothra/forms.c index 69b34bd49..0d9054b81 100644 --- a/sys/src/cmd/mothra/forms.c +++ b/sys/src/cmd/mothra/forms.c @@ -101,9 +101,9 @@ void rdform(Hglob *g){ } g->form=emalloc(sizeof(Form)); s=pl_getattr(g->attr, "action"); - g->form->action=strdup((s && s[0]) ? s : g->dst->url->fullname); + g->form->action=strdup((s && *s) ? s : g->dst->url->fullname); s=pl_getattr(g->attr, "method"); - if(s==0) + if(s==0 || *s==0) g->form->method=GET; else if(cistrcmp(s, "post")==0) g->form->method=POST; @@ -137,7 +137,7 @@ void rdform(Hglob *g){ } else f=newfield(g->form); s=pl_getattr(g->attr, "name"); - if(s==0) + if(s==0 || *s == 0) f->name=0; else f->name=strdup(s); @@ -148,12 +148,12 @@ void rdform(Hglob *g){ f->value=strdup(s); f->checked=pl_hasattr(g->attr, "checked"); s=pl_getattr(g->attr, "size"); - if(s==0) + if(s==0 || *s==0) f->size=20; else f->size=atoi(s); s=pl_getattr(g->attr, "maxlength"); - if(s==0) + if(s==0 || *s==0) f->maxlength=0x3fffffff; else f->maxlength=atoi(s); @@ -215,7 +215,7 @@ void rdform(Hglob *g){ } f=newfield(g->form); s=pl_getattr(g->attr, "name"); - if(s==0){ + if(s==0 || *s==0){ f->name=strdup("select"); htmlerror(g->name, g->lineno, "select has no name=\n"); } @@ -257,16 +257,16 @@ void rdform(Hglob *g){ if(g->form==0) goto BadTag; f=newfield(g->form); s=pl_getattr(g->attr, "name"); - if(s==0){ + if(s==0 || *s==0){ f->name=strdup("enter text"); htmlerror(g->name, g->lineno, "select has no name=\n"); } else f->name=strdup(s); s=pl_getattr(g->attr, "rows"); - f->rows=s?atoi(s):8; + f->rows=(s && *s)?atoi(s):8; s=pl_getattr(g->attr, "cols"); - f->cols=s?atoi(s):30; + f->cols=(s && *s)?atoi(s):30; f->type=TEXTWIN; /* suck up initial text */ pl_htmloutput(g, g->nsp, f->name, f); @@ -281,7 +281,7 @@ void rdform(Hglob *g){ form->fields=0; form->efields=0; s=pl_getattr(g->attr, "action"); - form->action=strdup((s && s[0]) ? s : g->dst->url->fullname); + form->action=strdup((s && *s) ? s : g->dst->url->fullname); form->method=GET; form->fields=0; f=newfield(form); diff --git a/sys/src/cmd/mothra/rdhtml.c b/sys/src/cmd/mothra/rdhtml.c index bf7a5ee00..2549a0697 100644 --- a/sys/src/cmd/mothra/rdhtml.c +++ b/sys/src/cmd/mothra/rdhtml.c @@ -717,7 +717,8 @@ void plrdhtml(char *name, int fd, Www *dst){ pl_pushstate(&g, g.tag); break; } - if(str=pl_getattr(g.attr, "id")){ + str=pl_getattr(g.attr, "id"); + if(str && *str){ char swap[NNAME]; nstrcpy(swap, g.state->name, sizeof(swap)); @@ -733,7 +734,8 @@ void plrdhtml(char *name, int fd, Www *dst){ case Tag_end: /* unrecognized start tag */ break; case Tag_img: - if(str=pl_getattr(g.attr, "src")) + str=pl_getattr(g.attr, "src"); + if(str && *str) nstrcpy(g.state->image, str, sizeof(g.state->image)); else { Pair *a; @@ -754,12 +756,14 @@ void plrdhtml(char *name, int fd, Www *dst){ } } g.state->ismap=pl_hasattr(g.attr, "ismap"); - if(str=pl_getattr(g.attr, "width")) + str=pl_getattr(g.attr, "width"); + if(str && *str) g.state->width=strtolength(&g, HORIZ, str); - if(str=pl_getattr(g.attr, "height")) + str=pl_getattr(g.attr, "height"); + if(str && *str) g.state->height=strtolength(&g, VERT, str); str=pl_getattr(g.attr, "alt"); - if(str==0){ + if(str==0 || *str == 0){ if(g.state->image[0]) str=g.state->image; else @@ -789,7 +793,8 @@ void plrdhtml(char *name, int fd, Www *dst){ g.spacc++; break; case Tag_base: - if(str=pl_getattr(g.attr, "href")){ + str=pl_getattr(g.attr, "href"); + if(str && *str){ seturl(g.dst->url, str, g.dst->url->fullname); nstrcpy(g.dst->url->fullname, str, sizeof(g.dst->url->fullname)); /* base should be a full url, but it often isnt so have to resolve */ @@ -797,10 +802,12 @@ void plrdhtml(char *name, int fd, Www *dst){ } break; case Tag_a: - if(str=pl_getattr(g.attr, "name")) + str=pl_getattr(g.attr, "name"); + if(str && *str) nstrcpy(g.state->name, str, sizeof(g.state->name)); pl_htmloutput(&g, 0, "", 0); - if(str=pl_getattr(g.attr, "href")) + str=pl_getattr(g.attr, "href"); + if(str && *str) nstrcpy(g.state->link, str, sizeof(g.state->link)); break; case Tag_meta: @@ -829,9 +836,11 @@ void plrdhtml(char *name, int fd, Www *dst){ case Tag_iframe: snprint(buf, sizeof(buf), "[%s: ", tag[g.tag].name); pl_htmloutput(&g, 0, buf, 0); - if(str=pl_getattr(g.attr, "src")) + str=pl_getattr(g.attr, "src"); + if(str && *str) nstrcpy(g.state->link, str, sizeof(g.state->link)); - if(str=pl_getattr(g.attr, "name")) + str=pl_getattr(g.attr, "name"); + if(str && *str) nstrcpy(g.state->name, str, sizeof(g.state->name)); else str = g.state->link; |