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