diff options
author | Michael Santos <[email protected]> | 2010-10-01 19:56:52 -0400 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-10-04 15:25:22 +0200 |
commit | b3904e7dbb9e32e8820deed8281aff97c9d141ce (patch) | |
tree | d36d1a33a14a6d9bc2dce3deebef7762e6e8b017 /erts/etc/common/typer.c | |
parent | 329d7a22bdf9029a6f61a348942e2dbcd8e21de1 (diff) | |
download | otp-b3904e7dbb9e32e8820deed8281aff97c9d141ce.tar.gz otp-b3904e7dbb9e32e8820deed8281aff97c9d141ce.tar.bz2 otp-b3904e7dbb9e32e8820deed8281aff97c9d141ce.zip |
typer: prevent buffer overflows
Diffstat (limited to 'erts/etc/common/typer.c')
-rw-r--r-- | erts/etc/common/typer.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/erts/etc/common/typer.c b/erts/etc/common/typer.c index c2567cb8b4..de48daf002 100644 --- a/erts/etc/common/typer.c +++ b/erts/etc/common/typer.c @@ -175,7 +175,7 @@ main(int argc, char** argv) static void push_words(char* src) { - char sbuf[1024]; + char sbuf[MAXPATHLEN]; char* dst; dst = sbuf; @@ -307,7 +307,7 @@ error(char* format, ...) va_list ap; va_start(ap, format); - vsprintf(sbuf, format, ap); + erts_vsnprintf(sbuf, sizeof(sbuf), format, ap); va_end(ap); fprintf(stderr, "typer: %s\n", sbuf); exit(1); @@ -336,6 +336,9 @@ get_default_emulator(char* progname) char sbuf[MAXPATHLEN]; char* s; + if (strlen(progname) >= sizeof(sbuf)) + return ERL_NAME; + strcpy(sbuf, progname); for (s = sbuf+strlen(sbuf); s >= sbuf; s--) { if (IS_DIRSEP(*s)) { |