sas             Fri Mar  9 10:13:29 2001 EDT

  Modified files:              
    /php4/ext/ircg      ircg.c 
  Log:
  Add a format identifier for escaping %m, so that it can be safely used
  as a parameter for Javascript.
  
  
Index: php4/ext/ircg/ircg.c
diff -u php4/ext/ircg/ircg.c:1.49 php4/ext/ircg/ircg.c:1.50
--- php4/ext/ircg/ircg.c:1.49   Wed Mar  7 14:18:50 2001
+++ php4/ext/ircg/ircg.c        Fri Mar  9 10:13:29 2001
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ircg.c,v 1.49 2001/03/07 22:18:50 sas Exp $ */
+/* $Id: ircg.c,v 1.50 2001/03/09 18:13:29 sas Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -190,6 +190,26 @@
        free(conn);
 }
 
+static void ircg_js_escape(smart_str *input, smart_str *output)
+{
+       char *p;
+       char *end;
+
+       end = input->c + input->len;
+
+       for(p = input->c; p < end; p++) {
+               switch (*p) {
+               case '"':
+               case '\\':
+               case '\'':
+                       smart_str_appendc(output, '\\');
+                       /* fall-through */
+               default:
+                       smart_str_appendc(output, *p);
+               }
+       }
+}
+
 void ircg_mirc_color(const char *, smart_str *, size_t);
 
 static void format_msg(const char *fmt, smart_str *channel, smart_str *to, smart_str 
*from, smart_str *msg, smart_str *result)
@@ -198,7 +218,9 @@
        char c;
        char *q;
        smart_str encoded_msg = {0};
+       smart_str js_encoded_msg = {0};
        int encoded = 0;
+       int js_encoded = 0;
        unsigned long len;
        
        if (fmt[0] == '\0') {
@@ -223,6 +245,17 @@
                case 'f':
                        smart_str_append_ex(result, from, 1);
                        break;
+               case 'j':
+                       if (!encoded) {
+                               ircg_mirc_color(msg->c, &encoded_msg, msg->len);
+                               encoded = 1;
+                       }
+                       if (!js_encoded) {
+                               ircg_js_escape(&encoded_msg, &js_encoded_msg);
+                               js_encoded = 1;
+                       }
+                       smart_str_append_ex(result, &js_encoded_msg, 1);
+                       break;
                case 'm':
                        if (!encoded) {
                                ircg_mirc_color(msg->c, &encoded_msg, msg->len);
@@ -252,6 +285,8 @@
 
        if (encoded)
                smart_str_free(&encoded_msg);
+       if (js_encoded)
+               smart_str_free(&js_encoded_msg);
 
        smart_str_0(result);
 }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to