On Sun, Jul 09, 2006 at 07:00:03PM +0800, LI Daobing wrote:
> this diff does not contain escape.h and escape.cpp

Oops; try this one instead.

/* Steinar */
-- 
Homepage: http://www.sesse.net/
diff -Nur xdrawchem-1.9.9/xdrawchem/application.cpp 
../xdrawchem-1.9.9/xdrawchem/application.cpp
--- xdrawchem-1.9.9/xdrawchem/application.cpp   2005-11-16 04:01:55.000000000 
+0100
+++ ../xdrawchem-1.9.9/xdrawchem/application.cpp        2006-07-09 
12:45:51.000000000 +0200
@@ -79,6 +79,7 @@
 #include "xruler.h"
 #include "dyk.h"
 #include "charsel.h"
+#include "escape.h"
 
 // main window icon
 #include "xdc.xpm"
@@ -871,14 +872,12 @@
     }
     if (sendto == 1) {
       std::cout << "Ghemical: ";
-      exportFileName.prepend("ghemical ");
-      passfail = system(exportFileName.ascii());
+      passfail = system("ghemical " + shell_escape(exportFileName));
       std::cout << passfail << std::endl;
     }
     if (sendto == 2) {
       std::cout << "KryoMol: ";
-      exportFileName.prepend("kryomol ");
-      passfail = system(exportFileName.ascii());
+      passfail = system("kryomol " + shell_escape(exportFileName));
       std::cout << passfail << std::endl;
     }
     if (passfail != 0) {
@@ -1340,8 +1339,7 @@
       QString n1, cmd1;
       n1.setNum( getpid() );
       n1.prepend("/tmp/");
-      cmd1 = "convert > " + n1;
-      system( cmd1.ascii() );
+      system( "convert > " + shell_escape(n1) );
 
       QFile f1( n1 );
       f1.open(IO_ReadOnly);
@@ -1352,8 +1350,7 @@
        imagemagick = true;
       }
 
-      cmd1 = "rm " + n1;
-      system( cmd1.ascii() );
+      system( "rm " + shell_escape(n1) );
 
       QPixmap tosave;
       // use "tosave" with ImageMagick to specify size
@@ -1369,11 +1366,9 @@
        n1.append(".eps");
        r->SaveEPS(n1);
        //cmd1 = "convert -antialias " + n1 + " " + picfile;
-       cmd1 = "convert -antialias -size " +sizehint + " " + n1 + " -resize " 
-         + sizehint + " " + picfile;
-       system( cmd1.ascii() );
-       cmd1 = "rm " + n1;
-       system( cmd1.ascii() );
+       system( "convert -antialias -size " + shell_escape(sizehint) + " " + 
shell_escape(n1) + " -resize "
+               + shell_escape(sizehint) + " " + shell_escape(picfile));
+       system( "rm " + shell_escape(n1) );
        was_saved = true;
       } else {
        tosave = r->MakePixmap( fd.isTransparent() );
@@ -1404,8 +1399,7 @@
   QString n1, cmd1;
   n1.setNum( getpid() );
   n1.prepend("/tmp/");
-  cmd1 = "convert > " + n1;
-  system( cmd1.ascii() );
+  system( "convert > " + shell_escape(n1) );
   
   QFile f1( n1 );
   f1.open(IO_ReadOnly);
@@ -1416,8 +1410,7 @@
     imagemagick = true;
   }
 
-  cmd1 = "rm " + n1;
-  system( cmd1.ascii() );
+  system( "rm " + shell_escape(n1) );
 
   QPixmap tosave;
   tosave = r->MakePixmap( ni_tflag );
@@ -1431,11 +1424,9 @@
     n1 = ni_savefile;
     n1.append(".eps");
     r->SaveEPS(n1);
