Compiler warnings
Andreas Ericsson
ae at op5.se
Thu Oct 18 20:53:34 CEST 2007
Andreas Ericsson wrote:
> Andreas Ericsson wrote:
>> Ethan Galstad wrote:
>>> Andreas Ericsson wrote:
>>>> Ahoy.
>>>>
>>>> I was digging around trying to fix a bunch of compiler-warnings, and
>>>> noticed that pretty much every invocation of my_free() resulted in
>>>> about a million warnings, such as this:
>>>>
>>>> ../xdata/xrddefault.c:190: warning: dereferencing type-punned
>>>> pointer will break strict-aliasing rules
>>>>
>>>>
>>>> Considering that not a single invocation of my_free() evaluates the
>>>> return code of the function, a macro such as
>>>>
>>>> #define my_free(ptr) { if(ptr) { free(ptr); ptr = NULL; } }
>>>>
>>>> would do the trick, and also provide a slight performance improvement.
>>>>
>>>> Since a patch would be fairly huge, and I've kinda filled my quota
>>>> for huge patches for today, the following sed-script will take care
>>>> of the call-sites (requires sed 4.0.9 or later):
>>>>
>>>> sed -i 's/my_free[^&]*&\([^)]*\).*/my_free(\1);/' */*.c
>>>>
>>> Definitely a good idea. I've committed this to CVS after some manual
>>> massaging post-sed.
>>>
>> Thanks.
>>
>>> Don't know why, but I get a SIGABRT if I don't comment out two my_free()
>>> statements in xdata/xodtemplate.c in the
>>> xodtemplate_get_inherited_string() function.
>>>
>> I'll look into it.
>>
>
> Hmm. I can't reproduce it, as I don't have a decent config with template
> inheritance using + concat stuff. Have you got anything readily made to
> share? I'll hack some up otherwise, but I'm not sure I'd get one that
> could trigger it.
>
> I'm fairly certain what's happening though. The caller passes the string
> by reference, but we're free()'ing it as if it wasn't, so we're basically
> calling free() on a pointer to the caller's stack frame. Bad thing.
> Change them from
>
> my_free(this_value);
>
> to
>
> my_free(*this_value);
>
> and things might turn out ok. Otherwise, tar up your config and send me
> what you've got and I'll see what I can do.
>
Got the config, verified the crash, and here's the patch.
--%<--%<--%<--
From: Andreas Ericsson <ae at op5.se>
Date: Thu, 18 Oct 2007 20:48:12 +0200
Subject: [PATCH] xodtemplate: Fix SIGABRT from invalid pointer to free()
Signed-off-by: Andreas Ericsson <ae at op5.se>
---
xdata/xodtemplate.c | 10 ++--------
1 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/xdata/xodtemplate.c b/xdata/xodtemplate.c
index 94ef4cd..6594e4e 100644
--- a/xdata/xodtemplate.c
+++ b/xdata/xodtemplate.c
@@ -13390,10 +13390,7 @@ int xodtemplate_get_inherited_string(int *have_template_value, char **template_v
strcpy(buf,*template_value);
strcat(buf,",");
strcat(buf,*this_value+1);
-#ifdef WHY_DOES_THIS_CAUSE_A_SIGABRT
- /**** POTENTIAL MEMORY LEAK ****/
- my_free(this_value);
-#endif
+ my_free(*this_value);
*this_value=buf;
}
}
@@ -13410,10 +13407,7 @@ int xodtemplate_get_inherited_string(int *have_template_value, char **template_v
/* remove the additive symbol if present */
if(*this_value!=NULL && *this_value[0]=='+'){
buf=(char *)strdup(*this_value+1);
-#ifdef WHY_DOES_THIS_CAUSE_A_SIGABRT
- /**** POTENTIAL MEMORY LEAK ****/
- my_free(this_value);
-#endif
+ my_free(*this_value);
*this_value=buf;
}
--
1.5.3.4.1207.g6d77b
--
Andreas Ericsson andreas.ericsson at op5.se
OP5 AB www.op5.se
Tel: +46 8-230225 Fax: +46 8-230231
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-xodtemplate-Fix-SIGABRT-from-invalid-pointer-to-fre.patch
Type: text/x-patch
Size: 1301 bytes
Desc: not available
URL: <https://www.monitoring-lists.org/archive/developers/attachments/20071018/37ea6733/attachment.bin>
-------------- next part --------------
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
-------------- next part --------------
_______________________________________________
Nagios-devel mailing list
Nagios-devel at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nagios-devel
More information about the Developers
mailing list