oleg-st / ZstdSharp

Port of zstd compression library to c#
MIT License
217 stars 29 forks source link

Error on Unity 2022.3.13 on Windows IL2CPP #29

Open in0finite opened 8 months ago

in0finite commented 8 months ago

Library fails to decompress files on above platform.

The error message is: data corruption detected.

Sorry, no time right now to make reproduction steps.

0.7.4 and 0.7.2 give runtime error, 0.7.3 fails to compile.

oleg-st commented 8 months ago

It looks like the problem is in the MSVC compiler. The /d2ssa-cse- option used in Unity causes incorrect code generation https://godbolt.org/z/rfK5c6fGW

Reported here: https://developercommunity.visualstudio.com/t/The-d2ssa-cse--option-causes-incorrect/10574272

in0finite commented 8 months ago

Keep in mind that error happens on other platforms aswell, for example, on WebGL. As far as I know, they don't use MSVC for compiling to WebAssembly. The conversion process is: C# => IL => IL2CPP => CPP => Emscripten => WebAssembly.

Sorry, I forgot to mention that in the initial post. I assumed the bug is in IL2CPP.

oleg-st commented 8 months ago

WebGL fails the test with native integer types

https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEUCuA7AHwAEAmARgFgAoIgZgAJT6Bhegb2vq8ZJPc+6CiZAJwAKACQAiNvjAALGGADWMACZixeHAEs8GAJQAGBMGAAzAKxIR5m0ZTAwtUQfoAed/QDs9AHx+9JbeAL5SBgDcAoJcwuLSsngKSqoaWnqGJmZWNnYiDk4uIm6ePv6BwWGR0TFxkjJyiirqmjgANhB4AObGphbWtvaOzq4eXr4BQaHhUVSCIdQLVEA=

Right answer is: 125 -3 125

WebGL reports: 18 18 125

Switching to ulong/long like last time might help here.

in0finite commented 8 months ago

Switching to ulong/long like last time might help here.

Nope, I tried using my fork of library with ulong/long, it doesn't work.

oleg-st commented 8 months ago

A workaround for the MSVC problem:

Add additionalIl2CppArgs: --compiler-flags="/d2SSAOptimizer-" to ProjectSettings.asset

Jake-NSW commented 7 months ago

I am getting a similar error on WebGL platform and using the additional CppArgs doesn't seem to fix it (can't build the project). I did the native integer types test, and it also reports wrong.

64310096 64236544 125

Any help would be great :)

oleg-st commented 7 months ago

The WebGL platform does not have proper debugging tools to find the root cause. You can report a problem with a native integers in WebGL to Unity.

oleg-st commented 5 months ago

@Jake-NSW @in0finite Looks like decompression works in Unity 2022.3.26f1 WebGL

in0finite commented 5 months ago

Thanks for letting me know.

However, in the meantime, I switched to 2023.3.0b5 and the bug is still present here.