[FFmpeg-cvslog] r15368 - in trunk/libavutil: tree.c tree.h
michael
subversion
Fri Sep 19 14:41:12 CEST 2008
Author: michael
Date: Fri Sep 19 14:41:12 2008
New Revision: 15368
Log:
Avoid undefined behavior for removing elements that where not in the tree.
Modified:
trunk/libavutil/tree.c
trunk/libavutil/tree.h
Modified: trunk/libavutil/tree.c
==============================================================================
--- trunk/libavutil/tree.c (original)
+++ trunk/libavutil/tree.c Fri Sep 19 14:41:12 2008
@@ -119,8 +119,11 @@ void *av_tree_insert(AVTreeNode **tp, vo
return ret;
}else{
*tp= *next; *next= NULL;
- (*tp)->elem= key;
- return NULL;
+ if(*tp){
+ (*tp)->elem= key;
+ return NULL;
+ }else
+ return key;
}
}
@@ -188,8 +191,7 @@ int main(void){
av_tree_insert(&root, (void*)(j+1), cmp, &node);
j= (random()%86294);
- k= av_tree_find(root, (void*)(j+1), cmp, NULL);
- if(k){
+ {
AVTreeNode *node2=NULL;
av_log(NULL, AV_LOG_ERROR, "removing %4d\n", j);
av_tree_insert(&root, (void*)(j+1), cmp, &node2);
Modified: trunk/libavutil/tree.h
==============================================================================
--- trunk/libavutil/tree.h (original)
+++ trunk/libavutil/tree.h Fri Sep 19 14:41:12 2008
@@ -45,8 +45,7 @@ void *av_tree_find(const struct AVTreeNo
/**
* Inserts or removes an element.
- * If *next is NULL then the element supplied will be removed, if no such
- * element exists behavior is undefined.
+ * If *next is NULL then the element supplied will be removed if it exists.
* If *next is not NULL then the element supplied will be inserted, unless
* it already exists in the tree.
* @param rootp A pointer to a pointer to the root node of the tree. Note that
More information about the ffmpeg-cvslog
mailing list