[mini] Fix Coverity CID 1455161 & 1455162 (mono/mono#17615)
authorBernhard Urban-Forster <lewurm@gmail.com>
Tue, 5 Nov 2019 18:09:32 +0000 (19:09 +0100)
committerGitHub <noreply@github.com>
Tue, 5 Nov 2019 18:09:32 +0000 (19:09 +0100)
* [mini] Fix Coverity CID 1455161 & 1455162

> Null-checking "ji" suggests that it may be null, but it has already been dereferenced on all paths leading to the check.

* do not rely on assert to guard ji-nullness.  refactor a bit

Commit migrated from https://github.com/mono/mono/commit/93b97d5582cf89d20f2deff9f6232402c30ce3bc

src/mono/mono/mini/trace.c

index 5aada9f..8c26dc7 100644 (file)
@@ -119,6 +119,22 @@ is_gshared_vt_wrapper (MonoMethod *m)
        return !strcmp (m->name, "interp_in") || !strcmp (m->name, "gsharedvt_out_sig");
 }
 
+/* ENTER:i <- interp
+ * ENTER:c <- compiled (JIT or AOT)
+ * ENTER:u <- no JitInfo available
+ */
+static char
+frame_kind (MonoJitInfo *ji)
+{
+       if (!ji)
+               return 'u';
+
+       if (ji->is_interp)
+               return 'i';
+
+       return 'c';
+}
+
 void
 mono_trace_enter_method (MonoMethod *method, MonoJitInfo *ji, MonoProfilerCallContext *ctx)
 {
@@ -143,24 +159,18 @@ mono_trace_enter_method (MonoMethod *method, MonoJitInfo *ji, MonoProfilerCallCo
        if (!ji)
                ji = mini_jit_info_table_find (mono_domain_get (), (char *)MONO_RETURN_ADDRESS (), NULL);
 
-       /* ENTER:i <- interp
-        * ENTER:c <- compiled (JIT or AOT)
-        */
-       printf ("ENTER:%c %s(", ji->is_interp ? 'i' : 'c' , fname);
+       printf ("ENTER:%c %s(", frame_kind (ji), fname);
        g_free (fname);
 
        sig = mono_method_signature_internal (method);
 
-       if (method->is_inflated) {
-
-               if (ji) {
-                       gsctx = mono_jit_info_get_generic_sharing_context (ji);
-                       if (gsctx && gsctx->is_gsharedvt) {
-                               /* Needs a ctx to get precise method */
-                               printf (") <gsharedvt>\n");
-                               mono_atomic_store_release (&output_lock, 0);
-                               return;
-                       }
+       if (method->is_inflated && ji) {
+               gsctx = mono_jit_info_get_generic_sharing_context (ji);
+               if (gsctx && gsctx->is_gsharedvt) {
+                       /* Needs a ctx to get precise method */
+                       printf (") <gsharedvt>\n");
+                       mono_atomic_store_release (&output_lock, 0);
+                       return;
                }
        }
 
@@ -323,21 +333,16 @@ mono_trace_leave_method (MonoMethod *method, MonoJitInfo *ji, MonoProfilerCallCo
        if (!ji)
                ji = mini_jit_info_table_find (mono_domain_get (), (char *)MONO_RETURN_ADDRESS (), NULL);
 
-       /* LEAVE:i <- interp
-        * LEAVE:c <- compiled (JIT or AOT)
-        */
-       printf ("LEAVE:%c %s(", ji->is_interp ? 'i' : 'c' , fname);
+       printf ("LEAVE:%c %s(", frame_kind (ji), fname);
        g_free (fname);
 
-       if (method->is_inflated) {
-               if (ji) {
-                       gsctx = mono_jit_info_get_generic_sharing_context (ji);
-                       if (gsctx && gsctx->is_gsharedvt) {
-                               /* Needs a ctx to get precise method */
-                               printf (") <gsharedvt>\n");
-                               mono_atomic_store_release (&output_lock, 0);
-                               return;
-                       }
+       if (method->is_inflated && ji) {
+               gsctx = mono_jit_info_get_generic_sharing_context (ji);
+               if (gsctx && gsctx->is_gsharedvt) {
+                       /* Needs a ctx to get precise method */
+                       printf (") <gsharedvt>\n");
+                       mono_atomic_store_release (&output_lock, 0);
+                       return;
                }
        }