Fixes crash in #41631
2003-05-07 Rodrigo Moya <rodrigo@ximian.com> Fixes crash in #41631 * src/libicalvcal/icalvcal.c (icalvcal_traverse_objects): changed to return an error code and to return immediately if one of the recurrent calls return an error. (icalvcal_convert_with_defaults): if icalvcal_traverse_objects return an error, return NULL. svn path=/trunk/; revision=21122
This commit is contained in:

committed by
Rodrigo Moya

parent
b01b792f0f
commit
5257f9dc84
@ -1,3 +1,13 @@
|
|||||||
|
2003-05-07 Rodrigo Moya <rodrigo@ximian.com>
|
||||||
|
|
||||||
|
Fixes crash in #41631
|
||||||
|
|
||||||
|
* src/libicalvcal/icalvcal.c (icalvcal_traverse_objects): changed to
|
||||||
|
return an error code and to return immediately if one of the recurrent
|
||||||
|
calls return an error.
|
||||||
|
(icalvcal_convert_with_defaults): if icalvcal_traverse_objects return
|
||||||
|
an error, return NULL.
|
||||||
|
|
||||||
2003-03-17 Hans Petter Jansson <hpj@ximian.com>
|
2003-03-17 Hans Petter Jansson <hpj@ximian.com>
|
||||||
|
|
||||||
Part of fix for #34095
|
Part of fix for #34095
|
||||||
|
@ -149,10 +149,10 @@ static void convert_floating_time_to_utc (struct icaltimetype *itt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void icalvcal_traverse_objects(VObject *object,
|
static int icalvcal_traverse_objects(VObject *object,
|
||||||
icalcomponent* last_comp,
|
icalcomponent* last_comp,
|
||||||
icalproperty* last_prop,
|
icalproperty* last_prop,
|
||||||
icalvcal_defaults *defaults)
|
icalvcal_defaults *defaults)
|
||||||
{
|
{
|
||||||
VObjectIterator iterator;
|
VObjectIterator iterator;
|
||||||
char* name = "[No Name]";
|
char* name = "[No Name]";
|
||||||
@ -161,8 +161,7 @@ static void icalvcal_traverse_objects(VObject *object,
|
|||||||
|
|
||||||
if ( vObjectName(object)== 0){
|
if ( vObjectName(object)== 0){
|
||||||
printf("ERROR, object has no name");
|
printf("ERROR, object has no name");
|
||||||
assert(0);
|
return 0;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
name = (char*)vObjectName(object);
|
name = (char*)vObjectName(object);
|
||||||
@ -185,8 +184,7 @@ static void icalvcal_traverse_objects(VObject *object,
|
|||||||
icalproperty_set_x_name(prop,name);
|
icalproperty_set_x_name(prop,name);
|
||||||
icalcomponent_add_property(last_comp,prop);
|
icalcomponent_add_property(last_comp,prop);
|
||||||
} else {
|
} else {
|
||||||
assert(0);
|
return 0;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -276,12 +274,16 @@ static void icalvcal_traverse_objects(VObject *object,
|
|||||||
should use it as the 'last_comp' */
|
should use it as the 'last_comp' */
|
||||||
|
|
||||||
if(subc!=0){
|
if(subc!=0){
|
||||||
icalvcal_traverse_objects(eachProp,subc,last_prop,defaults);
|
if (!icalvcal_traverse_objects(eachProp,subc,last_prop,defaults))
|
||||||
|
return 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
icalvcal_traverse_objects(eachProp,last_comp,last_prop,defaults);
|
if (!icalvcal_traverse_objects(eachProp,last_comp,last_prop,defaults))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
icalcomponent* icalvcal_convert_with_defaults (VObject *object,
|
icalcomponent* icalvcal_convert_with_defaults (VObject *object,
|
||||||
@ -307,7 +309,8 @@ icalcomponent* icalvcal_convert_with_defaults (VObject *object,
|
|||||||
printf ("===========================================\n");
|
printf ("===========================================\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
icalvcal_traverse_objects(object,container,0,defaults);
|
if (!icalvcal_traverse_objects(object,container,0,defaults))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* HACK. I am using the extra 'container' component because I am
|
/* HACK. I am using the extra 'container' component because I am
|
||||||
lazy. I know there is a way to get rid of it, but I did not care
|
lazy. I know there is a way to get rid of it, but I did not care
|
||||||
|
Reference in New Issue
Block a user