Author: jghali
Date: Tue Feb 13 22:45:38 2018
New Revision: 22388

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22388
Log:
#15145: Javascript fails to execute on PDF opening when PDF security is enabled

Modified:
    branches/Version14x/Scribus/scribus/pdflib_core.cpp
    branches/Version14x/Scribus/scribus/pdflib_core.h

Modified: branches/Version14x/Scribus/scribus/pdflib_core.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22388&path=/branches/Version14x/Scribus/scribus/pdflib_core.cpp
==============================================================================
--- branches/Version14x/Scribus/scribus/pdflib_core.cpp (original)
+++ branches/Version14x/Scribus/scribus/pdflib_core.cpp Tue Feb 13 22:45:38 2018
@@ -805,6 +805,7 @@
        QFileInfo fd;
        QString fext;
        int a;
+       int openActionObj = 0;
        inPattern = 0;
        Bvie = vi;
        BookMinUse = false;
@@ -863,7 +864,8 @@
                        PutDoc("/PageMode /UseOC\n");
        if (!Options.openAction.isEmpty())
        {
-               PutDoc("/OpenAction << /S /JavaScript /JS 
(this."+Options.openAction+"\\(\\)) >>\n");
+               openActionObj = newObject();
+               PutDoc("/OpenAction << /S /JavaScript /JS " + 
QString::number(openActionObj) + " 0 R >>\n");
        }
 
        QDate d = QDate::currentDate();
@@ -985,6 +987,10 @@
                PutDoc("/O <"+String2Hex(&ok)+">\n");
                PutDoc("/U <"+String2Hex(&uk)+">\n");
                PutDoc("/P 
"+QString::number(Options.Permissions)+"\n>>\nendobj\n");
+       }
+       if (openActionObj)
+       {
+               WritePDFString("this." + Options.openAction + "()", 
openActionObj);
        }
        QMap<QString, QMap<uint, FPointArray> > ReallyUsed;
        ReallyUsed.clear();
@@ -6482,6 +6488,19 @@
        return result;
 }
 
+uint PDFLibCore::WritePDFStream(const QString& cc, uint objNum)
+{
+       QString tmp(cc);
+       if (Options.Compress)
+               tmp = CompressStr(&tmp);
+       StartObj(objNum);
+       PutDoc("<< /Length "+QString::number(tmp.length()));  // 
moeglicherweise +1
+       if (Options.Compress)
+               PutDoc("\n/Filter /FlateDecode");
+       PutDoc(" >>\nstream\n"+EncStream(tmp, objNum)+"\nendstream\nendobj\n");
+       return objNum;
+}
+
 uint PDFLibCore::WritePDFString(const QString& cc)
 {      
        QString tmp;
@@ -6497,6 +6516,23 @@
                        tmp += cc[i];
        }
        return WritePDFStream(tmp);
+}
+
+uint PDFLibCore::WritePDFString(const QString& cc, uint objNum)
+{      
+       QString tmp;
+       for (int i = 0; i < cc.length(); ++i)
+       {
+               if (cc[i].unicode() > 255)
+               {
+                       tmp += "\\u";
+                       tmp += toHex(cc[i].row());
+                       tmp += toHex(cc[i].cell());
+               }
+               else
+                       tmp += cc[i];
+       }
+       return WritePDFStream(tmp, objNum);
 }
 
 void PDFLibCore::PDF_xForm(uint objNr, double w, double h, QString im)

Modified: branches/Version14x/Scribus/scribus/pdflib_core.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22388&path=/branches/Version14x/Scribus/scribus/pdflib_core.h
==============================================================================
--- branches/Version14x/Scribus/scribus/pdflib_core.h   (original)
+++ branches/Version14x/Scribus/scribus/pdflib_core.h   Tue Feb 13 22:45:38 2018
@@ -141,7 +141,9 @@
        void       StartObj(int nr);
        uint       newObject() { return ObjCounter++; }
        uint       WritePDFStream(const QString& cc);
+       uint       WritePDFStream(const QString& cc, uint objNum);
        uint       WritePDFString(const QString& cc);
+       uint       WritePDFString(const QString& cc, uint objNum);
        void       writeXObject(uint objNr, QString dictionary, QByteArray 
stream);
        uint       writeObject(QString type, QString dictionary);
        uint       writeGState(QString dictionary) { return 
writeObject("/ExtGState", dictionary); }


_______________________________________________
scribus-commit mailing list
scribus-commit@lists.scribus.net
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to