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);
 		    }