diff --git a/docs/writingmodules.rst b/docs/writingmodules.rst index baeaa0c7c8..0e20f0c359 100644 --- a/docs/writingmodules.rst +++ b/docs/writingmodules.rst @@ -657,11 +657,14 @@ checks in your code nevertheless). In those cases you can use the const uint8_t* block_data; block = first_memory_block(context); - block_data = block->fetch_data(block) - - if (block_data != NULL) + if (block != NULL) { - ..do something with the memory block + block_data = block->fetch_data(block) + + if (block_data != NULL) + { + ..do something with the memory block + } } } diff --git a/libyara/modules/magic/magic.c b/libyara/modules/magic/magic.c index 5e435d8f41..03e9f31d8a 100644 --- a/libyara/modules/magic/magic.c +++ b/libyara/modules/magic/magic.c @@ -101,6 +101,10 @@ define_function(magic_mime_type) if (cache->cached_mime_type == NULL) { block = first_memory_block(context); + + if (block == NULL) + return_string(YR_UNDEFINED); + block_data = block->fetch_data(block); if (block_data != NULL) @@ -134,6 +138,10 @@ define_function(magic_type) if (cache->cached_type == NULL) { block = first_memory_block(context); + + if (block == NULL) + return_string(YR_UNDEFINED); + block_data = block->fetch_data(block); if (block_data != NULL) diff --git a/libyara/modules/math/math.c b/libyara/modules/math/math.c index 98193c4a63..ee1e072d2f 100644 --- a/libyara/modules/math/math.c +++ b/libyara/modules/math/math.c @@ -64,7 +64,7 @@ uint32_t* get_distribution(int64_t offset, int64_t length, YR_SCAN_CONTEXT* cont YR_MEMORY_BLOCK* block = first_memory_block(context); YR_MEMORY_BLOCK_ITERATOR* iterator = context->iterator; - if (offset < 0 || length < 0 || offset < block->base) + if (block == NULL || offset < 0 || length < 0 || offset < block->base) { yr_free(data); return NULL; @@ -132,9 +132,8 @@ uint32_t* get_distribution_global(YR_SCAN_CONTEXT* context) { if (data == NULL) return NULL; - YR_MEMORY_BLOCK* block = first_memory_block(context); + YR_MEMORY_BLOCK* block; YR_MEMORY_BLOCK_ITERATOR* iterator = context->iterator; - foreach_memory_block(iterator, block) { if (expected_next_offset != block->base) @@ -323,6 +322,9 @@ define_function(data_serial_correlation) YR_MEMORY_BLOCK* block = first_memory_block(context); YR_MEMORY_BLOCK_ITERATOR* iterator = context->iterator; + if (block == NULL) + return_float(YR_UNDEFINED); + double sccun = 0; double sccfirst = 0; double scclast = 0; @@ -450,6 +452,9 @@ define_function(data_monte_carlo_pi) YR_MEMORY_BLOCK* block = first_memory_block(context); YR_MEMORY_BLOCK_ITERATOR* iterator = context->iterator; + if (block == NULL) + return_float(YR_UNDEFINED); + if (offset < 0 || length < 0 || offset < block->base) return_float(YR_UNDEFINED);