/* stack-smash.c */ #include #include #define BUFFER_SIZE 8 struct user { const char *name, *password; } const users[] = {{"Cat", "Meowmeow"}, {"Skeletor", "Nyarr"}}; void print_users() { printf("Users:\n"); for (size_t i = 0; i < sizeof(users) / sizeof(struct user); i++) { printf("%s: %s\n", users[i].name, users[i].password); } } void fill(FILE *f, char *where, size_t const limit) { size_t read_total = 0; for (;; ) { size_t read = fread(where + read_total, 1, 1, f); if (!read) return; read_total += read; } } // void fill(FILE *f, char *where, size_t const limit) { // size_t read_total = 0; // for (;;) { // size_t read = fread(where + read_total, 1, 1, f); // if (!read || where[read_total] == '\n') return; // read_total += read; // } // } void vulnerable(FILE *f) { char buffer[BUFFER_SIZE]; fill(f, buffer, BUFFER_SIZE); } int main(int argc, char **argv) { vulnerable(stdin); puts("nothing happened"); }