Comments (10)
What about adding API to zero out the stream, so the caller is responsible. That would avoid having to add an if check that most people don't need.
from microsoft.io.recyclablememorystream.
I want to add zeroing to prevent accidental data leaks.
from microsoft.io.recyclablememorystream.
I'm not opposed to this. Go for it.
from microsoft.io.recyclablememorystream.
Do you want to add zeroing to prevent accidental data leaks or so that new streams only contain zeros? In the latter case, note that new blocks are allocated using GC.AllocateUninitializedArray
which can return arrays with non-zero content.
from microsoft.io.recyclablememorystream.
What about adding API to zero out the stream, so the caller is responsible. That would avoid having to add an if check that most people don't need.
With the API approach one would have the risk of accidental data leak in case the caller forgets to explicitly zero out memory. Also the combination with `AggressiveBufferReturn`` seems tricky.
I see the point of not adding an if check that most people don't need.
Not sure how to proceed as i think the API approach is already possible by wrapping the stream and calling
CryptographicOperations.ZeroMemory(wrappedStream.GetBuffer());
from microsoft.io.recyclablememorystream.
Calling GetBuffer()
won't return the encapsulated buffers if there are more than one. Do something like this instead:
var buffers = someStream.GetReadOnlySequence();
foreach (var buffer in buffers)
{
CryptographicOperations.ZeroMemory(buffer.Span);
}
from microsoft.io.recyclablememorystream.
This won't work as the buffers are read-only. buffer.Span
will return a ReadOnlySpan
from microsoft.io.recyclablememorystream.
D'oh, you're right. It'd have to be something like this:
var buffers = someStream.GetReadOnlySequence();
foreach (var buffer in buffers)
{
ref var bytes = ref MemoryMarshal.GetReference(buffer.Span);
var span = MemoryMarshal.CreateSpan(ref bytes, buffer.Length);
CryptographicOperations.ZeroMemory(span);
}
But that still won't handle the large buffer if GetBuffer()
was ever called during the lifetime of the stream.
from microsoft.io.recyclablememorystream.
Would it be okay then to zero out the buffers (only if configured) before returning them to the pool ?
This would require an additional if check
from microsoft.io.recyclablememorystream.
Would it be okay then to zero out the buffers (only if configured) before returning them to the pool ? This would require an additional if check
I think this fine. Let's make this a 3.0 feature.
from microsoft.io.recyclablememorystream.
Related Issues (20)
- Is there a plan to contribute to the dotnet/runtime? HOT 4
- Continous benchmarking HOT 1
- Multiple StreamManagers in referenced libraries - how to find total memory usage HOT 1
- Large pool limit should apply to whole pool, not each slot HOT 1
- Humanitarian Organization Team mbrgi
- ResponseTime is almost doubled with RecyclableMemoryStream. HOT 5
- Question: GetStream copy existing buffer use case HOT 1
- How effective is this package for buffers that are usually smaller than 256 bytes? HOT 1
- Consider using ArrayPool<byte> as underlying storage mechanism HOT 4
- Breaking changes at 3.0.0 version break OfficeOpenXml NuGet package HOT 11
- Guideline about cryptography with RMS HOT 5
- Unclear Documentation for MaximumFreeSmallPoolBytes
- Upgrade blocker: Recent change of GetStream() to return RecyclableMemoryStream instead of MemoryStream HOT 1
- why just pool MemoryStream HOT 2
- FileStreamResult: ObjectDisposedException: Cannot access a disposed object. HOT 4
- For many small stream writes, RecyclableMemoryStream is slower than other implementations HOT 4
- ETW event source is not working HOT 2
- Use of RecyclableMemoryStreamManager with Confluent.Kafka HOT 2
- RecyclableMemoryStream.TryGetBuffer causes infinite loop when UseExponentialLargeBuffer is true HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from microsoft.io.recyclablememorystream.