File podofo_security-fixes-validate-more-encrypt-dictionary-parameters.patch of Package podofo.35911
commit 8f514d69b4ac3c9aa9f725fa93486fe4b7876642
Author: Francesco Pretto <ceztko@gmail.com>
Date: Wed Jun 28 10:20:35 2023 +0200
PdfEncrypt: Validate more encrypt dictionary parameters
This was discussed in https://github.com/podofo/podofo/issues/72#issuecomment-1521737241
--- src/base/PdfEncrypt.cpp
+++ src/base/PdfEncrypt.cpp
@@ -1188,6 +1188,13 @@
m_eKeyLength = static_cast<EPdfKeyLength>(length);
m_keyLength = length/8;
m_bEncryptMetadata = encryptMetadata;
+
+ if (oValue.GetLength() < 32)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/O value is invalid");
+
+ if (uValue.GetLength() < 32)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/U value is invalid");
+
memcpy( m_oValue, oValue.GetString(), 32 );
memcpy( m_uValue, uValue.GetString(), 32 );
@@ -1919,6 +1926,22 @@
m_eKeyLength = ePdfKeyLength_256;
m_keyLength = ePdfKeyLength_256 / 8;
m_rValue = 5;
+
+ if (oValue.GetLength() < 48)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/O value is invalid");
+
+ if (oeValue.GetLength() < 32)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/OE value is invalid");
+
+ if (uValue.GetLength() < 48)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/U value is invalid");
+
+ if (ueValue.GetLength() < 32)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/UE value is invalid");
+
+ if (permsValue.GetLength() < 16)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidEncryptionDict, "/Perms value is invalid");
+
memcpy( m_oValue, oValue.GetString(), 48 );
memcpy( m_oeValue, oeValue.GetString(), 32 );
memcpy( m_uValue, uValue.GetString(), 48 );
--- src/base/PdfString.cpp
+++ src/base/PdfString.cpp
@@ -778,6 +778,11 @@
return m_buffer;
}
+const char* PdfString::GetString() const
+{
+ return m_buffer.GetBuffer();
+}
+
#ifdef PODOFO_HAVE_UNISTRING_LIB
pdf_long PdfString::ConvertUTF8toUTF16( const pdf_utf8* pszUtf8, pdf_utf16be* pszUtf16, pdf_long lLenUtf16 )
--- src/base/PdfString.h
+++ src/base/PdfString.h
@@ -215,7 +215,7 @@
* \see IsUnicode
* \see Length
*/
- inline const char* GetString() const;
+ const char* GetString() const;
/** The contents of the string can be read by this function.
*
@@ -477,14 +477,6 @@
}
// -----------------------------------------------------
-//
-// -----------------------------------------------------
-const char* PdfString::GetString() const
-{
- return m_buffer.GetBuffer();
-}
-
-// -----------------------------------------------------
//
// -----------------------------------------------------
const pdf_utf16be* PdfString::GetUnicode() const