X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fftp-ls.c;h=181c8d452837807b96dc65e5c5ed36da9cd4a157;hb=02c211d47cb7ec6f3fdf6c10607c7172665327f0;hp=e050c5a25460a5444a032e0eaa83a6f1daff8f02;hpb=2c772204111e678b7715937052c3e7217a42e1ad;p=wget diff --git a/src/ftp-ls.c b/src/ftp-ls.c index e050c5a2..181c8d45 100644 --- a/src/ftp-ls.c +++ b/src/ftp-ls.c @@ -75,6 +75,7 @@ clean_line(char *line) if (!len) return 0; if (line[len - 1] == '\n') line[--len] = '\0'; + if (!len) return 0; if (line[len - 1] == '\r') line[--len] = '\0'; for ( ; *line ; line++ ) if (*line == '\t') *line = ' '; @@ -849,7 +850,9 @@ ftp_index (const char *file, struct url *u, struct fileinfo *f) { FILE *fp; char *upwd; + char *htcldir; /* HTML-clean dir name */ char *htclfile; /* HTML-clean file name */ + char *urlclfile; /* URL-clean file name */ if (!output_stream) { @@ -877,12 +880,16 @@ ftp_index (const char *file, struct url *u, struct fileinfo *f) } else upwd = xstrdup (""); + + htcldir = html_quote_string (u->dir); + fprintf (fp, "\n"); fprintf (fp, "\n
\n\n"); + while (f) { fprintf (fp, " "); @@ -894,7 +901,8 @@ ftp_index (const char *file, struct url *u, struct fileinfo *f) "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - struct tm *ptm = localtime ((time_t *)&f->tstamp); + time_t tstamp = f->tstamp; + struct tm *ptm = localtime (&tstamp); fprintf (fp, "%d %s %02d ", ptm->tm_year + 1900, months[ptm->tm_mon], ptm->tm_mday); @@ -921,13 +929,18 @@ ftp_index (const char *file, struct url *u, struct fileinfo *f) break; } htclfile = html_quote_string (f->name); + urlclfile = url_escape_unsafe_and_reserved (f->name); fprintf (fp, "host, u->port); if (*u->dir != '/') putc ('/', fp); - fprintf (fp, "%s", u->dir); + /* XXX: Should probably URL-escape dir components here, rather + * than just HTML-escape, for consistency with the next bit where + * we use urlclfile for the file component. Anyway, this is safer + * than what we had... */ + fprintf (fp, "%s", htcldir); if (*u->dir) putc ('/', fp); - fprintf (fp, "%s", htclfile); + fprintf (fp, "%s", urlclfile); if (f->type == FT_DIRECTORY) putc ('/', fp); fprintf (fp, "\">%s", htclfile); @@ -940,9 +953,11 @@ ftp_index (const char *file, struct url *u, struct fileinfo *f) fprintf (fp, "-> %s", f->linkto ? f->linkto : "(nil)"); putc ('\n', fp); xfree (htclfile); + xfree (urlclfile); f = f->next; } fprintf (fp, "\n\n\n"); + xfree (htcldir); xfree (upwd); if (!output_stream) fclose (fp);