| ▲ | azakai 2 hours ago | |
I'm not sure what "branch on undefined values" means there, yeah, but never reusing memory addresses is enough to prevent use-after-free. Or, rather, you can use a value after freeing it, but it will not be exploitable, because it will contain valid data of the right type. This is the same idea as Type-After-Type, https://dl.acm.org/doi/10.1145/3274694.3274705 (Also similar to when you use indexes to an array in Rust and happen to read from a wrong but in-bounds index.) | ||