Hi Damjan, All, That seems to have fixed the crashes on Windows...
Regards, Matthias Am 17.03.24 um 16:56 schrieb Matthias Seidel:
I am already doing a full build,but hopefully I could pull your last commit soon enough.Regards, Matthias Am 17.03.24 um 15:20 schrieb Damjan Jovanovic:If you haven't done "dmake clean" yet like me, try to "git pull" my latestcommit, and then in main/instsetoo_native "build --from oox -P2 -- -P2". This commit fixes at least one more issue: commit 244f2bcc921bc5dc45e6c1970e27ac2409c44e17 (HEAD -> trunk, origin/trunk, origin/HEAD) Author: Damjan Jovanovic <dam...@apache.org> Date: Sun Mar 17 15:56:38 2024 +0200 Don't allow calls to OpenSSLCipher::blockSize() before the cipher is initialized.On Sun, Mar 17, 2024 at 1:24 PM Matthias Seidel <matthias.sei...@hamburg.de>wrote:WTH, shortly after I sent this mail I could open the files... Matthias Am 17.03.24 um 14:22 schrieb Matthias Seidel:Hi Damjan, That was fast! ;-) I can confirm that it builds now on Windows. When I try to open password protected MS Office 2020+ files (xlsx, docx) I now get the password dialog But when I enter the correct password AOO crashes. Regards, Matthias P.S.: This was a partial build, I will try a complete build now. Am 17.03.24 um 12:23 schrieb Damjan Jovanovic:I've fixed this now and it seems to build on Windows too. The fixes are in these commits, and if they work, should be cherry-picked in the given order: f65b4e326d91bfe900dc1dd22ece69e3ddd8444a f3025b08c40161265442c34e2b50bc05aa5388c6 42c0a318a970f6f7f43d26a8397448d5d5b8bd36There were several problems on Windows. The Visual Studio 2008 compiler doesn't have the ::std::vector::data() method (even though it should, itwas part of the C++98/03 standard), I had to use &vector[0] instead. Also that ancient OpenSSL version we use internally, 1.0.x, uses EVP_MD_CTX_create()/destroy() instead of EVP_MD_CTX_new()/free(). Finallysome template function was unhappy about parameter type ambiguity (eventhough superior compilers like Clang are perfectly happy), and I had to add casts. On Sun, Mar 17, 2024 at 11:15 AM Matthias Seidel <matthias.sei...@hamburg.de> wrote:Hi Damjan, You are right, the interesting part is at the beginning: --- ============= Building module oox ============= Entering /cygdrive/c/Source/openoffice/main/oox/prj cd .. && make -s -r -j1 && make -s -r deliverlog [ build CXX ] oox/source/core/encryption encryption.cxxc:/Source/openoffice/main/oox/inc\oox/helper/openssl_wrapper.hxx(44) :error C3861: 'EVP_MD_CTX_new': identifier not foundc:/Source/openoffice/main/oox/inc\oox/helper/openssl_wrapper.hxx(51) :error C3861: 'EVP_MD_CTX_free': identifier not foundc:/Source/openoffice/main/oox/source/core/encryption.cxx(100) : errorC2782: 'bool oox::getFlag(Type,Type)' : template parameter 'Type' is ambiguous c:/Source/openoffice/main/oox/inc\oox/helper/helper.hxx(141) : see declaration of 'oox::getFlag' could be 'unsigned int' or 'sal_uInt32'c:/Source/openoffice/main/oox/source/core/encryption.cxx(133) : errorC2782: 'bool oox::getFlag(Type,Type)' : template parameter 'Type' is ambiguous c:/Source/openoffice/main/oox/inc\oox/helper/helper.hxx(141) : see declaration of 'oox::getFlag' could be 'unsigned int' or 'sal_uInt32'c:/Source/openoffice/main/oox/source/core/encryption.cxx(134) : errorC2782: 'bool oox::getFlag(Type,Type)' : template parameter 'Type' is ambiguous c:/Source/openoffice/main/oox/inc\oox/helper/helper.hxx(141) : see declaration of 'oox::getFlag' could be 'unsigned int' or 'sal_uInt32'c:/Source/openoffice/main/oox/source/core/encryption.cxx(210) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(214) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(217) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(299) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(362) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(700) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(701) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(702) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(710) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(711) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(753) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(754) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(756) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(780) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(781) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(783) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(809) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(852) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(854) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(930) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(932) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(932) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(938) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ]c:/Source/openoffice/main/oox/source/core/encryption.cxx(946) : errorC2039: 'data' : is not a member of 'std::vector<_Ty>' with [ _Ty=sal_uInt8 ] make: *** No rule to make target '/cygdrive/c/Source/openoffice/main/solver/450/ wntmsci12.pro/workdir/CxxObject/oox/source/core/encryption.o', needed by '/cygdrive/c/Source/openoffice/main/solver/450/ wntmsci12.pro/workdir/LinkTarget/Library/ioox.lib'. Stop. dmake: Error code 2, while making 'all' 1 module(s): oox need(s) to be rebuilt Reason(s): ERROR: error 65280 occurred while making /cygdrive/c/Source/openoffice/main/oox/prjWhen you have fixed the errors in that module you can resume the buildby running: build --from oox --- Regards, Matthias Am 17.03.24 um 01:55 schrieb Damjan Jovanovic:Please check further up in the log, or run "build" in main/oox again.That "No rule to make target" happens after other errors breakcompilation.On Sat, Mar 16, 2024 at 8:38 PM Matthias Seidel <matthias.sei...@hamburg.de>wrote:Hi Damjan, Tried to build trunk on Windows but it stops here: make: *** No rule to make target '/cygdrive/c/Source/openoffice/main/solver/450/ wntmsci12.pro/workdir/CxxObject/oox/source/core/encryption.o', needed by '/cygdrive/c/Source/openoffice/main/solver/450/ wntmsci12.pro/workdir/LinkTarget/Library/ioox.lib'. Stop. dmake: Error code 2, while making 'all' 1 module(s): oox need(s) to be rebuilt Reason(s): ERROR: error 65280 occurred while making /cygdrive/c/Source/openoffice/main/oox/prj When you have fixed the errors in that module you can resume the build by running: build --from oox Am 16.03.24 um 04:49 schrieb Damjan Jovanovic:Hi Bug 118236 with 7 votes, the inability to open password-protected (encrypted) OOXML files from MS Office 2010+, is now fixed in trunk :-) ---snip--- commit 506fa58b1970084a0caacb50b3a805e469be4756 (HEAD -> trunk, origin/trunk, origin/HEAD) Author: Damjan Jovanovic <dam...@apache.org> Date: Sat Mar 2 18:47:05 2024 +0200 Implement the (MS Office 2010+) OOXML "Agile encryption"support, sothat we can open such password-protected OOXML files.Adds all the Agile encryption XML tokens and namespaces, andparsestheXMLfrom EncryptionInfo stream, gets OpenOffice to recognize thefile isencryptedand ask for a password, and successfully decrypts the file ifpasswordis correct. Also a number of other fixes and improvements: - Sorted main/oox/source/token/tokens.txt so it's in alphabeticalorder(wrong order might have broken certain tokens?). - Refactored how OOXML encryption is generally handled. It's nowinitsown file. - Added logging to the FilterDetect class. It logs to theoffice-widedefault logger.- Added a flush() method to the BinaryXOutputStream class.- Changed FilterDetect to use XMultiComponentFactory and XComponentContext instead of the deprecated XMultiServiceFactory. - Error handling was generally improved. - Exception safety and some memory safety (::std::vector insteadofnew[])in all the new code. Memory leaks should not be possible.Much of the code involved in the decryption was ported from the excellentApache POI project, so it's been credited in our NOTICE file.Patch by: me ---snip--- It took much longer than I expected:The MS-OFFCRYPTO specification was unclear, and plain wrong in someparts,eg. "SHA-1" in the spec but "SHA1" in actual OOXML documents; I've madeourcode support both. The "Standard" encryption from MS Office 2007 that we already supportedwasitself a mess, and much work was needed to refactor and clean up thatcodebefore the "Agile" encryption could also be added.Then XML parsing had to be added, since Agile encryption specifiessettingsin XML instead of binary like Standard encryption did. XML handling in OpenOffice is pretty outdated, with no support for namespaces, but atleastthe newer "FastParser" does support namespaces and is in fact very fastbecause it converts strings to unique integers, and packs namespacesintobit fields, for faster comparisons. I ended up updating the main/ooxFastParser to support the new Agile encryption namespaces and elements. MS-OFFCRYPTO also only describes encryption, not decryption, and sincewecan only read OOXML, only decryption matters. Apache POI code was tremendously helpful in figuring out the decryption process. Most of the decryption code I added was just ported directlyfromtheirs, and thus I've added Apache POI to our NOTICE file (please checkthat I've done it correctly). Also several bugs were figured out bysimultaneously stepping through our code in gdb and their code inNetBeans,and comparing respective values. A big thank you to the Apache POIdevelopers, whose OOXML support is still better than ours in many ways!I used OpenSSL for all the message digest and encryption stuff, bothbecause our MD5 and SHA1 algorithms are broken (bug 127661), andbecauseAgile encryption requires many digests and ciphers that OpenSSLsupportsbut we don't. Anyway, it works now. All encrypted OOXML files should work, eg. text documents, spreadsheets, presentations, etc. Other issues I am aware of: - We only support password encrypted documents. Certificate encrypted documents: not yet. ODF 1.3 also added certificate encryption, so maybe that's something we should develop together. - There are other variations of encryption we still don't support, eg.the"Extensible" encryption, the "RC4 CryptoAPI" encryption, "XORobfuscation",etc. Apache POI would be a good source for those too. It's unclear tomehow widely those are used, and whether they are worth implementing.- It may need to be rearchitected when we add OOXML writing.- A lot of other required cleanups to our code were discovered, willdiscuss those separately.I've squashed all my work into a single commit, so it can be easily cherry-picked to AOO42X and maybe even AOO41X when people are happywithit.Regards Damjan
smime.p7s
Description: Kryptografische S/MIME-Signatur