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