Merge lp:~3v1n0/unity/fix-keyboardutil-crash-920258-5.0 into lp:unity/5.0

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Marco Trevisan (Treviño)
Approved revision: no longer in the source branch.
Merged at revision: 2384
Proposed branch: lp:~3v1n0/unity/fix-keyboardutil-crash-920258-5.0
Merge into: lp:unity/5.0
Diff against target: 68 lines (+12/-7)
2 files modified
plugins/unityshell/src/KeyboardUtil.cpp (+11/-6)
plugins/unityshell/src/KeyboardUtil.h (+1/-1)
To merge this branch: bzr merge lp:~3v1n0/unity/fix-keyboardutil-crash-920258-5.0
Reviewer Review Type Date Requested Status
Gord Allott (community) Approve
Review via email: mp+113659@code.launchpad.net

Commit message

KeyboardUtil: fix possible crash if XkbGetKeyboard returns null

Also use initializer list

Description of the change

To post a comment you must log in.
Revision history for this message
Gord Allott (gordallott) wrote :

solid code.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'plugins/unityshell/src/KeyboardUtil.cpp'
--- plugins/unityshell/src/KeyboardUtil.cpp 2012-06-28 08:49:20 +0000
+++ plugins/unityshell/src/KeyboardUtil.cpp 2012-07-05 23:01:20 +0000
@@ -25,17 +25,18 @@
2525
26namespace unity {26namespace unity {
27namespace ui {27namespace ui {
28namespace {
29 const unsigned int FETCH_MASK = XkbGBN_KeyNamesMask | XkbGBN_ClientSymbolsMask | XkbGBN_GeometryMask;
30}
2831
29KeyboardUtil::KeyboardUtil(Display *display)32KeyboardUtil::KeyboardUtil(Display *display)
30 : display_(display)33 : display_(display)
31{34 , keyboard_(XkbGetKeyboard(display_, FETCH_MASK, XkbUseCoreKbd))
32 unsigned int fetch_mask = XkbGBN_KeyNamesMask | XkbGBN_ClientSymbolsMask | XkbGBN_GeometryMask;35{}
33 keyboard_ = XkbGetKeyboard (display, fetch_mask, XkbUseCoreKbd);
34}
3536
36KeyboardUtil::~KeyboardUtil()37KeyboardUtil::~KeyboardUtil()
37{38{
38 XkbFreeKeyboard (keyboard_, 0, True);39 XkbFreeKeyboard(keyboard_, 0, True);
39}40}
4041
41bool KeyboardUtil::FindKeyInGeometry(XkbGeometryPtr geo, char *key_name, int& res_section, XkbBoundsRec& res_bounds) const42bool KeyboardUtil::FindKeyInGeometry(XkbGeometryPtr geo, char *key_name, int& res_section, XkbBoundsRec& res_bounds) const
@@ -86,6 +87,9 @@
8687
87guint KeyboardUtil::ConvertKeyToKeycode(XkbKeyPtr key) const88guint KeyboardUtil::ConvertKeyToKeycode(XkbKeyPtr key) const
88{89{
90 if (!keyboard_)
91 return 0;
92
89 int min_code = keyboard_->min_key_code;93 int min_code = keyboard_->min_key_code;
90 int max_code = keyboard_->max_key_code;94 int max_code = keyboard_->max_key_code;
9195
@@ -94,6 +98,7 @@
94 if (!strncmp(key->name.name, keyboard_->names->keys[i].name, XkbKeyNameLength))98 if (!strncmp(key->name.name, keyboard_->names->keys[i].name, XkbKeyNameLength))
95 return i;99 return i;
96 }100 }
101
97 return 0;102 return 0;
98}103}
99104
@@ -186,7 +191,7 @@
186191
187 int code = XKeysymToKeycode(display_, key_symbol);192 int code = XKeysymToKeycode(display_, key_symbol);
188193
189 if (!code)194 if (!code || !keyboard_)
190 return result;195 return result;
191196
192 if (keyboard_->min_key_code > code || keyboard_->max_key_code < code)197 if (keyboard_->min_key_code > code || keyboard_->max_key_code < code)
193198
=== modified file 'plugins/unityshell/src/KeyboardUtil.h'
--- plugins/unityshell/src/KeyboardUtil.h 2012-06-28 08:49:20 +0000
+++ plugins/unityshell/src/KeyboardUtil.h 2012-07-05 23:01:20 +0000
@@ -51,8 +51,8 @@
5151
52 XkbBoundsRec GetAbsoluteKeyBounds (XkbKeyPtr key, XkbRowPtr row, XkbSectionPtr section, XkbGeometryPtr geo) const;52 XkbBoundsRec GetAbsoluteKeyBounds (XkbKeyPtr key, XkbRowPtr row, XkbSectionPtr section, XkbGeometryPtr geo) const;
5353
54 Display *display_;
54 XkbDescPtr keyboard_;55 XkbDescPtr keyboard_;
55 Display *display_;
56};56};
5757
58}58}

Subscribers

People subscribed via source and target branches