summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChang S. Bae <chang.seok.bae@intel.com>2018-05-02 08:07:53 -0700
committerCyrill Gorcunov <gorcunov@gmail.com>2018-05-05 23:44:33 +0300
commitf0ceb1e122dc3523123dd8dfd6113f2e68451452 (patch)
tree0bed0ca2c822decd2d8147cb196e30c76f901296
parent427d8e3e57b68370daa143c3e501df9c23e9869f (diff)
downloadnasm-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.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/asm/nasm.c b/asm/nasm.c
index 666c3375..ecab73be 100644
--- a/asm/nasm.c
+++ b/asm/nasm.c
@@ -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