-
-
Notifications
You must be signed in to change notification settings - Fork 28
Description
Conari/Conari/Types/NativeString.cs
Lines 91 to 96 in ba1a82e
| public static NativeString<T> operator +(NativeString<T> input, string newstr) | |
| { | |
| NativeString<T> ret = new(input, newstr.Length); | |
| byte[] data = GetBytes(newstr); | |
| WriteTo(((IntPtr)ret) + GetLengthFromPtr(input), data, ret.allocated); |
Yep, WriteTo() actually writes beyond allocated region if WCharPtr or TCharPtr (when Unicode=true)
this ultimately leads to such consequences:
either ok, or:
The active test run was aborted. Reason: Test host process crashed
or:
Error Message:
Assert.Equal() Failure: Strings differ
Expected: "Рад знакомству 🤝 どうぞよろしく"
Actual: null
https://ci.appveyor.com/project/3Fs/dllexport-ix27o/builds/50882366#L297
and so on.
Test can be found here:
https://github.com/3F/DllExport/blob/9db4bf0ba6793523d12eb0a1680c0cd962283f19/src/DllExport/UnitedTest/NetfxAssetBasicTest.cs#L36
But I also forgot about the new disposing (that's another, actually even more interesting story*)
l.callme<TCharPtr>(ns + " and You 👋", nstruct);*because this part must be fully reviewed since this creates non-obvious allocation which will lead to memory leaks