X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fhtml2html.c;h=ca2404385505ff14f1890d9d4114959e6eec9221;hb=HEAD;hp=33eeedf01b6172290493d68a51fcad20a5937f4d;hpb=fcb8c4169baa629eb3c1a4979c7c8c32f1560389;p=citadel.git diff --git a/webcit/html2html.c b/webcit/html2html.c index 33eeedf01..a631eb81b 100644 --- a/webcit/html2html.c +++ b/webcit/html2html.c @@ -2,24 +2,19 @@ * Output an HTML message, modifying it slightly to make sure it plays nice * with the rest of our web framework. * - * Copyright (c) 2005-2010 by the citadel.org team + * Copyright (c) 2005-2012 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * it under the terms of the GNU General Public License, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software */ #include "webcit.h" -#include "webserver.h" + /* @@ -64,7 +59,7 @@ void extract_charset_from_meta(char *charset, char *meta_http_equiv, char *meta_ if (!ptr) return; safestrncpy(buf, ++ptr, sizeof buf); - striplt(buf); + string_trim(buf); if (!strncasecmp(buf, "charset=", 8)) { strcpy(charset, &buf[8]); @@ -81,7 +76,7 @@ void extract_charset_from_meta(char *charset, char *meta_http_equiv, char *meta_ /* Remove wandering punctuation */ if ((ptr=strchr(charset, '\"'))) *ptr = 0; - striplt(charset); + string_trim(charset); } } @@ -192,7 +187,7 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St meta = malloc(meta_length + 1); safestrncpy(meta, meta_start, meta_length); meta[meta_length] = 0; - striplt(meta); + string_trim(meta); if (!strncasecmp(meta, "HTTP-EQUIV=", 11)) { meta_http_equiv = strdup(&meta[11]); spaceptr = strchr(meta_http_equiv, ' '); @@ -301,10 +296,10 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St && (strcasecmp(charset, "UTF-8")) && (strcasecmp(charset, "")) ) { - lprintf(9, "Converting %s to UTF-8\n", charset); + syslog(LOG_DEBUG, "Converting %s to UTF-8\n", charset); ctdl_iconv_open("UTF-8", charset, &ic); if (ic == (iconv_t)(-1) ) { - lprintf(5, "%s:%d iconv_open() failed: %s\n", + syslog(LOG_WARNING, "%s:%d iconv_open() failed: %s\n", __FILE__, __LINE__, strerror(errno)); } } @@ -393,9 +388,16 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St StrBufAppendPrintf(converted_msg, new_window); ptr = &ptr[8]; } - else if ( (treat_as_wiki) && (strncasecmp(ptr, "CurRoom.name, NULL); + StrBufAppendPrintf(converted_msg, "?page="); ptr = &ptr[9]; } else { @@ -412,9 +414,9 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St * and then ended the message) */ if (!tag_end) { - lprintf(9, "tag_end is null and ptr is:\n"); - lprintf(9, "%s\n", ptr); - lprintf(9, "Theoretical bytes remaining: %d\n", msgend - ptr); + syslog(LOG_DEBUG, "tag_end is null and ptr is:\n"); + syslog(LOG_DEBUG, "%s\n", ptr); + syslog(LOG_DEBUG, "Theoretical bytes remaining: %d\n", (int)(msgend - ptr)); } src=strstr(ptr, "src=\"cid:"); @@ -448,72 +450,73 @@ void output_html(const char *supplied_charset, int treat_as_wiki, int msgnum, St * Turn anything that looks like a URL into a real link, as long * as it's not inside a tag already */ - else if ( (brak == 0) && (alevel == 0) - && (!strncasecmp(ptr, "http://", 7))) { - /** Find the end of the link */ - int strlenptr; - linklen = 0; + else if ( (brak == 0) && (alevel == 0) && + ( (!strncasecmp(ptr, "http://", 7)) || + (!strncasecmp(ptr, "https://", 8)))) { + /** Find the end of the link */ + int strlenptr; + linklen = 0; - strlenptr = strlen(ptr); - for (i=0; i<=strlenptr; ++i) { - if ((ptr[i]==0) - ||(isspace(ptr[i])) - ||(ptr[i]==10) - ||(ptr[i]==13) - ||(ptr[i]=='(') - ||(ptr[i]==')') - ||(ptr[i]=='<') - ||(ptr[i]=='>') - ||(ptr[i]=='[') - ||(ptr[i]==']') - ||(ptr[i]=='"') - ||(ptr[i]=='\'') + strlenptr = strlen(ptr); + for (i=0; i<=strlenptr; ++i) { + if ((ptr[i]==0) + ||(isspace(ptr[i])) + ||(ptr[i]==10) + ||(ptr[i]==13) + ||(ptr[i]=='(') + ||(ptr[i]==')') + ||(ptr[i]=='<') + ||(ptr[i]=='>') + ||(ptr[i]=='[') + ||(ptr[i]==']') + ||(ptr[i]=='"') + ||(ptr[i]=='\'') ) linklen = i; - /* did s.b. send us an entity? */ - if (ptr[i] == '&') { - if ((ptr[i+2] ==';') || - (ptr[i+3] ==';') || - (ptr[i+5] ==';') || - (ptr[i+6] ==';') || - (ptr[i+7] ==';')) - linklen = i; - } - if (linklen > 0) break; + /* did s.b. send us an entity? */ + if (ptr[i] == '&') { + if ((ptr[i+2] ==';') || + (ptr[i+3] ==';') || + (ptr[i+5] ==';') || + (ptr[i+6] ==';') || + (ptr[i+7] ==';')) + linklen = i; } - if (linklen > 0) { - char *ltreviewptr; - char *nbspreviewptr; - char linkedchar; - int len; + if (linklen > 0) break; + } + if (linklen > 0) { + char *ltreviewptr; + char *nbspreviewptr; + char linkedchar; + int len; - len = linklen; - linkedchar = ptr[len]; - ptr[len] = '\0'; - /* spot for some subject strings tinymce tends to give us. */ - ltreviewptr = strchr(ptr, '<'); - if (ltreviewptr != NULL) { - *ltreviewptr = '\0'; - linklen = ltreviewptr - ptr; - } + len = linklen; + linkedchar = ptr[len]; + ptr[len] = '\0'; + /* spot for some subject strings tinymce tends to give us. */ + ltreviewptr = strchr(ptr, '<'); + if (ltreviewptr != NULL) { + *ltreviewptr = '\0'; + linklen = ltreviewptr - ptr; + } - nbspreviewptr = strstr(ptr, " "); - if (nbspreviewptr != NULL) { - /* nbspreviewptr = '\0'; */ - linklen = nbspreviewptr - ptr; - } - if (ltreviewptr != 0) - *ltreviewptr = '<'; - - ptr[len] = linkedchar; - - content_length += (32 + linklen); - StrBufAppendPrintf(converted_msg, "%s\"", new_window); - StrBufAppendBufPlain(converted_msg, ptr, linklen, 0); - StrBufAppendPrintf(converted_msg, "\">"); - StrBufAppendBufPlain(converted_msg, ptr, linklen, 0); - ptr += linklen; - StrBufAppendPrintf(converted_msg, ""); + nbspreviewptr = strstr(ptr, " "); + if (nbspreviewptr != NULL) { + /* nbspreviewptr = '\0'; */ + linklen = nbspreviewptr - ptr; } + if (ltreviewptr != 0) + *ltreviewptr = '<'; + + ptr[len] = linkedchar; + + content_length += (32 + linklen); + StrBufAppendPrintf(converted_msg, "%s\"", new_window); + StrBufAppendBufPlain(converted_msg, ptr, linklen, 0); + StrBufAppendPrintf(converted_msg, "\">"); + StrBufAppendBufPlain(converted_msg, ptr, linklen, 0); + ptr += linklen; + StrBufAppendPrintf(converted_msg, ""); + } } else { StrBufAppendBufPlain(converted_msg, ptr, 1, 0); @@ -639,7 +642,7 @@ void url(char *buf, size_t bufsize) start = NULL; len = strlen(buf); if (len > bufsize) { - lprintf(1, "URL: content longer than buffer!"); + syslog(LOG_WARNING, "URL: content longer than buffer!"); return; } end = buf + len; @@ -675,7 +678,7 @@ void url(char *buf, size_t bufsize) UrlLen = end - start; if (UrlLen > sizeof(urlbuf)){ - lprintf(1, "URL: content longer than buffer!"); + syslog(LOG_WARNING, "URL: content longer than buffer!"); return; } memcpy(urlbuf, start, UrlLen); @@ -688,7 +691,7 @@ void url(char *buf, size_t bufsize) "%ca href=%c%s%c TARGET=%c%s%c%c%s%c/A%c", LB, QU, urlbuf, QU, QU, TARGET, QU, RB, urlbuf, LB, RB); if (outpos >= sizeof(outbuf) - Offset) { - lprintf(1, "URL: content longer than buffer!"); + syslog(LOG_WARNING, "URL: content longer than buffer!"); return; } @@ -696,7 +699,7 @@ void url(char *buf, size_t bufsize) if (TrailerLen > 0) memcpy(outbuf + Offset + outpos, end, TrailerLen); if (Offset + outpos + TrailerLen > bufsize) { - lprintf(1, "URL: content longer than buffer!"); + syslog(LOG_WARNING, "URL: content longer than buffer!"); return; } memcpy (buf, outbuf, Offset + outpos + TrailerLen);