-    cmd1 = "convert -antialias -size " +sizehint + " " + n1 + " -resize " 
-      + sizehint + " " + ni_savefile;
-    system( cmd1.ascii() );
-    cmd1 = "rm " + n1;
-    system( cmd1.ascii() );
+    system( "convert -antialias -size " + shell_escape(sizehint) + " " + 
shell_escape(n1) + 
+       + " -resize " + shell_escape(sizehint) + " " + 
shell_escape(ni_savefile) );
+    system( "rm " + shell_escape(n1) );
     was_saved = true;
   } else {
     was_saved = tosave.save(ni_savefile, "PNG");
diff -Nur xdrawchem-1.9.9/xdrawchem/escape.cpp 
../xdrawchem-1.9.9/xdrawchem/escape.cpp
--- xdrawchem-1.9.9/xdrawchem/escape.cpp        1970-01-01 01:00:00.000000000 
+0100
+++ ../xdrawchem-1.9.9/xdrawchem/escape.cpp     2006-07-09 12:41:42.000000000 
+0200
@@ -0,0 +1,9 @@
+#include "escape.h"
+
+QCString shell_escape(const QString &str)
+{
+       QString ret = str;
+       ret.replace("'", "\\'");
+       ret.replace("\\", "\\\\");
+       return "'" + ret.local8Bit() + "'";
+}
diff -Nur xdrawchem-1.9.9/xdrawchem/escape.h 
../xdrawchem-1.9.9/xdrawchem/escape.h
--- xdrawchem-1.9.9/xdrawchem/escape.h  1970-01-01 01:00:00.000000000 +0100
+++ ../xdrawchem-1.9.9/xdrawchem/escape.h       2006-07-09 12:41:48.000000000 
+0200
@@ -0,0 +1,8 @@
+#ifndef ESCAPE_H
+#define ESCAPE_H
+
+#include <qstring.h>
+
+QCString shell_escape(const QString &str);
+
+#endif
diff -Nur xdrawchem-1.9.9/xdrawchem/Makefile.am 
../xdrawchem-1.9.9/xdrawchem/Makefile.am
--- xdrawchem-1.9.9/xdrawchem/Makefile.am       2005-07-20 04:27:54.000000000 
+0200
+++ ../xdrawchem-1.9.9/xdrawchem/Makefile.am    2006-07-09 12:38:58.000000000 
+0200
@@ -13,7 +13,7 @@
 gobject.moc.cpp        peptidebuilder.moc.cpp   xruler.moc.cpp\
 graphdialog.moc.cpp    previewwidget.moc.cpp    charsel.moc.cpp\
 biotools.moc.cpp       textshapedialog.moc.cpp
-xdrawchem_SOURCES = application.cpp application_ring.cpp arrow.cpp 
biotools.cpp bond.cpp bondedit.cpp boshcp.cpp bracket.cpp cdx2cdxml.cpp 
cdxml_reader.cpp charsel.cpp chemdata.cpp chemdata_cdx.cpp chemdata_cdxml.cpp 
chemdata_cml.cpp chemdata_edit.cpp chemdata_mdl.cpp chemdata_rw.cpp 
chemdata_rxn.cpp chemdata_tools.cpp chemdata_xdc.cpp chemdata_xml.cpp 
crings_dialog.cpp curvearrow.cpp drawable.cpp fixeddialog.cpp graphdialog.cpp 
graphwidget.cpp helpwindow.cpp main.cpp molecule.cpp molecule_1h_nmr.cpp 
molecule_smiles.cpp molecule_sssr.cpp molecule_tools_1.cpp molecule_tools_2.cpp 
molinfodialog.cpp myfiledialog.cpp netaccess.cpp netchoosedialog.cpp 
netdialog.cpp pagesetupdialog.cpp peptidebuilder.cpp previewwidget.cpp 
render2d.cpp render2d_draw.cpp render2d_event.cpp render2d_print.cpp 
render2d_select.cpp render2d_text.cpp ringdialog.cpp sdg.cpp smilesdialog.cpp 
symbol.cpp text.cpp textshapedialog.cpp to3d.cpp xdc_toolbutton.cpp xml_cml.cpp 
xml_reader.cpp ioiface.cpp application_ob.cpp chemdata_event.cpp 
molecule_obmol.cpp tooldialog.cpp ngw.cpp tool_1h_nmr.cpp tool_13c_nmr.cpp 
tool_ir.cpp gobject.cpp tool_2d3d.cpp xruler.cpp dyk.cpp retro.cpp 
application.moc.cpp    graphwidget.moc.cpp   render2d.moc.cpp\
+xdrawchem_SOURCES = application.cpp application_ring.cpp arrow.cpp 
biotools.cpp bond.cpp bondedit.cpp boshcp.cpp bracket.cpp cdx2cdxml.cpp 
cdxml_reader.cpp charsel.cpp chemdata.cpp chemdata_cdx.cpp chemdata_cdxml.cpp 
chemdata_cml.cpp chemdata_edit.cpp chemdata_mdl.cpp chemdata_rw.cpp 
chemdata_rxn.cpp chemdata_tools.cpp chemdata_xdc.cpp chemdata_xml.cpp 
crings_dialog.cpp curvearrow.cpp drawable.cpp escape.cpp fixeddialog.cpp 
graphdialog.cpp graphwidget.cpp helpwindow.cpp main.cpp molecule.cpp 
molecule_1h_nmr.cpp molecule_smiles.cpp molecule_sssr.cpp molecule_tools_1.cpp 
molecule_tools_2.cpp molinfodialog.cpp myfiledialog.cpp netaccess.cpp 
netchoosedialog.cpp netdialog.cpp pagesetupdialog.cpp peptidebuilder.cpp 
previewwidget.cpp render2d.cpp render2d_draw.cpp render2d_event.cpp 
render2d_print.cpp render2d_select.cpp render2d_text.cpp ringdialog.cpp sdg.cpp 
smilesdialog.cpp symbol.cpp text.cpp textshapedialog.cpp to3d.cpp 
xdc_toolbutton.cpp xml_cml.cpp xml_reader.cpp ioiface.cpp application_ob.cpp 
chemdata_event.cpp molecule_obmol.cpp tooldialog.cpp ngw.cpp tool_1h_nmr.cpp 
tool_13c_nmr.cpp tool_ir.cpp gobject.cpp tool_2d3d.cpp xruler.cpp dyk.cpp 
retro.cpp application.moc.cpp    graphwidget.moc.cpp   render2d.moc.cpp\
 arrow.moc.cpp          helpwindow.moc.cpp       ringdialog.moc.cpp\
 bondedit.moc.cpp       http.moc.cpp             smilesdialog.moc.cpp\
 bond.moc.cpp           molecule.moc.cpp         symbol.moc.cpp\
diff -Nur xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp 
../xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp
--- xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp 2005-08-07 22:00:19.000000000 
+0200
+++ ../xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp      2006-07-09 
12:46:49.000000000 +0200
@@ -4,6 +4,7 @@
 #include "molinfodialog.h"
 #include "helpwindow.h"
 #include "defs.h"
+#include "ascii.h"
 
 // defined in main.cpp
 extern QString RingDir;
@@ -64,9 +65,9 @@
   QString ffurl, ffcmd;
 
   ffurl = "http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid="; + pcc;
-  ffcmd = "firefox " + ffurl + " &";
+  ffcmd = "firefox " + shell_escape(ffurl) + " &";
   std::cout << ffcmd << std::endl;
-  system(ffcmd.ascii());
+  system( ffcmd );
   QClipboard *cb = QApplication::clipboard();
 
   // Copy text into the clipboard

Reply via email to