nissl-lab / npoi

a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Encryptor.GetDataStream throws System.NullReferenceException

Quark321 opened this issue · comments

NPOI Version

2.6.2

File Type

  • [X ] XLSX
  • XLS
  • DOCX
  • XLSM
  • OTHER

any file even empty

Reproduce Steps

            POIFSFileSystem filesystem = new POIFSFileSystem();
            EncryptionInfo info = new EncryptionInfo(EncryptionMode.Agile);
            Encryptor e = Encryptor.GetInstance(info);
            e.ConfirmPassword(password);
            
            var os = e.GetDataStream(filesystem);

            IWorkbook wb = new XSSFWorkbook(stream);

            wb.Write(os);

            MemoryStream result = new MemoryStream();

            if (os.Position > 0) os.Seek(0, SeekOrigin.Begin);

            await os.CopyToAsync(result);                           

        if (result.Position > 0) result.Seek(0, SeekOrigin.Begin);

        return result ;

line var os = e.GetDataStream(filesystem); returns
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=NPOI.Core
StackTrace:
at NPOI.POIFS.Crypt.CryptoFunctions.GetCipher(IKey key, CipherAlgorithm cipherAlgorithm, ChainingMode chain, Byte[] vec, Int32 cipherMode, String padding)
at NPOI.POIFS.Crypt.Agile.AgileDecryptor.InitCipherForBlock(Cipher existing, Int32 block, Boolean lastChunk, IEncryptionInfoBuilder builder, ISecretKey skey, Int32 encryptionMode)
at NPOI.POIFS.Crypt.Agile.AgileEncryptor.AgileCipherOutputStream.InitCipherForBlock(Cipher existing, Int32 block, Boolean lastChunk)
at NPOI.POIFS.Crypt.ChunkedCipherOutputStream..ctor(DirectoryNode dir, Int32 chunkSize, IEncryptionInfoBuilder builder, Encryptor encryptor)
at NPOI.POIFS.Crypt.Agile.AgileEncryptor.AgileCipherOutputStream..ctor(DirectoryNode dir, IEncryptionInfoBuilder builder, ISecretKey skey, AgileEncryptor encryptor)
at NPOI.POIFS.Crypt.Agile.AgileEncryptor.GetDataStream(DirectoryNode dir)
at NPOI.POIFS.Crypt.Encryptor.GetDataStream(POIFSFileSystem fs)

Issue Description

Trying to prepare encrypted stream to be saved to file.