Index: kgv_miniwidget.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/kgv_miniwidget.cpp,v
retrieving revision 1.146.2.2
diff -u -r1.146.2.2 kgv_miniwidget.cpp
--- kgv_miniwidget.cpp	1 Oct 2002 20:22:52 -0000	1.146.2.2
+++ kgv_miniwidget.cpp	6 Apr 2003 14:45:52 -0000
@@ -289,23 +289,22 @@
     }
 
     _tmpDSC->close();
-    _pdfFileName = _fileName;
-    _fileName = _tmpDSC->name();
     _format = PDF;
 
-    openPSFile();
+    openPSFile(_tmpDSC->name());
 }
 
-void KGVMiniWidget::openPSFile()
+void KGVMiniWidget::openPSFile(const QString &file)
 {
+    QString fileName = file.isEmpty() ? _fileName : file;
     kdDebug(4500) << "KGVMiniWidget::openPSFile" << endl;
     
-    FILE* fp = fopen( QFile::encodeName( _fileName ), "r");
+    FILE* fp = fopen( QFile::encodeName( fileName ), "r");
     if( fp == 0 ) 
     {
 	KMessageBox::error( _part->widget(),
 		i18n( "<qt>Error opening file <nobr><strong>%1</strong></nobr>: %2</qt>" )
-		.arg( _fileName )
+		.arg( fileName )
 		.arg( strerror( errno ) ) );
 	emit canceled( "" );
 	return;
@@ -316,9 +315,7 @@
 	_isFileOpen = true;    
 	scanDSC();
 	buildTOC();
-	_psWidget->setFileName( dsc()->isStructured() 
-	                            ? QString::null 
-				    : _fileName );
+	_psWidget->setFileName( _fileName, dsc()->isStructured() );
 	emit completed();
     }
 }
@@ -843,6 +840,7 @@
             << "-dNOPAUSE"
             << "-dBATCH"
             << "-dSAFER"
+            << "-dPARANOIDSAFER"
             << "-sDEVICE=pswrite"
             << ( QCString("-sOutputFile=")+QFile::encodeName(saveFileName) )
             << ( QString("-dFirstPage=")+QString::number( firstPage ) )
@@ -851,7 +849,7 @@
             << "save"
             << "pop"
             << "-f"
-            << QFile::encodeName(_pdfFileName);
+            << QFile::encodeName(_fileName);
 
     /*QValueList<QCString> args = process.args();
     QValueList<QCString>::Iterator it = args.begin();
@@ -1058,7 +1056,7 @@
                           QString::null, 
                           _part->widget(), 
                           QString::null );
-    if( !KIO::NetAccess::upload( _format == PDF ? _pdfFileName : _fileName,
+    if( !KIO::NetAccess::upload( _fileName,
 				 saveURL ) )
 	; // TODO: Proper error dialog
 }
@@ -1279,10 +1277,16 @@
     
     _process = new KProcess;
     *_process << _ghostscriptPath
+              << "-dSAFER"
+              << "-dPARANOIDSAFER"
+              << "-dDELAYSAFER"
               << "-dNODISPLAY"
               << "-dQUIET"
               << QString( "-sPDFname=%1" ).arg( pdfName )
               << QString( "-sDSCname=%1" ).arg( dscName )
+              << "-c"
+              << "<< /PermitFileReading [ PDFname ] /PermitFileWriting [ DSCname ] /PermitFileControl [] >> setuserparams .locksafe"
+              << "-f"
               << "pdf2dsc.ps"
               << "-c"
               << "quit";
Index: kgv_miniwidget.h
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/kgv_miniwidget.h,v
retrieving revision 1.78
diff -u -r1.78 kgv_miniwidget.h
--- kgv_miniwidget.h	17 Mar 2002 23:01:47 -0000	1.78
+++ kgv_miniwidget.h	6 Apr 2003 14:45:53 -0000
@@ -85,7 +85,7 @@
     void clearTemporaryFiles();
     
     void uncompressFile();
-    void openPSFile();
+    void openPSFile(const QString &file=QString::null);
 
 protected slots:
     void doOpenFile();
@@ -116,7 +116,7 @@
 /*- PRINTING and SAVING ---------------------------------------------------*/
 
 // private data used: 
