C99 implementation of libdiffuzz, the poor man's Memory Sanitizer
Libdiffuzz a drop-in replacement for OS memory allocator that can be used to detect uses of uninitialized memory. It is designed to be used in case Memory Sanitizer is not available for some reason. See libdiffuzz README for information on usage and how it works.
This is a portable C99 implementation that can be used on really obscure CPUs or operating systems where Rust compiler is not available (e.g. OpenRISC or Haiku). It is portable in the sense that the code is so trivial and dependency-free that you can easily port it, not in the sense that it will work as-is anywhere, which is notoriously hard to do in C.
Note in this implementation the counter access is not atomic, so uninitialized reads in multi-threaded programs may not be reliably detected.
Why rewrite in Rust?
In a word, portability.
Making the C implementation thread-safe and portable in the "you can run this unaltered code anywhere" sense would require a complex build system, and C build systems are a circle of hell. I did not want to find myself continuously patching .in.in files or yet another DSL for years.
By contrast, in Rust I can write a program once and expect it to work everywhere with a Rust compiler, even one as low-level as a memory allocator.
See also
libdislocator, poor man's Address Sanitizer that also works with black-box binaries. libdiffuzz-c99 is based on libdislocator code.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
