Fix some loader error leaks.
authorRodrigo Kumpera <kumpera@gmail.com>
Mon, 23 Aug 2010 18:37:48 +0000 (15:37 -0300)
committerRodrigo Kumpera <kumpera@gmail.com>
Mon, 23 Aug 2010 19:03:24 +0000 (16:03 -0300)
* method-to-ir.c (mono_method_to_ir): Check
mono/mini_get_method for loader errors.

Fixes #633287

mono/mini/method-to-ir.c

index d0ee2b74562cdae58f1ac16f87783d537a3c9f07..dfb247ce0053b0c86423a9592615477a5a03445a 100644 (file)
@@ -6133,7 +6133,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        /* FIXME: check the signature matches */
                        cmethod = mini_get_method (cfg, method, token, NULL, generic_context);
 
-                       if (!cmethod)
+                       if (!cmethod || mono_loader_get_last_error ())
                                goto load_error;
  
                        if (cfg->generic_sharing_context && mono_method_check_context_used (cmethod))
@@ -6247,7 +6247,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        cil_method = cmethod;
                                }
 
-                               if (!cmethod)
+                               if (!cmethod || mono_loader_get_last_error ())
                                        goto load_error;
                                if (!dont_verify && !cfg->skip_visibility) {
                                        MonoMethod *target_method = cil_method;
@@ -7546,7 +7546,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        CHECK_OPSIZE (5);
                        token = read32 (ip + 1);
                        cmethod = mini_get_method (cfg, method, token, NULL, generic_context);
-                       if (!cmethod)
+                       if (!cmethod || mono_loader_get_last_error ())
                                goto load_error;
                        fsig = mono_method_get_signature (cmethod, image, token);
                        if (!fsig)
@@ -9579,7 +9579,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                CHECK_OPSIZE (6);
                                n = read32 (ip + 2);
                                cmethod = mini_get_method (cfg, method, n, NULL, generic_context);
-                               if (!cmethod)
+                               if (!cmethod || mono_loader_get_last_error ())
                                        goto load_error;
                                mono_class_init (cmethod->klass);
 
@@ -9653,7 +9653,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                CHECK_OPSIZE (6);
                                n = read32 (ip + 2);
                                cmethod = mini_get_method (cfg, method, n, NULL, generic_context);
-                               if (!cmethod)
+                               if (!cmethod || mono_loader_get_last_error ())
                                        goto load_error;
                                mono_class_init (cmethod->klass);