-//   Document specific: _dsc, _fileName, _pdfFileName, _format, _origurl
+//   Document specific: _dsc, _fileName, _format, _origurl
 //   View specific:     _currentPage, _marklist 
 //   This section only: _printer, _tmpFromPDF
     
@@ -258,7 +258,6 @@
     int _visiblePage;
 
     QString _fileName;
-    QString _pdfFileName;
     QString _mimetype;
 
     MarkList* _marklist;
Index: kpswidget.cpp
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/kpswidget.cpp,v
retrieving revision 1.91
diff -u -r1.91 kpswidget.cpp
--- kpswidget.cpp	7 Mar 2002 12:28:33 -0000	1.91
+++ kpswidget.cpp	6 Apr 2003 14:45:53 -0000
@@ -311,10 +311,11 @@
     }
 }
 
-void KPSWidget::setFileName( const QString& fileName )
+void KPSWidget::setFileName( const QString& fileName, bool usePipe )
 {
-    if( _fileName != fileName )
+    if(( _fileName != fileName ) || (_usePipe != usePipe))
     {
+        _usePipe = usePipe;
 	_fileName = fileName;
 	stopInterpreter();
 	_ghostscriptDirty = true;
@@ -510,8 +511,11 @@
     for( ; it != _ghostscriptArguments.end(); ++it )
 	*_process << (*it);
     
-    if( _fileName.isEmpty() )
-	*_process << "-";
+    if( _usePipe )
+        *_process <<
+        // The following two lines are their to ensure that we are allowed to read _fileName
+        "-dDELAYSAFER" << "-sInputFile="+_fileName << "-c" <<
+        "<< /PermitFileReading [ InputFile ] /PermitFileWriting [] /PermitFileControl [] >> setuserparams .locksafe";
     else
 	*_process << _fileName << "-c" << "quit";
 
@@ -529,7 +533,7 @@
     // Finally fire up the interpreter.
     kdDebug(4500) << "KPSWidget: starting interpreter" << endl;
     if( _process->start( KProcess::NotifyOnExit, 
-              _fileName.isEmpty() ? KProcess::All : KProcess::AllOutput ) ) 
+              _usePipe ? KProcess::All : KProcess::AllOutput ) ) 
     {
 	_interpreterBusy = true;
 	setCursor( waitCursor );
@@ -650,7 +654,7 @@
     if( !intConfig->platformFonts() )
 	arguments << "-dNOPLATFONTS";
     
-    arguments << "-dNOPAUSE" << "-dQUIET" << "-dSAFER";
+    arguments << "-dNOPAUSE" << "-dQUIET" << "-dSAFER" << "-dPARANOIDSAFER";
 
     setGhostscriptArguments( arguments );
 
Index: kpswidget.h
===================================================================
RCS file: /home/kde/kdegraphics/kghostview/kpswidget.h,v
retrieving revision 1.52
diff -u -r1.52 kpswidget.h
--- kpswidget.h	8 Feb 2002 12:11:06 -0000	1.52
+++ kpswidget.h	6 Apr 2003 14:45:53 -0000
@@ -134,10 +134,11 @@
     bool sendPS( FILE*, unsigned int begin, unsigned int end );
    
     /**
-     * Sets the filename of the ghostscript input. Usually we use a pipe for
-     * communication and no filename will be needed.
+     * Sets the filename of the ghostscript input. 
+     * @p usePipe indicates whether we use a pipe for
+     * communication or let ghoscript read the file itself.
      */
-    void setFileName( const QString& );
+    void setFileName( const QString&, bool usePipe );
 
     /**
      * Set the bounding box of the drawable. See my comment in the source
@@ -249,6 +250,7 @@
     QString     _ghostscriptPath;
     QStringList _ghostscriptArguments;
     QString     _fileName;
+    bool        _usePipe;
 
     /**
      * Flag set when one of the properties _ghostscriptPath,