Fix Regression: Incomplete file loading is seen for multi page pdf files.
[pdfium.git] / core / src / fpdfapi / fpdf_parser / fpdf_parser_encrypt.cpp
index e09bbbb..3dc0e55 100644 (file)
@@ -106,7 +106,6 @@ FX_DWORD CPDF_StandardSecurityHandler::GetPermissions()
 static FX_BOOL _LoadCryptInfo(CPDF_Dictionary* pEncryptDict, FX_BSTR name, int& cipher, int& keylen)
 {
     int Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
-    int Revision = pEncryptDict->GetInteger(FX_BSTRC("R"));
     cipher = FXCIPHER_RC4;
     keylen = 0;
     if (Version >= 4) {
@@ -406,6 +405,7 @@ FX_BOOL CPDF_StandardSecurityHandler::CheckUserPassword(FX_LPCBYTE password, FX_
             copy_len = ukey.GetLength();
         }
         FXSYS_memset32(test, 0, sizeof(test));
+        FXSYS_memset32(tmpkey, 0, sizeof(tmpkey));
         FXSYS_memcpy32(test, (FX_LPCSTR)ukey, copy_len);
         for (int i = 19; i >= 0; i --) {
             for (int j = 0; j < key_len; j ++) {
@@ -460,12 +460,14 @@ CFX_ByteString CPDF_StandardSecurityHandler::GetUserPassword(FX_LPCBYTE owner_pa
         okeylen = 32;
     }
     FX_BYTE okeybuf[64];
+    FXSYS_memset32(okeybuf, 0, sizeof(okeybuf));
     FXSYS_memcpy32(okeybuf, (FX_LPCSTR)okey, okeylen);
     if (m_Revision == 2) {
         CRYPT_ArcFourCryptBlock(okeybuf, okeylen, enckey, key_len);
     } else {
         for (int i = 19; i >= 0; i --) {
             FX_BYTE tempkey[32];
+            FXSYS_memset32(tempkey, 0, sizeof(tempkey));
             for (int j = 0; j < m_KeyLen; j ++) {
                 tempkey[j] = enckey[j] ^ i;
             }