Index: kgv_miniwidget.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/kgv_miniwidget.cpp,v
retrieving revision 1.146.2.1
retrieving revision 1.146.2.2
diff -u -5 -d -p -r1.146.2.1 -r1.146.2.2
--- kgv_miniwidget.cpp  2002/09/26 22:20:04     1.146.2.1
+++ kgv_miniwidget.cpp  2002/10/01 20:22:52     1.146.2.2
@@ -832,33 +832,43 @@ void KGVMiniWidget::setMagnification( do

bool KGVMiniWidget::convertFromPDF( const QString& saveFileName,
                                    unsigned int firstPage,
                                    unsigned int lastPage )
{
-    QString cmd = QString( "gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite "
-                          "-sOutputFile=\"%1\" -dFirstPage=%2 -dLastPage=%3 -c save "
-                          "pop -f \"%4\"" )
-                  .arg( QFile::encodeName( saveFileName ) )
-                  .arg( firstPage )
-                 .arg( lastPage )
-                  .arg( QFile::encodeName( _pdfFileName ) );
-
-    /*
-    QString cmd = QString( "pdftops -f %1 -l %2 \"%3\" \"%4\"" )
-                   .arg( firstPage )
-                  .arg( lastPage )
-                  .arg( QFile::encodeName( _pdfFileName ) )
-                  .arg( QFile::encodeName( saveFileName ) );
-    */
-
    // TODO -- timeout/fail on this conversion (it can hang on a bad pdf)
    // TODO -- use output from gs (leave out -q) to drive a progress bar

-    kdDebug(4500) << "Executing command: " << cmd.local8Bit() << endl;
-    int r = system( cmd.local8Bit() );
+    KProcess process;
+    process << _interpreterPath
+            << "-q"
+            << "-dNOPAUSE"
+            << "-dBATCH"
+            << "-dSAFER"
+            << "-sDEVICE=pswrite"
+            << ( QCString("-sOutputFile=")+QFile::encodeName(saveFileName) )
+            << ( QString("-dFirstPage=")+QString::number( firstPage ) )
+            << ( QString("-dLastPage=")+QString::number( lastPage ) )
+            << "-c"
+            << "save"
+            << "pop"
+            << "-f"
+            << QFile::encodeName(_pdfFileName);

-    if( r ) {
+    /*QValueList<QCString> args = process.args();
+    QValueList<QCString>::Iterator it = args.begin();
+    for ( ; it != args.end() ; ++it )
+        kdDebug() << ( *it ) << endl;*/
+
+    if( !process.start( KProcess::Block ) )
+    {
+       kdError() << "convertFromPDF: Couldn't start gs process" << endl;
+       // TODO -- error message (gs not found?)
+       return false;
+    }
+    if ( !process.normalExit() || process.exitStatus() != 0 )
+    {
+       kdError() << "convertFromPDF: normalExit=" << process.normalExit() << " exitStatus=" << process.exitStatus() << endl;
       // TODO -- error message (can't open, strerr())
       return false;
    }

    return true;
Index: dscparse.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/dscparse.cpp,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -5 -d -p -r1.4 -r1.4.2.1
--- dscparse.cpp        2002/02/15 11:37:50     1.4
+++ dscparse.cpp        2002/09/26 22:20:04     1.4.2.1
@@ -971,13 +971,17 @@ dsc_read_line(CDSC *dsc)
            * <type> ::= Hex | Binary | ASCII (Type of data)
            * <bytesorlines> ::= Bytes | Lines (Read in bytes or lines)
            */
           char begindata[MAXSTR+1];
           int cnt;
-           const char *numberof, *bytesorlines;
-           memcpy(begindata, dsc->line, dsc->line_length);
-           begindata[dsc->line_length] = '\0';
+            unsigned int num;
+            const char *numberof, *bytesorlines;
+            if ((num = dsc->line_length) >= sizeof(begindata)-1)
+                num = sizeof(begindata)-1;
+
+            memcpy(begindata, dsc->line, num);
+            begindata[num] = '\0';
           numberof = strtok(begindata+12, " \r\n");
           strtok(NULL, " \r\n");      /* dump type */
           bytesorlines = strtok(NULL, " \r\n");
           if (bytesorlines == NULL)
               bytesorlines = "Bytes";
Index: kgv_miniwidget.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/kgv_miniwidget.cpp,v
retrieving revision 1.146
retrieving revision 1.146.2.1
diff -u -5 -d -p -r1.146 -r1.146.2.1
--- kgv_miniwidget.cpp  2002/03/17 23:01:47     1.146
+++ kgv_miniwidget.cpp  2002/09/26 22:20:04     1.146.2.1
@@ -1144,11 +1144,12 @@ bool KGVMiniWidget::psCopyDoc( const QSt
       here = ftell( from );
       if( pages_written || pages_atend ) {
           free( comment );
           continue;
       }
-       sscanf( comment + length("%%Pages:" ), "%s", text );
+       sscanf( comment + length("%%Pages:" ), "%256s", text );
+       text[256] = 0; // Just in case of an overflow
       if( strcmp( text, "(atend)" ) == 0 ) {
           fputs( comment, to );
           pages_atend = true;
       }
       else {
Index: ps.c
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/ps.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -5 -d -p -r1.12 -r1.12.2.1
--- ps.c        2002/01/28 10:52:09     1.12
+++ ps.c        2002/09/26 22:20:04     1.12.2.1
@@ -69,13 +69,15 @@ pscopy(from, to, begin, end)
       fputs(line, to);

       if (!(DSCcomment(line) && iscomment(line+2, "Begin"))) {
           /* Do nothing */
       } else if (iscomment(line+7, "Data:")) {
+            int rc = 0;
           text[0] = '\0';
-           if (sscanf(line+length("%%BeginData:"),
-                      "%d %*s %s", &num, text) >= 1) {
+           rc = sscanf(line+length("%%BeginData:"), "%d %*s %256s", &num,text);
+            text[256] = '\0';
+            if (rc >= 1) {
               if (strcmp(text, "Lines") == 0) {
                   for (i=0; i < num; i++) {
                       fgets(line, sizeof line, from);
                       fputs(line, to);
                   }
@@ -146,13 +148,15 @@ pscopyuntil(from, to, begin, end, commen
       }
       fputs(line, to);
       if (!(DSCcomment(line) && iscomment(line+2, "Begin"))) {
           /* Do nothing */
       } else if (iscomment(line+7, "Data:")) {
+            int rc = 0;
           text[0] = '\0';
-           if (sscanf(line+length("%%BeginData:"),
-                      "%d %*s %s", &num, text) >= 1) {
+           rc = sscanf(line+length("%%BeginData:"), "%d %*s %256s", &num,text);
+            text[256] = '\0';
+            if (rc >= 1) {
               if (strcmp(text, "Lines") == 0) {
                   for (i=0; i < num; i++) {
                       fgets(line, sizeof line, from);
                       fputs(line, to);
                   }