Memory safety is a concern for every application because poor memory management could lead to serious vulnerabilities being exploited. Memory exploits could help attackers leak sensitive information from memory, gain access privileges, and execute malicious code. Memory safety issues could lead to other performance issues such as incorrect outputs and program crashes. Transitioning to a memory-safe language is a great mitigation, but it is important to understand the underlying problems in unsafe code to avoid possible mistakes in a new language, and to fix legacy systems when transitioning to a new memory-safe language is not feasible (timing constraints, costs, etc.) This course deals with explaining current memory-safe issues that exist in widely adopted code written in C language, and possible mitigations that include transitioning to a new language or fixing the current issue in the C language itself. This course also offers an opportunity to practice converting existing C code into Rust, a highly recommended memory-safe language.