Bug 440535 - StyledText: incorrectly handles key bindings for
SWT.KEYPAD_CR

Change-Id: I0248e481f394ab2e097f46b88c3a137ddc834306
Signed-off-by: Niraj Modi <niraj.modi@in.ibm.com>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
index 61de3bf..1f15ccb 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
@@ -8908,8 +8908,14 @@
 public void setKeyBinding(int key, int action) {
 	checkWidget();
 	int modifierValue = key & SWT.MODIFIER_MASK;
-	char keyChar = (char)(key & SWT.KEY_MASK);
-	if (Compatibility.isLetter(keyChar)) {
+	int keyInt = key & SWT.KEY_MASK;
+	char keyChar = (char)keyInt;
+	/**
+	 * Bug 440535: Make sure the key getting mapped to letter is in defiened
+	 * character range and filter out incorrect int to char typecasting. For
+	 * Example: SWT.KEYPAD_CR int gets wrongly type-cast to char letter 'p'
+	 */
+	if (Character.isDefined(keyInt) && Compatibility.isLetter(keyChar)) {
 		// make the keybinding case insensitive by adding it
 		// in its upper and lower case form
 		char ch = Character.toUpperCase(keyChar);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
index 47fdc3d..25cfd7f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
@@ -227,6 +227,10 @@
 	assertTrue(":c:", text.getKeyBinding(SWT.DEL | SWT.MOD2) == ST.SELECT_PAGE_UP);
 	text.setKeyBinding(SWT.DEL | SWT.MOD2, ST.PAGE_UP);
 	assertTrue(":d:", text.getKeyBinding(SWT.DEL | SWT.MOD2) == ST.PAGE_UP);
+	text.setKeyBinding(SWT.KEYPAD_CR, ST.LINE_END);
+	assertTrue(":e:", text.getKeyBinding(SWT.KEYPAD_CR) == ST.LINE_END);
+	text.setKeyBinding(SWT.KEYPAD_CR | SWT.MOD1, ST.LINE_START);
+	assertTrue(":f:", text.getKeyBinding(SWT.KEYPAD_CR | SWT.MOD1) == ST.LINE_START);
 	text.setKeyBinding(-1, ST.PAGE_UP);
 	text.setKeyBinding(-1, -1);
 }