diff options
author | Nicholas Tay <nick@windblume.net> | 2021-12-02 18:44:22 +1100 |
---|---|---|
committer | Nicholas Tay <nick@windblume.net> | 2021-12-02 18:44:22 +1100 |
commit | d6ab9640056af4dbf9a27f18a9291426b20b7eb9 (patch) | |
tree | a55790bec807289672700d2a8c252441ab253556 /passgen.c | |
parent | 53346266b603caa37a2d516d13697867e04767d6 (diff) | |
download | passgen-d6ab9640056af4dbf9a27f18a9291426b20b7eb9.tar.gz passgen-d6ab9640056af4dbf9a27f18a9291426b20b7eb9.tar.bz2 passgen-d6ab9640056af4dbf9a27f18a9291426b20b7eb9.zip |
Dynamically allocate password instead of using VLA
This allows the code to compile with `cl` (MS Windows).
Additionally allows massive passwords to be made more easily I suppose,
as we aren't allocating (potentially dangerously) on the stack anymore.
But, generation may be slightly slower due to allocation of memory. We
could possibly have some statically allocated memory (e.g. 20 bytes) and
if we go over then malloc().
Diffstat (limited to 'passgen.c')
-rw-r--r-- | passgen.c | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -9,6 +9,11 @@ #include <sys/random.h> #else #include <time.h> +#endif + +#if defined (_WIN32) && ! defined (__MINGW32__) +#include <io.h> +#else #include <unistd.h> #endif @@ -43,6 +48,10 @@ int main(int argc, char *argv[]) grammar_size = triplets * 3 + specials + numbers; grammar = malloc(grammar_size + 1); + if (grammar == NULL) { + perror("malloc"); + return 1; + } grammar[grammar_size] = 0; memcpy(grammar, "Cvc", 3); @@ -55,7 +64,11 @@ int main(int argc, char *argv[]) custom_grammar = true; } - char password[grammar_size+1]; + char *password = malloc(grammar_size + 1); + if (password == NULL) { + perror("malloc"); + return 1; + } password[grammar_size] = 0; #ifndef __linux__ @@ -80,6 +93,7 @@ int main(int argc, char *argv[]) printf("ERROR: Invalid grammar character '%c'.\n", c); if (custom_grammar) free(grammar); + free(password); return 1; } @@ -98,6 +112,7 @@ int main(int argc, char *argv[]) free(grammar); printf("%s\n", password); + free(password); return 0; } |