In my application I create an array with a predefined size which is then fixed, and filled by an unmanaged lib. This works fine as long as the application is build using Visual Studio 2017, but if the application is build using Visual Studio 2019 the array size stops making any sense. How can the length of an array be negative?
//edit
The long length is the same:
The buffer is a completly normal byte array
_buffer = new byte[BufferSize];
The method is just a simple wrapper around the official zlib dll. How could an error in this method confuse .net about the size of an array?
fixed (byte* inputPtr = input)
fixed (byte* bufPtr = _buffer)
{
_zStreamHandle.ZStream.nextIn = (IntPtr)inputPtr;
_zStreamHandle.ZStream.availIn = length;
_zStreamHandle.ZStream.nextOut = (IntPtr)bufPtr;
_zStreamHandle.ZStream.availOut = BufferSize;
var dataLeft = false;
while (_zStreamHandle.ZStream.availIn != 0 || dataLeft)
{
var state = _zStreamHandle.Deflate(_flushMode);
if (state != ErrorCode.Ok)
throw new VncException("ZStream error: " + state);
var outCount = BufferSize - (int) _zStreamHandle.ZStream.availOut;
dataLeft = _zStreamHandle.ZStream.availOut == 0;
try
{
_baseStream.Write(_buffer, 0, outCount);
}
catch (Exception e)
{
var bufferLength = _buffer.Length;
var bufferLongLength = _buffer.LongLength;
Debugger.Break();
}
_zStreamHandle.ZStream.nextOut = (IntPtr)bufPtr;
_zStreamHandle.ZStream.availOut = BufferSize;
}
}