Преглед изворни кода

ncd: fix integer overflow for impossibly long processes

ambrop7 пре 13 година
родитељ
комит
047f36ad43
1 измењених фајлова са 5 додато и 1 уклоњено
  1. 5 1
      ncd/ncd.c

+ 5 - 1
ncd/ncd.c

@@ -629,7 +629,11 @@ void start_terminate (int exit_code)
 static int process_new (NCDProcess *proc_ast, NCDInterpBlock *iblock, NCDModuleProcess *module_process)
 {
     // get num statements
-    int num_statements = NCDBlock_NumStatements(NCDProcess_Block(proc_ast));
+    size_t num_statements = NCDBlock_NumStatements(NCDProcess_Block(proc_ast));
+    if (num_statements > INT_MAX) {
+        BLog(BLOG_ERROR, "too many statements");
+        goto fail0;
+    }
     
     // calculate allocation size
     bsize_t alloc_size = bsize_add(bsize_fromsize(sizeof(struct process)), bsize_mul(bsize_fromsize(num_statements), bsize_fromsize(sizeof(struct statement))));