X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fftp-ls.c;h=c8cb869c74cf285f4e283898fa8ba816fd667b03;hp=17a4f5117281fdf21f722de8b035df6ad9d03e34;hb=d5e283b1a75c5f8249300b465b4e7b55130bec49;hpb=7a54d852bfa09c828bbc4907adddee7e4beb1715 diff --git a/src/ftp-ls.c b/src/ftp-ls.c index 17a4f511..c8cb869c 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 = ' '; @@ -1077,7 +1078,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) { @@ -1105,12 +1108,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, " "); @@ -1122,7 +1129,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); @@ -1149,13 +1157,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); @@ -1168,9 +1181,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);