If you haven't done "dmake clean" yet like me, try to "git pull" my latest commit, 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 > >> 42c0a318a970f6f7f43d26a8397448d5d5b8bd36 > >> > >> There were several problems on Windows. The Visual Studio 2008 compiler > >> doesn't have the ::std::vector::data() method (even though it should, it > >> was 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(). > >> Finally > >> some template function was unhappy about parameter type ambiguity (even > >> though 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.cxx > >>> c:/Source/openoffice/main/oox/inc\oox/helper/openssl_wrapper.hxx(44) : > >>> error C3861: 'EVP_MD_CTX_new': identifier not found > >>> c:/Source/openoffice/main/oox/inc\oox/helper/openssl_wrapper.hxx(51) : > >>> error C3861: 'EVP_MD_CTX_free': identifier not found > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(100) : error > >>> C2782: '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) : error > >>> C2782: '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) : error > >>> C2782: '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) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(214) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(217) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(299) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(362) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(700) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(701) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(702) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(710) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(711) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(753) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(754) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(756) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(780) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(781) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(783) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(809) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(833) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(852) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(854) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(882) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(888) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(930) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(932) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(932) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(938) : error > >>> C2039: 'data' : is not a member of 'std::vector<_Ty>' > >>> with > >>> [ > >>> _Ty=sal_uInt8 > >>> ] > >>> c:/Source/openoffice/main/oox/source/core/encryption.cxx(946) : error > >>> C2039: '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/prj > >>> > >>> When you have fixed the errors in that module you can resume the build > >>> by 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 break > >>> compilation. > >>>> 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, so > >>>>>> that we > >>>>>> can open such password-protected OOXML files. > >>>>>> > >>>>>> Adds all the Agile encryption XML tokens and namespaces, and > >>> parses > >>>>> the > >>>>>> XML > >>>>>> from EncryptionInfo stream, gets OpenOffice to recognize the > >>> file is > >>>>>> encrypted > >>>>>> and ask for a password, and successfully decrypts the file if > >>>>> password > >>>>>> is > >>>>>> correct. > >>>>>> > >>>>>> Also a number of other fixes and improvements: > >>>>>> - Sorted main/oox/source/token/tokens.txt so it's in > >>>>>> alphabetical > >>>>> order > >>>>>> (wrong order might have broken certain tokens?). > >>>>>> - Refactored how OOXML encryption is generally handled. > >>>>>> It's now > >>> in > >>>>> its > >>>>>> own file. > >>>>>> - Added logging to the FilterDetect class. It logs to the > >>>>> office-wide > >>>>>> default > >>>>>> 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 > >>>>>> instead > >>> of > >>>>>> new[]) > >>>>>> in all the new code. Memory leaks should not be possible. > >>>>>> > >>>>>> Much of the code involved in the decryption was ported > >>>>>> from the > >>>>>> excellent > >>>>>> Apache 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 some > >>>>> parts, > >>>>>> eg. "SHA-1" in the spec but "SHA1" in actual OOXML documents; > >>>>>> I've made > >>>>> our > >>>>>> code support both. > >>>>>> > >>>>>> The "Standard" encryption from MS Office 2007 that we already > >>>>>> supported > >>>>> was > >>>>>> itself a mess, and much work was needed to refactor and clean up > >>>>>> that > >>>>> code > >>>>>> before the "Agile" encryption could also be added. > >>>>>> > >>>>>> Then XML parsing had to be added, since Agile encryption specifies > >>>>> settings > >>>>>> in XML instead of binary like Standard encryption did. XML > >>>>>> handling in > >>>>>> OpenOffice is pretty outdated, with no support for namespaces, > >>>>>> but at > >>>>> least > >>>>>> the newer "FastParser" does support namespaces and is in fact > >>>>>> very fast > >>>>>> because it converts strings to unique integers, and packs namespaces > >>> into > >>>>>> bit fields, for faster comparisons. I ended up updating the main/oox > >>>>>> FastParser to support the new Agile encryption namespaces and > >>>>>> elements. > >>>>>> > >>>>>> MS-OFFCRYPTO also only describes encryption, not decryption, and > >>>>>> since > >>> we > >>>>>> can 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 > >>>>>> directly > >>>>> from > >>>>>> theirs, and thus I've added Apache POI to our NOTICE file (please > >>>>>> check > >>>>>> that I've done it correctly). Also several bugs were figured out by > >>>>>> simultaneously stepping through our code in gdb and their code in > >>>>> NetBeans, > >>>>>> and comparing respective values. A big thank you to the Apache POI > >>>>>> developers, whose OOXML support is still better than ours in many > >>>>>> ways! > >>>>>> > >>>>>> I used OpenSSL for all the message digest and encryption stuff, both > >>>>>> because our MD5 and SHA1 algorithms are broken (bug 127661), and > >>> because > >>>>>> Agile encryption requires many digests and ciphers that OpenSSL > >>> supports > >>>>>> but 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, "XOR > >>>>> obfuscation", > >>>>>> etc. Apache POI would be a good source for those too. It's > >>>>>> unclear to > >>> me > >>>>>> how 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, will > >>>>>> discuss 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 happy > >>> with > >>>>> it. > >>>>>> Regards > >>>>>> Damjan > >>>>>> >