void func(char *data) { char buffer[5]; strcpy(buffer, data); } int main(int argc, char *argv[], char *envp[]) { int i; // clearing out the stack memory // clearing all arguments except the first and second memset(argv[0], 0, strlen(argv[0])); for(i=3; argv[i] != 0; i++) memset(argv[i], 0, strlen(argv[i])); // clearing all environment variables for(i=0; envp[i] != 0; i++) memset(envp[i], 0, strlen(envp[i])); // If the first argument is too long, exit if(strlen(argv[1]) > 40) { printf("first arg is too long.\n"); exit(1); } if(argc > 2) { printf("arg2 is at %p\n", argv[2]); for(i=0; i < strlen(argv[2])-1; i++) { if(!(isprint(argv[2][i]))) { // If there are any nonprintable characters in the // second argument, exit printf("only printable characters are allowed!\n"); exit(1); } } } func(argv[1]); return 0; }