What "safer languages" should we write these things in, though? Don't get me wrong, I hate C with a passion, but C++ opens for the same bullshit errors you get from free memory access, and Java just continues to have security hole after security hole exposed. There's a lot of fresher languages that's popular, but you're not sure if they're going to be around in a big enough way in five years that you want to build your security on them - you'll just end up with having to redo everything when interest in maintenance dries up.
C# is too Microsoft for the open source world to accept solutions implemented on it, Python has the whole version 2/3 issue that's still not really resolved. Ruby? Perl?
People stick to C because it's universally agreed on as being the best at what it does, which is kinda unique in the language world. It's still horrible, but low level stuff is inherently horrible. While this problem would have been solved if you'd had built-in index checking. It would also be solved if you were using a language that didn't just... give you stuff randomly from the memory when you go out of bounds. On the other hand, it would also have been fixed by someone writing a really, really basic unit test. "What happens when you supply data outside the expected bounds" is a common unit test, and somebody fucked up big to let that through without having it in place.