[patch] escaping double quotes in SF_STRING values

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

 



Hi.

I've just installed 1.1.15 and found a bug (IMO) that Script-Fu
failed if a string containing double quotes was given as an
argument of the SF_STRING type.  Attached is a quick and dirty
patch for fixing that bug.

I wonder if we need to escape the values of the SF_FILENAME type
in the same way, although I believe that few people use double
quotes in file names.

I hope this helps.

Regards,

-- 
KAJIYAMA, Tamito <kajiyama@xxxxxxxxxxxxxxxxxxxxxxxx>

diff -ru gimp-1.1.15.orig/plug-ins/script-fu/script-fu-scripts.c gimp-1.1.15/plug-ins/script-fu/script-fu-scripts.c
--- gimp-1.1.15.orig/plug-ins/script-fu/script-fu-scripts.c	Mon Jan  3 05:52:56 2000
+++ gimp-1.1.15/plug-ins/script-fu/script-fu-scripts.c	Mon Jan 17 07:22:08 2000
@@ -1543,9 +1543,9 @@
   char *command, *c;
   char buffer[MAX_STRING_LENGTH];
   int length;
-  int i;
+  int i, j;
   GdkFont *font;
-  char *escaped;
+  char *escaped, *p, *q;
 
   if ((script = sf_interface.script) == NULL)
     return;
@@ -1586,7 +1586,11 @@
 	break;
       case SF_STRING:
 	escaped = ESCAPE (gtk_entry_get_text (GTK_ENTRY (script->args_widgets[i])));
-	length += strlen (escaped) + 3;
+	j = 0;	/* number of double quotes */
+	for (p = escaped; *p; p++)
+	  if (*p == '"')
+	    j++;
+	length += strlen (escaped) + j + 3;
 	g_free (escaped);
 	break;
       case SF_ADJUSTMENT:
@@ -1649,9 +1653,21 @@
 	  text = gtk_entry_get_text (GTK_ENTRY (script->args_widgets[i]));
 	  g_free (script->arg_values[i].sfa_value);
 	  script->arg_values[i].sfa_value = g_strdup (text); 
-	  escaped = ESCAPE (text);
+	  p = ESCAPE (text);
+	  j = 0;  /* number of double quotes */
+	  for (q = p; *q; q++)
+	    if (*q == '"')
+	      j++;
+	  q = escaped = g_new (gchar, strlen (p) + j + 1);
+	  for (j = 0; p[j]; j++) {
+	    if (p[j] == '"')
+	      *q++ = '\\';
+	    *q++ = p[j];
+	  }
+	  *q = '\0';
 	  g_snprintf (buffer, MAX_STRING_LENGTH, "\"%s\"", escaped);
 	  g_free (escaped);
+	  g_free (p);
 	  text = buffer;
 	  break;
 	case SF_ADJUSTMENT:


[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux