summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBo Xu <bo_xu@foxitsoftware.com>2014-06-12 13:40:04 -0700
committerBo Xu <bo_xu@foxitsoftware.com>2014-06-12 13:40:04 -0700
commita5572c3715624b38ac861c87236185f98fa9083b (patch)
treee1a081264c67430c2aabc33681fc51c07e3b9cbc
parent3084c79dce15a41c056d4e5c634e09010e7323e0 (diff)
downloadpdfium-a5572c3715624b38ac861c87236185f98fa9083b.tar.xz
Enable security removal in FPDF_Doc_Save
R=jam@chromium.org Review URL: https://codereview.chromium.org/333753002
-rw-r--r--core/include/fpdfapi/fpdf_serial.h4
-rw-r--r--core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp9
-rw-r--r--fpdfsdk/include/fpdfsave.h3
-rw-r--r--fpdfsdk/src/fpdfsave.cpp7
4 files changed, 19 insertions, 4 deletions
diff --git a/core/include/fpdfapi/fpdf_serial.h b/core/include/fpdfapi/fpdf_serial.h
index 87ec7b5a05..a91870b5a5 100644
--- a/core/include/fpdfapi/fpdf_serial.h
+++ b/core/include/fpdfapi/fpdf_serial.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _FPDF_SERIAL_
@@ -121,6 +121,8 @@ public:
~CPDF_Creator();
+ void RemoveSecurity();
+
FX_BOOL Create(FX_LPCWSTR filename, FX_DWORD flags = 0);
FX_BOOL Create(FX_LPCSTR filename, FX_DWORD flags = 0);
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
index e5bb1cf985..bdbcccdf06 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../../include/fpdfapi/fpdf_serial.h"
@@ -2113,6 +2113,13 @@ FX_BOOL CPDF_Creator::SetFileVersion(FX_INT32 fileVersion )
m_FileVersion = fileVersion;
return TRUE;
}
+void CPDF_Creator::RemoveSecurity()
+{
+ ResetStandardSecurity();
+ m_bSecurityChanged = TRUE;
+ m_pEncryptDict = NULL;
+ m_pCryptoHandler = NULL;
+}
void CPDF_Creator::ResetStandardSecurity()
{
if ((m_bStandardSecurity || m_bNewCrypto) && m_pCryptoHandler) {
diff --git a/fpdfsdk/include/fpdfsave.h b/fpdfsdk/include/fpdfsave.h
index a69456086a..0909d5a447 100644
--- a/fpdfsdk/include/fpdfsave.h
+++ b/fpdfsdk/include/fpdfsave.h
@@ -47,7 +47,8 @@ struct FPDF_FILEWRITE{
#define FPDF_INCREMENTAL 1
/** @brief No Incremental. */
#define FPDF_NO_INCREMENTAL 2
-
+/** @brief Remove security. */
+#define FPDF_REMOVE_SECURITY 3
// Function: FPDF_SaveAsCopy
// Saves the copy of specified document in custom way.
diff --git a/fpdfsdk/src/fpdfsave.cpp b/fpdfsdk/src/fpdfsave.cpp
index 0c7acc8c47..6637c784fe 100644
--- a/fpdfsdk/src/fpdfsave.cpp
+++ b/fpdfsdk/src/fpdfsave.cpp
@@ -60,7 +60,7 @@ FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,FPDF
if (!pDoc)
return 0;
- if ( flags < 1 || flags > 2 )
+ if ( flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY )
{
flags = 0;
}
@@ -68,6 +68,11 @@ FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,FPDF
CPDF_Creator FileMaker(pDoc);
if(bSetVersion)
FileMaker.SetFileVersion(fileVerion);
+ if(flags == FPDF_REMOVE_SECURITY)
+ {
+ flags = 0;
+ FileMaker.RemoveSecurity();
+ }
CFX_IFileWrite* pStreamWrite = NULL;
FX_BOOL bRet;
pStreamWrite = new CFX_IFileWrite;