Check for valid coverage info before dereferencing it.
authoriain holmes <iain@xamarin.com>
Fri, 27 Feb 2015 12:35:40 +0000 (12:35 +0000)
committeriain holmes <iain@xamarin.com>
Fri, 27 Feb 2015 12:35:40 +0000 (12:35 +0000)
If a profiler had requested MONO_PROFILE_COVERAGE events and not installed a
coverage filter, then the coverage info is NULL and a crash quickly followed

mono/mini/mini-amd64.c
mono/mini/mini-x86.c

index 29336f277da3c7fd455f5e49254d90e3dfcccb7a..a86fedc83988c9e86c231df48dd76f167d1586cd 100755 (executable)
@@ -3825,7 +3825,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
        if (cfg->verbose_level > 2)
                g_print ("Basic block %d starting at offset 0x%x\n", bb->block_num, bb->native_offset);
 
-       if (cfg->prof_options & MONO_PROFILE_COVERAGE) {
+       if ((cfg->prof_options & MONO_PROFILE_COVERAGE) && cfg->coverage_info) {
                MonoProfileCoverageInfo *cov = cfg->coverage_info;
                g_assert (!cfg->compile_aot);
 
index 25c5d0e85c15ec9c377f50ebb6e78499b49e15f2..41a2741591d6dfb5e3f9b0f5e606f27bba7454aa 100644 (file)
@@ -2543,7 +2543,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
 
        cpos = bb->max_offset;
 
-       if (cfg->prof_options & MONO_PROFILE_COVERAGE) {
+       if ((cfg->prof_options & MONO_PROFILE_COVERAGE) && cfg->coverage_info) {
                MonoProfileCoverageInfo *cov = cfg->coverage_info;
                g_assert (!cfg->compile_aot);
                cpos += 6;