summaryrefslogtreecommitdiff
path: root/sys/src/cmd/uhtml.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-06-24 08:36:42 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-06-24 08:36:42 +0200
commitf4480d1517834a7b64ba65c4fcf1087430ff17f0 (patch)
treea219a7c9df64dba498032fbd816397299255a3bc /sys/src/cmd/uhtml.c
parentf0b471efb9395509f944ae410d0869bc05d30f50 (diff)
mothra/uhtml: properly handle quoting in tags
Diffstat (limited to 'sys/src/cmd/uhtml.c')
-rw-r--r--sys/src/cmd/uhtml.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/sys/src/cmd/uhtml.c b/sys/src/cmd/uhtml.c
index f82b06953..9973111dd 100644
--- a/sys/src/cmd/uhtml.c
+++ b/sys/src/cmd/uhtml.c
@@ -47,7 +47,7 @@ attr(char *s, char *a)
void
main(int argc, char *argv[])
{
- int n, pfd[2], pflag = 0;
+ int n, q, pfd[2], pflag = 0;
char *arg[4], *s, *e, *p, *g, *a, t;
Rune r;
@@ -96,12 +96,24 @@ main(int argc, char *argv[])
do {
if((s = strchr(s, '<')) == nil)
break;
- g = s;
- if((e = strchr(++s, '>')) == nil)
- e = buf+nbuf;
+ q = 0;
+ g = ++s;
+ e = buf+nbuf;
+ while(s < e){
+ if(*s == '\'' || *s == '"'){
+ if(q == 0)
+ q = *s;
+ else if(q == *s)
+ q = 0;
+ } else if(*s == '>' && q == 0){
+ e = s;
+ break;
+ }
+ s++;
+ }
t = *e;
*e = 0;
- if((a = attr(s, "encoding")) || (a = attr(s, "charset"))){
+ if((a = attr(g, "encoding")) || (a = attr(g, "charset"))){
cset = a;
*e = t;
break;