[Freeassociation-devel] [PATCH] Fix for invalid read in icaltzutil_fetch_timezone

Sean Finney seanius at seanius.net
Tue Mar 8 13:59:25 PST 2011


Hi,

Are we looking at the same code?

"./trunk/libical/src/libical/icaltz-util.c" line 339

looks like it still applies to me...


	Sean


On Tue, 2011-03-08 at 16:28 -0500, Allen Winter wrote:
> Very strange.
> I don't see the code you are patching in the svn repo version of icaltz-util.c
> Well.. I see the EREAD() code, but the other code you are fixing
> doesn't exist in the svn repo and the code that does exist looks ok.
> 
> Additionally, I ran Milan's test program through valgrind and don't see the invalid read.
> 
> So I need to reject this patch -- the code that exists already in trunk looks fine to me.
> 
> 
> On Wednesday, February 16, 2011 08:44:00 am sean finney wrote:
> > note that the calloc calls are still done when num_trans is 0, but this
> > is legal to do and the returned pointers should be safe to pass to
> > free() in such a case.  the dereferencing/reading/writing, however,
> > is not, and that is what is fixed here.
> > --- ./src/libical/icaltz-util.c	2009-01-08 16:50:21.000000000 +0000
> > +++ ./src/libical/icaltz-util.c.new	2011-02-16 13:36:03.231178557 +0000
> > @@ -297,10 +297,10 @@ icaltzutil_fetch_timezone (const char *l
> >  
> >  	transitions = calloc (num_trans, sizeof (time_t));
> >  	r_trans = calloc (num_trans, 4);
> > -	EFREAD(r_trans, 4, num_trans, f);
> >  	temp = r_trans;	
> >  
> >  	if (num_trans) {
> > +		EFREAD(r_trans, 4, num_trans, f);
> >  		trans_idx = calloc (num_trans, sizeof (int));
> >  		for (i = 0; i < num_trans; i++) {
> >  			trans_idx [i] = fgetc (f);
> > @@ -389,7 +389,10 @@ icaltzutil_fetch_timezone (const char *l
> >  		icalprop = icalproperty_new_tzname (types [zidx].zname);
> >  		icalcomponent_add_property (std_comp, icalprop);
> >  
> > -		trans = transitions [stdidx] + types [zidx].gmtoff;
> > +		if (num_trans)
> > +			trans = transitions [stdidx] + types [zidx].gmtoff;
> > +		else
> > +			trans = 0;
> >  		icaltime = icaltime_from_timet (trans, 0);
> >  		dtstart = icaltime;
> >  		dtstart.year = 1970;
> > 
> > 
> > ------------------------------------------------------------------------------
> > The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
> > Pinpoint memory and threading errors before they happen.
> > Find and fix more than 250 security defects in the development cycle.
> > Locate bottlenecks in serial and parallel code that limit performance.
> > http://p.sf.net/sfu/intel-dev2devfeb
> > _______________________________________________
> > Freeassociation-devel mailing list
> > Freeassociation-devel at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/freeassociation-devel
> >
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://lists.infradead.org/pipermail/libical-devel/attachments/20110308/cc056c17/attachment.sig>


More information about the libical-devel mailing list