It's quite difficult to get that "just return 0" behavior that D3D11 guaranteed. I'm still not understanding the scenario. Are you reading beyond the end of the buffer (e.g. buffer is 100 bytes, you're reading byte 101), or are you reading beyond the end of the bound array (e.g. array declared to have N elements, but only M are bound, you're reading N+1 or M+1)?
In the first case, that should work as long as you're using descriptors from a table. Root descriptors don't contain size information, so out-of-bounds access can cause a page fault/crash.
In the second case, if you're reading M+1, you're reading from the descriptor that's M+1 past the start of the table. That descriptor needs to have valid contents in order to get defined behavior. If you're reading it as a UAV, there needs to be a UAV descriptor there. It actually needs to be even more specific depending on hardware - if you're reading a buffer UAV, there needs to be a buffer UAV descriptor there. It doesn't need to have a valid resource pointer, you can initialize it with a null resource to get 0s on read, but if the type doesn't match, you can cause a hang.