Merge lp:~malaperle/ubuntu/raring/overlay-scrollbar/lp-789123 into lp:ubuntu/raring/overlay-scrollbar

Proposed by Marc-Andre Laperle
Status: Needs review
Proposed branch: lp:~malaperle/ubuntu/raring/overlay-scrollbar/lp-789123
Merge into: lp:ubuntu/raring/overlay-scrollbar
Diff against target: 209 lines (+46/-0)
1 file modified
os/os-scrollbar.c (+46/-0)
To merge this branch: bzr merge lp:~malaperle/ubuntu/raring/overlay-scrollbar/lp-789123
Reviewer Review Type Date Requested Status
Ayatana Scrollbar Team Pending
Review via email: mp+188376@code.launchpad.net

Description of the change

Fix stack overflow when a callback contains a bad or null pointer in its parameters (gpointer user_data for example).

From a callback, get_private gets called with a bad pointer as parameter. This makes lookup_private always return a null pointer which makes it call swap_thumb which calls get_private again with the bad pointer and so on.

callback -> get_private -> swap_thumb -> get_private -> swap_thumb -> get_private -> ...

To post a comment you must log in.
36. By Marc-Andre Laperle

Fix stack overflow (LP: #789123)

Unmerged revisions

36. By Marc-Andre Laperle

Fix stack overflow (LP: #789123)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'os/os-scrollbar.c'
2--- os/os-scrollbar.c 2013-02-06 00:00:54 +0000
3+++ os/os-scrollbar.c 2013-09-30 17:51:45 +0000
4@@ -717,6 +717,8 @@
5 static gboolean
6 hide_thumb_cb (gpointer user_data)
7 {
8+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
9+
10 GtkScrollbar *scrollbar;
11 OsScrollbarPrivate *priv;
12
13@@ -772,6 +774,8 @@
14 scrolling_cb (gfloat weight,
15 gpointer user_data)
16 {
17+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
18+
19 GtkScrollbar *scrollbar;
20 OsScrollbarPrivate *priv;
21 gdouble new_value;
22@@ -798,6 +802,8 @@
23 static void
24 scrolling_end_cb (gpointer user_data)
25 {
26+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
27+
28 GtkScrollbar *scrollbar;
29 OsScrollbarPrivate *priv;
30
31@@ -1141,6 +1147,8 @@
32 notify_orientation_cb (GObject *object,
33 gpointer user_data)
34 {
35+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
36+
37 GtkScrollbar *scrollbar;
38 OsScrollbarPrivate *priv;
39
40@@ -1156,6 +1164,8 @@
41 static void
42 scrolling_stop_cb (gpointer user_data)
43 {
44+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
45+
46 GtkScrollbar *scrollbar;
47 OsScrollbarPrivate *priv;
48
49@@ -1269,6 +1279,8 @@
50 GtkScrollbar *scrollbar;
51 OsScrollbarPrivate *priv;
52
53+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
54+
55 scrollbar = GTK_SCROLLBAR (user_data);
56 priv = get_private (GTK_WIDGET (scrollbar));
57
58@@ -1343,6 +1355,8 @@
59 adjustment_changed_cb (GtkAdjustment *adjustment,
60 gpointer user_data)
61 {
62+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
63+
64 GtkScrollbar *scrollbar;
65 OsScrollbarPrivate *priv;
66
67@@ -1485,6 +1499,8 @@
68 adjustment_value_changed_cb (GtkAdjustment *adjustment,
69 gpointer user_data)
70 {
71+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
72+
73 GtkScrollbar *scrollbar;
74 OsScrollbarPrivate *priv;
75
76@@ -1631,6 +1647,8 @@
77 if (event->button == 1 ||
78 event->button == 2)
79 {
80+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
81+
82 GtkScrollbar *scrollbar;
83 OsScrollbarPrivate *priv;
84
85@@ -1805,6 +1823,8 @@
86 if (event->button == 1 ||
87 event->button == 2)
88 {
89+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
90+
91 GtkScrollbar *scrollbar;
92 OsScrollbarPrivate *priv;
93
94@@ -1872,6 +1892,8 @@
95 GdkEventCrossing *event,
96 gpointer user_data)
97 {
98+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
99+
100 GtkScrollbar *scrollbar;
101
102 scrollbar = GTK_SCROLLBAR (user_data);
103@@ -1895,6 +1917,8 @@
104 GdkEventCrossing *event,
105 gpointer user_data)
106 {
107+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
108+
109 GtkScrollbar *scrollbar;
110 OsScrollbarPrivate *priv;
111
112@@ -2074,6 +2098,8 @@
113 GdkEventMotion *event,
114 gpointer user_data)
115 {
116+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
117+
118 GtkScrollbar *scrollbar;
119 OsScrollbarPrivate *priv;
120
121@@ -2472,6 +2498,8 @@
122 GdkEventScroll *event,
123 gpointer user_data)
124 {
125+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
126+
127 GtkScrollbar *scrollbar;
128 OsScrollbarPrivate *priv;
129 gdouble delta;
130@@ -2520,6 +2548,8 @@
131 thumb_unmap_cb (GtkWidget *widget,
132 gpointer user_data)
133 {
134+ g_return_if_fail(GTK_IS_SCROLLBAR(user_data));
135+
136 GtkScrollbar *scrollbar;
137 OsScrollbarPrivate *priv;
138
139@@ -2555,6 +2585,8 @@
140 GdkEventConfigure *event,
141 gpointer user_data)
142 {
143+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
144+
145 GtkScrollbar *scrollbar = GTK_SCROLLBAR (user_data);
146 OsScrollbarPrivate *priv = get_private (GTK_WIDGET (scrollbar));
147 const gint64 current_time = g_get_monotonic_time ();
148@@ -2895,6 +2927,8 @@
149 static gboolean
150 show_thumb_cb (gpointer user_data)
151 {
152+ g_return_val_if_fail(GTK_IS_SCROLLBAR(user_data), FALSE);
153+
154 GtkScrollbar *scrollbar;
155 OsScrollbarPrivate *priv;
156
157@@ -3419,6 +3453,8 @@
158 {
159 if (use_overlay_scrollbar ())
160 {
161+ g_return_if_fail(GTK_IS_WIDGET(widget));
162+
163 GtkScrollbar *scrollbar;
164 OsScrollbarPrivate *priv;
165
166@@ -3489,6 +3525,8 @@
167
168 if (use_overlay_scrollbar ())
169 {
170+ g_return_if_fail(GTK_IS_WIDGET(widget));
171+
172 GtkScrollbar *scrollbar;
173 OsScrollbarPrivate *priv;
174
175@@ -3683,6 +3721,8 @@
176 {
177 if (use_overlay_scrollbar ())
178 {
179+ g_return_if_fail(GTK_IS_WIDGET(widget));
180+
181 GtkScrollbar *scrollbar;
182 OsScrollbarPrivate *priv;
183
184@@ -3949,6 +3989,8 @@
185 {
186 if (use_overlay_scrollbar ())
187 {
188+ g_return_if_fail(GTK_IS_WIDGET(widget));
189+
190 GtkScrollbar *scrollbar;
191
192 scrollbar = GTK_SCROLLBAR (widget);
193@@ -3970,6 +4012,8 @@
194 {
195 if (use_overlay_scrollbar ())
196 {
197+ g_return_if_fail(GTK_IS_WIDGET(widget));
198+
199 GtkScrollbar *scrollbar;
200 OsScrollbarPrivate *priv;
201
202@@ -3998,6 +4042,8 @@
203
204 if (use_overlay_scrollbar ())
205 {
206+ g_return_if_fail(GTK_IS_WIDGET(widget));
207+
208 GtkScrollbar *scrollbar;
209 OsScrollbarPrivate *priv;
210

Subscribers

People subscribed via source and target branches