2003-01-07 Dietmar Maurer <dietmar@ximian.com>
authorDietmar Maurer <dietmar@mono-cvs.ximian.com>
Tue, 7 Jan 2003 16:18:55 +0000 (16:18 -0000)
committerDietmar Maurer <dietmar@mono-cvs.ximian.com>
Tue, 7 Jan 2003 16:18:55 +0000 (16:18 -0000)
* exception.c (ves_icall_get_frame_info): fix bug 36382

svn path=/trunk/mono/; revision=10249

mono/jit/ChangeLog
mono/jit/exception.c

index 85bb3127c50a49ee278e1ad5353f5fd9d8280e67..d56e33965d0b4b5b44df328bb573b8375753b11b 100644 (file)
@@ -1,3 +1,6 @@
+2003-01-07  Dietmar Maurer  <dietmar@ximian.com>
+
+       * exception.c (ves_icall_get_frame_info): fix bug 36382
 
 Tue Jan 7 15:15:41 CET 2003 Paolo Molaro <lupus@ximian.com>
 
index 6c73bb652b43e80470d68b3869dbf79f8666159b..3cde448b596fa3b44d509f6abf101f31326bb622 100644 (file)
@@ -293,9 +293,9 @@ x86_unwind_native_frame (MonoDomain *domain, MonoJitTlsData *jit_tls, struct sig
                        MONO_CONTEXT_SET_IP (new_ctx, frame->return_address);
                        frame = frame->next;
                        MONO_CONTEXT_SET_BP (new_ctx, frame);
-
-                       /* stop if we detect an unexpected managed frame */
-                       if (mono_jit_info_table_find (domain, frame->return_address)) {
+                       
+                       /* stop if !frame or when we detect an unexpected managed frame */
+                       if (!frame || mono_jit_info_table_find (domain, frame->return_address)) {
                                if (trace) {
                                        g_free (*trace);
                                        *trace = NULL;
@@ -762,11 +762,9 @@ ves_icall_get_frame_info (gint32 skip, MonoBoolean need_file_info,
 
        do {
                ji = mono_arch_find_jit_info (domain, jit_tls, &ctx, &new_ctx, NULL, &lmf, native_offset, NULL);
-               g_assert (ji);
-
                ctx = new_ctx;
                
-               if (MONO_CONTEXT_GET_BP (&ctx) >= jit_tls->end_of_stack)
+               if (!ji || MONO_CONTEXT_GET_BP (&ctx) >= jit_tls->end_of_stack)
                        return FALSE;
 
        } while (skip-- > 0);