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 > >>> >