summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-07-11 20:06:34 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-07-11 20:06:34 +0200
commit4c47ba6996843c6bf2e6f4b300ef405c1f23ac74 (patch)
tree858ac0b57af70dc88fcabeb77ad5d08c834c7286 /sys
parentee67552c4bbe674461e7db7b87ceef0a742aeac7 (diff)
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)
Diffstat (limited to 'sys')
-rw-r--r--sys/src/cmd/mothra/forms.c20
-rw-r--r--sys/src/cmd/mothra/rdhtml.c29
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;