To reach a conclusion here, we will have to agree on what it means to be the &quot;cause of the problem&quot;. It is true that  if a program crashes, then there has to be some unsafe code in that program. This statement is however not very helpful, because pretty much all programs use libstd which contains unsafe code.<p>So, I&#x27;d define the &quot;cause&quot; of a bug to be the piece of code that you fix to get rid of the bug. If `evil` was in libstd, the fix would be to remove `evil` (or somehow make it take a default value, grow the `Vec` to be large enough and fill the two new slots with that default value). In that sense, the problem here clearly was in the safe code `evil`, since it&#x27;s that code which had to be changed to get rid of the problem.