diff mcabber/mcabber/nohtml.c @ 2251:f3bd1564fa70

Stop html-escaping otr messages and do only strip known tags. We'd like to remove that for good, but pidgin-otr and Adium are still sending html tags.
author franky
date Fri, 19 Feb 2016 22:14:15 +0100
parents e6d355e50d7a
children f5402d705f67
line wrap: on
line diff
--- a/mcabber/mcabber/nohtml.c	Sat Feb 13 13:48:43 2016 +0100
+++ b/mcabber/mcabber/nohtml.c	Fri Feb 19 22:14:15 2016 +0100
@@ -38,17 +38,15 @@
  */
 char *html_strip(const char *htmlbuf)
 {
-  int i, j=0;
+  int i, j=0, html_len;
   char *nohtml;
 
   if (!htmlbuf) return(NULL);
 
   nohtml = g_strdup(htmlbuf);
 
-  if (!strchr(htmlbuf, '&') && !strchr(htmlbuf, '<'))
-    return(nohtml);
-
-  for (i = 0; i < (int)strlen(htmlbuf); i++) {
+  html_len = (int)strlen(htmlbuf);
+  for (i = 0; i < html_len; i++) {
     if (htmlbuf[i] == '&') {
       if (!strncmp(&htmlbuf[i],"&amp;",5)) {
         nohtml[j] = '&';
@@ -65,15 +63,26 @@
       } else if (!strncmp(&htmlbuf[i],"&gt;", 4)) {
         nohtml[j] = '>';
         i += 3;
+      } else {
+        nohtml[j] = htmlbuf[i];
       }
-    } else if (!strncmp(&htmlbuf[i],"<br>", 4) ||
-               !strncmp(&htmlbuf[i],"<br/>", 5)) {
-      nohtml[j] = '\n';
-      i += (htmlbuf[i+3] == '/' ? 4 : 3);
     } else if (htmlbuf[i] == '<') {
-      /* Let's strip all unknown tags */
-      j--;
-      while (htmlbuf[++i] != '>');
+      if (!strncmp(&htmlbuf[i],"<br>", 4)) {
+        nohtml[j] = '\n';
+        i += 3;
+      } else if (!strncmp(&htmlbuf[i],"<br/>", 5)) {
+        nohtml[j] = '\n';
+        i += 4;
+      } else if (!strncmp(&htmlbuf[i],"<FONT>", 6)) {
+        /* Let's strip <FONT> from Adium */
+        i += 5;
+        j--;
+      } else if (!strncmp(&htmlbuf[i],"</FONT>", 7)) {
+        i += 6;
+        j--;
+      } else {
+        nohtml[j] = htmlbuf[i];
+      }
     } else
       nohtml[j] = htmlbuf[i];
     j++;