Просмотр исходного кода

ncd: fix integer overflow for impossibly long processes

ambrop7 13 лет назад
Родитель
Сommit
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))));