47 lines
1,001 B
C
47 lines
1,001 B
C
|
/* stack-smash.c */
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#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");
|
||
|
}
|