diff options
author | Chang S. Bae <chang.seok.bae@intel.com> | 2018-05-02 08:07:53 -0700 |
---|---|---|
committer | Cyrill Gorcunov <gorcunov@gmail.com> | 2018-05-05 23:44:33 +0300 |
commit | f0ceb1e122dc3523123dd8dfd6113f2e68451452 (patch) | |
tree | 0bed0ca2c822decd2d8147cb196e30c76f901296 | |
parent | 427d8e3e57b68370daa143c3e501df9c23e9869f (diff) | |
download | nasm-f0ceb1e122dc3523123dd8dfd6113f2e68451452.tar.gz |
assemble: Check global line limit
Without the limit, the while loop opens to semi-infinite
that will exhaustively consume the heap space. Also, the
index value gets into the garbage.
https://bugzilla.nasm.us/show_bug.cgi?id=3392474
Reported-by : Dongliang Mu <mudongliangabcd@gmail.com>
Signed-off-by: Chang S. Bae <chang.seok.bae@intel.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
-rw-r--r-- | asm/nasm.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -105,6 +105,8 @@ static const char *listname; static const char *errname; static int globallineno; /* for forward-reference tracking */ +#define GLOBALLINENO_MAX INT32_MAX + /* static int pass = 0; */ const struct ofmt *ofmt = &OF_DEFAULT; const struct ofmt_alias *ofmt_alias = NULL; @@ -1342,7 +1344,10 @@ static void assemble_file(const char *fname, StrList **depend_ptr) location.offset = offs = get_curr_offs(); while ((line = preproc->getline())) { - globallineno++; + if (globallineno++ == GLOBALLINENO_MAX) + nasm_error(ERR_FATAL, + "overall line number reaches the maximum %d\n", + GLOBALLINENO_MAX); /* * Here we parse our directives; this is not handled by the |