Author: jghali
Date: Mon Jan  4 22:48:29 2021
New Revision: 24375

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24375
Log:
Fix potential crash when importing PDF if user enters a wrong page selection

Modified:
    trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
    trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.cpp
    trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.h
    trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.ui

Modified: trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24375&path=/trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp      (original)
+++ trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp      Mon Jan  4 
22:48:29 2021
@@ -469,9 +469,13 @@
                                        if (progressDialog)
                                                progressDialog->show();
                                }
+
                                parsePagesString(pageString, &pageNs, lastPage);
+                               if (pageNs.size() <= 0)
+                                       return false;
+
                                firstPage = pageNs[0];
-                               SlaOutputDev* dev = {};
+                               SlaOutputDev* dev = nullptr;
                                if (importTextAsVectors)
                                        dev = new SlaOutputDev(m_Doc, 
&Elements, &importedColors, importerFlags);
                                else

Modified: trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24375&path=/trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.cpp       
(original)
+++ trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.cpp       Mon Jan 
 4 22:48:29 2021
@@ -6,10 +6,13 @@
 */
 #include "pdfimportoptions.h"
 #include "ui_pdfimportoptions.h"
+
+#include "iconmanager.h"
 #include "importpdf.h"
 #include "ui/createrange.h"
+#include "ui/scmessagebox.h"
 #include "usertaskstructs.h"
-#include "iconmanager.h"
+#include "util.h"
 
 PdfImportOptions::PdfImportOptions(QWidget *parent) : QDialog(parent), ui(new 
Ui::PdfImportOptions)
 {
@@ -18,11 +21,41 @@
        m_plugin = nullptr;
        m_maxPage = 0;
        m_resized = false;
+
+       connect(ui->buttonBox, SIGNAL(accepted()), this, 
SLOT(onOkButtonClicked()));
+       connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
 }
 
 PdfImportOptions::~PdfImportOptions()
 {
        delete ui;
+}
+
+void PdfImportOptions::onOkButtonClicked()
+{
+       // Check the page ranges
+       bool hasInvalidPageRange = false;
+       QString pageString(this->getPagesString());
+       std::vector<int> pageNumbers;
+
+       parsePagesString(pageString, &pageNumbers, m_maxPage);
+       for (size_t i = 0; i < pageNumbers.size(); ++i)
+       {
+               int pageNumber = pageNumbers[i];
+               if (pageNumber < 1 || pageNumber > m_maxPage)
+               {
+                       hasInvalidPageRange = true;
+                       break;
+               }
+       }
+
+       if ((pageNumbers.empty()) || hasInvalidPageRange)
+       {
+               ScMessageBox::warning(this, CommonStrings::trWarning, tr("The 
range of pages to import is invalid.\nPlease check it and try again."));
+               return;
+       }
+
+       accept();
 }
 
 void PdfImportOptions::resizeEvent(QResizeEvent *e)

Modified: trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24375&path=/trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.h
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.h (original)
+++ trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.h Mon Jan  4 
22:48:29 2021
@@ -43,6 +43,9 @@
        PdfPlug* m_plugin;
        int m_maxPage;
        bool m_resized;
+
+private slots:
+       void onOkButtonClicked();
 };
 
 #endif // PDFIMPORTOPTIONS_H

Modified: trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.ui
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24375&path=/trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.ui
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.ui        
(original)
+++ trunk/Scribus/scribus/plugins/import/pdf/pdfimportoptions.ui        Mon Jan 
 4 22:48:29 2021
@@ -325,38 +325,6 @@
  <resources/>
  <connections>
   <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>PdfImportOptions</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>257</x>
-     <y>414</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>PdfImportOptions</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>325</x>
-     <y>414</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
    <sender>singlePage</sender>
    <signal>toggled(bool)</signal>
    <receiver>spinBox</receiver>


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to