[w3m-dev 01500] fix risky code in url.c

From: Hironori Sakamoto (h-saka@lsi.nec.co.jp)
Date: Tue Dec 12 2000 - 21:02:11 CST

  • Next message: Tsutomu Okada: "[w3m-dev 01501] Re: w3m-0.1.11-pre-kokb23"

    $B:dK\$G$9!#(B

    url.c $B$K$"$C$?4m81@-$N$"$k%3!<%I$r=$@5$7$^$7$?!#(B
    local.c $B$O$*$^$1$N=$@5$G$9!#(B

    # m18n $B$G(B URL $B$d(B file $BL>$NJ8;z%3!<%I$r??LLL\$K%A%'%C%/$7$F$$$k2aDx$G(B
    # $B8+$D$1$?$N$G$9$,!"$+$J$jBgJQ!#K\Ev$O%*%j%8%J%kHG$G$b$d$i$J$$$H(B
    # $B$$$1$J$$$1$I!#(B
    -----------------------------------
    $B:dK\(B $B9@B'(B <hsaka@mth.biglobe.ne.jp>
     http://www2u.biglobe.ne.jp/~hsaka/

    --- url.c.orig Wed Dec 13 10:39:47 2000
    +++ url.c Wed Dec 13 10:46:33 2000
    @@ -517,7 +517,7 @@
     parseURL(char *url, ParsedURL * p_url, ParsedURL * current)
     {
         char *p, *q;
    - char tmp[LINELEN];
    + Str tmp;
         int i;
     
         p = url;
    @@ -548,10 +548,10 @@
             ++url;
         }
         if (IS_ALPHA(*url) && (url[1] == ':' || url[1] == '|')) {
    - if(url[1]=='|')
    - url[1]=':';
             p_url->scheme = SCM_LOCAL;
    - p_url->file = allocStr(url, 0);
    + p_url->file = p = allocStr(url, 0);
    + if(p[1]=='|')
    + p[1]=':';
         }
         if (p_url->scheme == SCM_LOCAL)
             goto analyze_file;
    @@ -626,9 +626,8 @@
                 p_url->host = NULL;
                 goto analyze_url;
             }
    - strncpy(tmp, q, p - q);
    - tmp[p - q] = '\0';
    - p_url->port = atoi(tmp);
    + tmp = Strnew_charp_n(q, p - q);
    + p_url->port = atoi(tmp->ptr);
             if (*p == '\0') { /* scheme://host:port */
                 /* scheme://user@host:port */
                 /* scheme://user:pass@host:port */
    @@ -675,14 +674,14 @@
     #ifdef USE_GOPHER
         if (p_url->scheme == SCM_GOPHER && *p == 'R') {
             p++;
    - q = tmp;
    - *q++ = *p++;
    + tmp = Strnew();
    + Strcat_char(tmp, *(p++));
             while (*p && *p != '/')
                 p++;
    + Strcat_charp(tmp, p);
             while (*p)
    - *q++ = *p++;
    - *q = '\0';
    - p_url->file = copyPath(tmp, -1, COPYPATH_SPC_IGNORE);
    + p++;
    + p_url->file = copyPath(tmp->ptr, -1, COPYPATH_SPC_IGNORE);
         }
         else
     #endif /* USE_GOPHER */
    --- local.c.orig Wed Dec 13 10:39:44 2000
    +++ local.c Wed Dec 13 11:55:40 2000
    @@ -19,7 +19,7 @@
         Directory *dir;
         struct stat st;
         char **flist;
    - char *p, *qdir, *q;
    + char *p, *qdir;
         Str fbuf = Strnew();
     #ifdef READLINK
         struct stat lst;
    @@ -29,10 +29,10 @@
         int nfile, nfile_max = 100;
         Str dirname;
     
    - dirname = Strnew_charp(dname);
    - d = opendir(dirname->ptr);
    + d = opendir(dname);
         if (d == NULL)
             return NULL;
    + dirname = Strnew_charp(dname);
         qdir = htmlquote_str(dirname->ptr);
         tmp = Sprintf("<title>Directory list of %s</title><h1>Directory list of %s</h1>\n", qdir, qdir);
         flist = New_N(char *, nfile_max);
    @@ -65,7 +65,7 @@
             if (strcmp(p, ".") == 0)
                 continue;
             Strcopy(fbuf, dirname);
    - if (Strlastchar(dirname) != '/')
    + if (Strlastchar(fbuf) != '/')
                 Strcat_char(fbuf, '/');
             Strcat_charp(fbuf, p);
     #ifdef READLINK
    @@ -76,7 +76,7 @@
                 continue;
             if (multicolList) {
                 if (n == 1)
    - Strcat_charp(tmp, "<TD>");
    + Strcat_charp(tmp, "<TD><NOBR>");
             }
             else {
                 if (S_ISDIR(st.st_mode))
    @@ -88,20 +88,16 @@
                 else
                     Strcat_charp(tmp, "[FILE] ");
             }
    - q = htmlquote_str(p);
    - Strcat_m_charp(tmp, "<A HREF=\"file://", qdir, NULL);
    - if (dirname->ptr[dirname->length - 1] != '/')
    - Strcat_char(tmp, '/');
    - Strcat_charp(tmp, q);
    + Strcat_m_charp(tmp, "<A HREF=\"", htmlquote_str(fbuf->ptr), NULL);
             if (S_ISDIR(st.st_mode))
                 Strcat_char(tmp, '/');
    - Strcat_m_charp(tmp, "\">", q, NULL);
    + Strcat_m_charp(tmp, "\">", htmlquote_str(p), NULL);
             if (S_ISDIR(st.st_mode))
                 Strcat_char(tmp, '/');
             Strcat_charp(tmp, "</a>");
             if (multicolList) {
                 if (n++ == nrow) {
    - Strcat_charp(tmp, "</TD>\n");
    + Strcat_charp(tmp, "</NOBR></TD>\n");
                     n = 1;
                 }
                 else {



    This archive was generated by hypermail 2b29 : Tue Dec 12 2000 - 21:11:52 CST