Exemplo n.º 1
0
char *
evhttp_htmlescape(const char *html)
{
	size_t i;
	size_t new_size = 0, old_size = 0;
	char *escaped_html, *p;

	if (html == NULL)
		return (NULL);

	old_size = strlen(html);
	for (i = 0; i < old_size; ++i) {
		const char *replaced = NULL;
		const size_t replace_size = html_replace(html[i], &replaced);
		if (replace_size > EV_SIZE_MAX - new_size) {
			event_warn("%s: html_replace overflow", __func__);
			return (NULL);
		}
		new_size += replace_size;
	}

	if (new_size == EV_SIZE_MAX)
		return (NULL);
	p = escaped_html = mm_malloc(new_size + 1);
	if (escaped_html == NULL) {
		event_warn("%s: malloc(%lu)", __func__,
		           (unsigned long)(new_size + 1));
		return (NULL);
	}
	for (i = 0; i < old_size; ++i) {
		const char *replaced = &html[i];
		const size_t len = html_replace(html[i], &replaced);
		memcpy(p, replaced, len);
		p += len;
	}

	*p = '\0';

	return (escaped_html);
}
Exemplo n.º 2
0
int main()
{
    char html[HTML_MAX_LEN];
    char now_html[HTML_MAX_LEN];
	char abt_display[HTML_MAX_LEN];

    memset(html, 0, sizeof(html));
    if (-1 == html_data(html))
    {
        TOWEB("html_data error");
        return -1;
    }
    
	memset(abt_display, 0, sizeof(abt_display));
    about_display(abt_display);

    memset(now_html, 0, sizeof(now_html));
    html_replace(html, "<strong>", "</strong>", abt_display, now_html);

    TOWEB(MIME);
    TOWEB(now_html)
 
    return 0;
}
Exemplo n.º 3
0
static int scantext_textcvt(unsigned char *buf, int len)
{
	static const unsigned char charcvt_tab[256] = {
          /*00*/ 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
          /*10*/ 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
          /*20*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*30*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*40*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*50*/ 0,0,0,0,0,0,0,0,0,0,0,'(',0,')',0,0,   /* "[]" -> "()" */
          /*60*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*70*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*80*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*90*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*A0*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*B0*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*C0*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*D0*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*E0*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
          /*F0*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32
	};

	static const struct {
		int in_len;
		char *in;
		int out_len;		/* MUST BE <= in_len */
		char *out;
	} cvt_tab[] = {

		{ 2, "  ", 1, " " },
		{ 2, "@ ", 1, "@" },
		{ 2, " @", 1, "@" },
		{ 2, "@@", 1, "@" },

/*		{ 2, "( ", 1, "(" },
 *		{ 2, " )", 1, ")" },
 *		{ 2, "< ", 1, "<" },
 *		{ 2, " >", 1, ">" },
 *		{ 3, "</ ", 2, "</" },
 *		{ 3, " />", 2, "/>" },
 */
		{ 3, "(@)", 1, "@" },
/*		{ 3, "<@>", 1, "@" },
 *		{ 3, ".@.", 1, "@" },
 *		{ 4, ".at.", 1, "@" },
 */

		{ 4, "(at)", 1, "@" },
/*		{ 4, "_at_", 1, "@" },
 *		{ 4, "@at@", 1, "@" },
 *		{ 4, "\'at\'", 1, "@" },
 *		{ 4, "\"at\"", 1, "@" },
 *		{ 8, "(atsign)", 1, "@" },
 *		{ 9, "(at_sign)", 1, "@" },
 *		{ 9, "(at-sign)", 1, "@" },
 *		{ 9, "(at sign)", 1, "@" },
 *		{ 4, "&lt;", 1, "<" },
 *		{ 4, "&gt;", 1, "<" },
 */
		{ 6, "&nbsp;", 1, " " },
		{ 5, "&nbsp", 1, " " },

/*		{ 6, "&quot;", 1, "\"" },
 *		{ 5, "&amp;", 1, "&" },
 *		{ 4, "<br>", 1, " " },
 *		{ 5, "<br/>", 1, " " },
 *		{ 8, "<strong>", 1, " " },
 *		{ 9, "</strong>", 1, " " },
 */
		{ 0, NULL, 0, NULL }
	};

	register int i, matches;
	register unsigned char *p, c;

	for (i=len, p=buf; i>0; i--, p++)
		if ((c = charcvt_tab[*p]) != 0) *p = c;

retry_2nd:
	for (i=0, matches=0; i<=len; i++) {
		register int j, k, l;
		for (j=0; (l = cvt_tab[j].in_len) != 0; j++) {
			if (l > i) continue;
			if (xmemcmpi(cvt_tab[j].in, buf + i - l, l) != 0) continue;
			matches++;
			i -= l;
			memcpy(buf+i, cvt_tab[j].out, cvt_tab[j].out_len);
			if (l != cvt_tab[j].out_len) {
				//---memcpy(buf+i+cvt_tab[j].out_size, buf+i+l, len-i-l);---
				register unsigned char *q;
				for (p=(buf+i+cvt_tab[j].out_len), q=(buf+i+l), k=(len-i-l); k>0; k--)
					*p++ = *q++;
			}
			len = len - l + cvt_tab[j].out_len;
		}
	}
	buf[len] = 0;
	matches += html_replace(buf);
	matches += html_replace2(buf);
	if (matches != 0) goto retry_2nd;
	return 0;
}