Earlier quoted context omitted.
How is that different from CLR or JVM?
I'll speak to JVM; I'm less familiar with CLR but I believe it's the same. JVM and WASM both have statically-verifiable control flow. No wild jumps, no executable stacks, etc. Phew. Arrays and pointer arithmetic are a big difference. WASM has a big linear memory block, and instructions may access arbitrary locations within it - the runtime performs bounds checking only at the edges. So your `sprintf` can still overfl…
And while WASM trumps the security trumpet, without actually supporting proper bounds checking, the CLR will taint C++ pointer arithmetic as unsafe, thus making the whole module unsafe.
So I as consumer can decide if I am willing to trust an unsafe module or not.