X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fconsole-unix.c;h=38a82c92e957f3cb76cde6f66bd2031f6009c881;hb=7cbd69d8eac788d65e0a095fb558231bfba08204;hp=43c97c7cfef1a574191fb8a994edc27e90c22acc;hpb=bebc7dd6586ecde7eecb04c6c8a9a1bc4b3c8ff5;p=mono.git diff --git a/mono/metadata/console-unix.c b/mono/metadata/console-unix.c index 43c97c7cfef..38a82c92e95 100644 --- a/mono/metadata/console-unix.c +++ b/mono/metadata/console-unix.c @@ -5,6 +5,7 @@ * Gonzalo Paniagua Javier (gonzalo@ximian.com) * * Copyright (C) 2005-2009 Novell, Inc. (http://www.novell.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #if defined(__native_client__) #include "console-null.c" @@ -246,9 +247,11 @@ do_console_cancel_event (void) mono_error_cleanup (&error); return; } - mono_field_static_get_value (vtable, cancel_handler_field, &load_value); - if (load_value == NULL) + mono_field_static_get_value_checked (vtable, cancel_handler_field, &load_value, &error); + if (load_value == NULL || !is_ok (&error)) { + mono_error_cleanup (&error); return; + } klass = load_value->object.vtable->klass; method = mono_class_get_method_from_name (klass, "BeginInvoke", -1); @@ -444,6 +447,8 @@ set_control_chars (MonoArray *control_chars, const guchar *cc) MonoBoolean ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardown, MonoArray **control_chars, int **size) { + MonoError error; + int dims; dims = terminal_get_dimensions (); @@ -469,7 +474,10 @@ ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardow /* 17 is the number of entries set in set_control_chars() above. * NCCS is the total size, but, by now, we only care about those 17 values*/ - mono_gc_wbarrier_generic_store (control_chars, (MonoObject*) mono_array_new (mono_domain_get (), mono_defaults.byte_class, 17)); + MonoArray *control_chars_arr = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, 17, &error); + if (mono_error_set_pending_exception (&error)) + return FALSE; + mono_gc_wbarrier_generic_store (control_chars, (MonoObject*) control_chars_arr); if (tcgetattr (STDIN_FILENO, &initial_attr) == -1) return FALSE; @@ -490,13 +498,21 @@ ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardow if (setup_finished) return TRUE; - keypad_xmit_str = keypad != NULL ? mono_string_to_utf8 (keypad) : NULL; + keypad_xmit_str = NULL; + if (keypad != NULL) { + keypad_xmit_str = mono_string_to_utf8_checked (keypad, &error); + if (mono_error_set_pending_exception (&error)) + return FALSE; + } console_set_signal_handlers (); setup_finished = TRUE; if (!atexit_called) { - if (teardown != NULL) - teardown_str = mono_string_to_utf8 (teardown); + if (teardown != NULL) { + teardown_str = mono_string_to_utf8_checked (teardown, &error); + if (mono_error_set_pending_exception (&error)) + return FALSE; + } mono_atexit (tty_teardown); }