Annotation of /trunk/hal/patches/hal-0.5.10-use-GString-to-convert-a-strlist-propery-to-string-i.patch
Parent Directory | Revision Log
Revision 597 -
(hide annotations)
(download)
Mon May 19 19:05:19 2008 UTC (16 years, 4 months ago) by niro
File size: 1769 byte(s)
Mon May 19 19:05:19 2008 UTC (16 years, 4 months ago) by niro
File size: 1769 byte(s)
-gentoo patches
1 | niro | 597 | From d5760968584ce3781ff25d13030e0a5fe3d5dba4 Mon Sep 17 00:00:00 2001 |
2 | From: Sjoerd Simons <sjoerd@luon.net> | ||
3 | Date: Sun, 2 Dec 2007 22:17:27 +0100 | ||
4 | Subject: [PATCH] use GString to convert a strlist propery to string instead of a static buffer | ||
5 | |||
6 | Instead of a static 256 chars buffer use a GString when converting strlist | ||
7 | properties to string. This prevents clipping the list. | ||
8 | |||
9 | Also fixes a hal crash because the old code didn't do a proper \0 terminate | ||
10 | when the string overflowed (strncpy is a very nice function *cough*). | ||
11 | Eventually the string containing garbage would be passed over dbus to the | ||
12 | runner which would disconnect from the private bus. | ||
13 | --- | ||
14 | hald/device.c | 25 ++++++++----------------- | ||
15 | 1 files changed, 8 insertions(+), 17 deletions(-) | ||
16 | |||
17 | diff --git a/hald/device.c b/hald/device.c | ||
18 | index 9514c9d..a3b84f4 100644 | ||
19 | --- a/hald/device.c | ||
20 | +++ b/hald/device.c | ||
21 | @@ -160,28 +160,19 @@ hal_property_to_string (HalProperty *prop) | ||
22 | case HAL_PROPERTY_TYPE_STRLIST: | ||
23 | { | ||
24 | GSList *iter; | ||
25 | - guint i; | ||
26 | - char buf[256]; | ||
27 | + GString *buf; | ||
28 | + | ||
29 | + buf = g_string_new (""); | ||
30 | |||
31 | - i = 0; | ||
32 | - buf[0] = '\0'; | ||
33 | - for (iter = hal_property_get_strlist (prop); | ||
34 | - iter != NULL && i < sizeof(buf); | ||
35 | + for (iter = hal_property_get_strlist (prop); iter != NULL; | ||
36 | iter = g_slist_next (iter)) { | ||
37 | - guint len; | ||
38 | - const char *str; | ||
39 | - | ||
40 | - str = (const char *) iter->data; | ||
41 | - len = strlen (str); | ||
42 | - strncpy (buf + i, str, sizeof(buf) - i); | ||
43 | - i += len; | ||
44 | + g_string_append (buf, (const char *) iter->data); | ||
45 | |||
46 | - if (g_slist_next (iter) != NULL && i < sizeof(buf)) { | ||
47 | - buf[i] = '\t'; | ||
48 | - i++; | ||
49 | + if (g_slist_next (iter) != NULL) { | ||
50 | + g_string_append_c(buf, '\t'); | ||
51 | } | ||
52 | } | ||
53 | - return g_strdup (buf); | ||
54 | + return g_string_free (buf, FALSE); | ||
55 | } | ||
56 | |||
57 | default: | ||
58 | -- | ||
59 | 1.5.3.7 | ||
60 |