[Mono-winforms-list] Bugzilla isn't working, so I'm posting this bug report for MWF

Rafael Teixeira monoman at gmail.com
Wed Jun 28 11:03:13 EDT 2006


**Description of Problem:

When starting a WinForms application on a station with the ABNT2
(Brazilian 105-Key Keyboard) layout, we have a "Array index is out of
range." exception in <0x0043e>
System.Windows.Forms.X11Keyboard:CreateConversionArray that kills the
app.

**Steps to reproduce the problem:
1. Just run a SWF app, with that keyboard layout set on X11.

**Actual Results:

Unhandled Exception: System.TypeInitializationException: An exception
was thrown by the type initializer for System.Windows.Forms.XplatUI --->
System.IndexOutOfRangeException: Array index is out of range.
in <0x0043e> System.Windows.Forms.X11Keyboard:CreateConversionArray
(System.Windows.Forms.KeyboardLayouts layouts,
System.Windows.Forms.KeyboardLayout layout)
in <0x000d8> System.Windows.Forms.X11Keyboard:.ctor (IntPtr display,
IntPtr window)
in <0x003e9> System.Windows.Forms.XplatUIX11:SetDisplay (IntPtr
display_handle)
in <0x0008b> System.Windows.Forms.XplatUIX11:.ctor ()
in <0x00040> System.Windows.Forms.XplatUIX11:GetInstance ()
in <0x00061> System.Windows.Forms.XplatUI:.cctor ()--- End of inner
exception stack trace ---

in <0x00000> <unknown method>
in <0x00064> System.Windows.Forms.Form:get_CreateParams ()
in <0x00273> System.Windows.Forms.Control:.ctor ()
in <0x00011> System.Windows.Forms.ScrollableControl:.ctor ()
in <0x00010> System.Windows.Forms.ContainerControl:.ctor ()
in <0x00019> System.Windows.Forms.Form:.ctor ()
in <0x00017> TestGUIWordCount.Form1:.ctor ()
in (wrapper remoting-invoke-with-check) TestGUIWordCount.Form1:.ctor ()
in <0x00018> TestGUIWordCount.Form1:Main ()

**Expected Results:
Just showing the app form.

**How often does this happen?

Always for that keyboard layout.

**Additional Information:

This patch, deals with the exception so the app runs, and shows some
debugging information that may lead to the correct fix:

Index: System.Windows.Forms/X11Keyboard.cs
===================================================================
--- System.Windows.Forms/X11Keyboard.cs	(revision 61762)
+++ System.Windows.Forms/X11Keyboard.cs	(working copy)
@@ -497,14 +498,25 @@
 							}
 						}
 						if (maxval >= 0) {
-							scan = layouts.scan_table [(int) layout.ScanIndex][maxval];
-							vkey = layouts.vkey_table [(int) layout.VKeyIndex][maxval];
+							try {
+								scan = layouts.scan_table [(int) layout.ScanIndex][maxval];
+								vkey = layouts.vkey_table [(int) layout.VKeyIndex][maxval];
+							} catch (Exception e) {
+								Console.WriteLine("Ignoring invalid indexes '{0}' '{1}'
'{2}'", (int) layout.ScanIndex, (int) layout.VKeyIndex, maxval);
+							
+								scan = 0;
+								vkey = 0;
+							}
 						}
 						
 					}
 				}
-				keyc2vkey [e2.KeyEvent.keycode] = vkey;
-				keyc2scan [e2.KeyEvent.keycode] = scan;
+				if (e2.KeyEvent.keycode < 0 || e2.KeyEvent.keycode > 255)
+					Console.WriteLine("Ignoring invalid keycode found '{0}'",
e2.KeyEvent.keycode);
+				else {
+					keyc2vkey [e2.KeyEvent.keycode] = vkey;
+					keyc2scan [e2.KeyEvent.keycode] = scan;
+				}
 			}


-- 
Rafael "Monoman" Teixeira
---------------------------------------
"The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore all
progress depends on the unreasonable man." George Bernard Shaw


More information about the Mono-winforms-list mailing list