On Fri, 2016-05-06 at 14:01 +0800, Shih-Yuan Lee (FourDollars) wrote:
Check the priv pointer before loop traverse.
Warning this instead of leaving the program crash directly.
---
libnm/nm-manager.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/libnm/nm-manager.c b/libnm/nm-manager.c
index a6c1f3f..7d86a51 100644
--- a/libnm/nm-manager.c
+++ b/libnm/nm-manager.c
@@ -816,6 +816,11 @@ recheck_pending_activations (NMManager *self)
const GPtrArray *devices;
NMDevice *device;
+ if (!priv) {
+ g_warning ("%s: private data should not be NULL",
__func__);
+ return;
+ }
+
/* For each pending activation, look for an active
connection that has the
* pending activation's object path, where the active
connection and its
* device have both updated their properties to point to
each other, and
Hi Shih-Yuan,
thank you for your patch.
The problem is not really that @priv is NULL, but that @self is not
pointing to a valid object. I think a better patch would be:
recheck_pending_activations (NMManager *self)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMManagerPrivate *priv;
GSList *iter, *next;
NMActiveConnection *candidate;
const GPtrArray *devices;
NMDevice *device;
+ g_return_if_fail (NM_IS_MANAGER (self));
+
+ priv = NM_MANAGER_GET_PRIVATE (self);
+
to reduce the use of the dangling @self pointer to a minimal.
Using g_return_if_fail() is not wrong to catch a bug or to mititgate
a crash in face of a bug. But g_return_if_fail() cannot be the fix
for the bug.
Can you reproduce the issue easily?
Can you share a reproducer?
Thank you,
Thomas
Attachment:
signature.asc
Description: This is a digitally signed message part