diff --git a/crypto/src/bcpg/BcpgOutputStream.cs b/crypto/src/bcpg/BcpgOutputStream.cs
index 7ab661edb..738c28211 100644
--- a/crypto/src/bcpg/BcpgOutputStream.cs
+++ b/crypto/src/bcpg/BcpgOutputStream.cs
@@ -376,6 +376,7 @@ namespace Org.BouncyCastle.Bcpg
if (partialBuffer != null)
{
PartialFlush(true);
+ Array.Clear(partialBuffer, 0, partialBuffer.Length);
partialBuffer = null;
}
}
diff --git a/crypto/src/bcpg/LiteralDataPacket.cs b/crypto/src/bcpg/LiteralDataPacket.cs
index 63a2c6d44..b4d28a201 100644
--- a/crypto/src/bcpg/LiteralDataPacket.cs
+++ b/crypto/src/bcpg/LiteralDataPacket.cs
@@ -23,7 +23,11 @@ namespace Org.BouncyCastle.Bcpg
fileName = new byte[len];
for (int i = 0; i != len; ++i)
{
- fileName[i] = (byte)bcpgIn.ReadByte();
+ int ch = bcpgIn.ReadByte();
+ if (ch < 0)
+ throw new IOException("literal data truncated in header");
+
+ fileName[i] = (byte)ch;
}
modDate = (((uint)bcpgIn.ReadByte() << 24)
diff --git a/crypto/src/openpgp/PgpUtilities.cs b/crypto/src/openpgp/PgpUtilities.cs
index a3efd591f..10d1ac398 100644
--- a/crypto/src/openpgp/PgpUtilities.cs
+++ b/crypto/src/openpgp/PgpUtilities.cs
@@ -367,7 +367,7 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp
byte[] buffer)
{
PgpLiteralDataGenerator lData = new PgpLiteralDataGenerator();
- Stream pOut = lData.Open(output, fileType, file.Name, file.LastWriteTime, buffer);
+ Stream pOut = lData.Open(output, fileType, file.Name, file.LastWriteTime, Arrays.Clone(buffer));
PipeFileContents(file, pOut, buffer.Length);
}
|