| -rw-r--r-- | html.c | 32 | ||||
| -rw-r--r-- | html.h | 2 | ||||
| -rw-r--r-- | ui-repolist.c | 3 |
3 files changed, 23 insertions, 14 deletions
@@ -124,20 +124,29 @@ void html_vtxtf(const char *format, va_list ap) void html_txt(const char *txt) { - if (txt) - html_ntxt(txt, strlen(txt)); + const char *t = txt; + while (t && *t) { + int c = *t; + if (c == '<' || c == '>' || c == '&') { + html_raw(txt, t - txt); + if (c == '>') + html(">"); + else if (c == '<') + html("<"); + else if (c == '&') + html("&"); + txt = t + 1; + } + t++; + } + if (t != txt) + html(txt); } -ssize_t html_ntxt(const char *txt, size_t len) +void html_ntxt(int len, const char *txt) { const char *t = txt; - ssize_t slen; - - if (len > SSIZE_MAX) - return -1; - - slen = (ssize_t) len; - while (t && *t && slen--) { + while (t && *t && len--) { int c = *t; if (c == '<' || c == '>' || c == '&') { html_raw(txt, t - txt); @@ -153,7 +162,8 @@ ssize_t html_ntxt(const char *txt, size_t len) } if (t != txt) html_raw(txt, t - txt); - return slen; + if (len < 0) + html("..."); } void html_attrf(const char *fmt, ...) @@ -19,7 +19,7 @@ __attribute__((format (printf,1,2))) extern void html_attrf(const char *format,...); extern void html_txt(const char *txt); -extern ssize_t html_ntxt(const char *txt, size_t len); +extern void html_ntxt(int len, const char *txt); extern void html_attr(const char *txt); extern void html_url_path(const char *txt); extern void html_url_arg(const char *txt); diff --git a/ui-repolist.c b/ui-repolist.c index af52f9b..7272e87 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -329,8 +329,7 @@ void cgit_print_repolist(void) repourl = cgit_repourl(ctx.repo->url); html_link_open(repourl, NULL, NULL); free(repourl); - if (html_ntxt(ctx.repo->desc, ctx.cfg.max_repodesc_len) < 0) - html("..."); + html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); html_link_close(); html("</td><td>"); if (ctx.cfg.enable_index_owner) { |