Each item in Wikipedia's [list of types of memory errors](https://en.wikipedia.org/wiki/Memory_safety#Types_of_memory_errors) and what Crowbar does to prevent them. # Access errors ## Buffer overflow bounds checking based on uhhhh something ## Buffer over-read bounds checking again ## Race condition uhhhhh 🤷‍♀️ ## Page fault bounds checking, dubious-pointer checking ## Use after free `free(x);` not followed by `x = NULL;` is a compiler error # Uninitialized variables C already warns about these in most cases, so we're good. ## Null pointer dereference dubious-pointer checking ## Wild pointers let C handle it # Memory leak ## Stack exhaustion uhhhhhh 🤷‍♀️ ## Heap exhaustion that counts as error handling, just the `malloc`-shaped kind ## Double free this is just use-after-free but the use is calling free on it ## Invalid free don't do that ## Mismatched free how does that even happen ## Unwanted aliasing uhhh don't do that?