From 86a79cc38103c114b15e8da69679d52fe5dc7fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Tue, 19 Mar 2024 14:54:59 +0100 Subject: [PATCH] Remove whole EBX objects for PDF when removing DRM --- src/libgourou.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/libgourou.cpp b/src/libgourou.cpp index 9d5e3f2..291bdd0 100644 --- a/src/libgourou.cpp +++ b/src/libgourou.cpp @@ -1317,6 +1317,7 @@ namespace gourou std::vector objects = parser.objects(); std::vector::iterator it; std::vector::reverse_iterator rIt; + std::vector ebxObjects; unsigned char decryptedKey[16]; int ebxId; @@ -1327,7 +1328,7 @@ namespace gourou { EBXHandlerFound = true; uPDFParser::Object* ebx = *rIt; - + ebxVersion = (uPDFParser::Integer*)(*ebx)["V"]; if (ebxVersion->value() != 4) { @@ -1338,7 +1339,7 @@ namespace gourou { EXCEPTION(DRM_ERR_ENCRYPTION_KEY, "No ADEPT_LICENSE found"); } - + uPDFParser::String* licenseObject = (uPDFParser::String*)(*ebx)["ADEPT_LICENSE"]; std::string value = licenseObject->value(); @@ -1375,7 +1376,7 @@ namespace gourou if (object->objectId() == ebxId) { - // object->deleteKey("Filter"); + ebxObjects.push_back(object); continue; } @@ -1485,6 +1486,9 @@ namespace gourou } } + for(it = ebxObjects.begin(); it != ebxObjects.end(); it++) + parser.removeObject(*it); + uPDFParser::Object& trailer = parser.getTrailer(); trailer.deleteKey("Encrypt");