ayttm-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Ayttm-commits] CVS: ayttm/src browser.c,1.7,1.8


From: Colin Leroy <address@hidden>
Subject: [Ayttm-commits] CVS: ayttm/src browser.c,1.7,1.8
Date: Tue, 14 Jan 2003 08:06:03 -0500

Update of /cvsroot/ayttm/ayttm/src
In directory subversions:/tmp/cvs-serv31238/src

Modified Files:
        browser.c 
Log Message:
better escaping urls


Index: browser.c
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/browser.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- browser.c   14 Jan 2003 12:03:12 -0000      1.7
+++ browser.c   14 Jan 2003 13:06:01 -0000      1.8
@@ -58,15 +58,35 @@
 
 gint web_browser = BROWSER_NETSCAPE;
                
-void open_url(GtkWidget *w, char *url) {
-       open_url_nw(w,url);
-}
-
 void open_url_nw(GtkWidget *w, char *url) {
        char *browser = NULL;
-       char *command = g_malloc(1024);
+       char *command = malloc(1281);
        char *url_pos = NULL;
-       char *esc_url = g_strdup_printf("\"%s\"", url);
+       char esc_url[1024];
+       int i=0,j=1;
+       
+       esc_url[0]='"'; j=1;
+       if (url[0]=='\'' || url[0]=='"')
+               i++;
+       for (i; i< strlen(url) && j < 1023; i++,j++) {
+               switch(url[i]) {
+                       case '$':
+                       case '\'':
+                       case '"':
+                       case ' ':
+                       case '\\':
+                               if (i==strlen(url)-1)
+                                       break;
+                               esc_url[j]='\\';
+                               j++;
+                               esc_url[j]=url[i];
+                               break;
+                       default:
+                               esc_url[j]=url[i];
+               }
+       }
+       esc_url[j++]='"';
+       esc_url[j++]=0;
        
        if (iGetLocalPref("use_alternate_browser"))
                browser = cGetLocalPref("alternate_browser");
@@ -86,16 +106,23 @@
                int pre_len = url_pos-browser;
                strncpy(command, browser, pre_len);
                command[pre_len] = 0;
-               strncat(command, esc_url, 1024 - pre_len);
-               strncat(command, url_pos+2, 1024 - strlen(command));
-               strncat(command, " &", 1024 - strlen(command));
+               strncat(command, esc_url, 1280 - pre_len);
+               strncat(command, url_pos+2, 1280 - strlen(command));
+               strncat(command, " &", 1280 - strlen(command));
                g_free(esc_url);
        } else {
-               g_snprintf(command, 1024, "%s \"%s\" &", browser, url);
+               strncpy(command, browser, 1280);
+               strncat(command," ",1280-strlen(command));
+               strncat(command,esc_url,1280-strlen(command));
+               strncat(command, " &", 1280 - strlen(command));
        }
        eb_debug(DBG_CORE, "launching %s\n", command);
        system(command);
        g_free(command);
+}
+
+void open_url(GtkWidget *w, char *url) {
+       open_url_nw(w,url);
 }
 
 #else





reply via email to

[Prev in Thread] Current Thread [Next in Thread]