Commit eed36075 authored by Michael Niedermayer's avatar Michael Niedermayer

Avoid undefined behavior for removing elements that were not in the tree.

Originally committed as revision 15368 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 0354ddb7
...@@ -119,8 +119,11 @@ void *av_tree_insert(AVTreeNode **tp, void *key, int (*cmp)(void *key, const voi ...@@ -119,8 +119,11 @@ void *av_tree_insert(AVTreeNode **tp, void *key, int (*cmp)(void *key, const voi
return ret; return ret;
}else{ }else{
*tp= *next; *next= NULL; *tp= *next; *next= NULL;
if(*tp){
(*tp)->elem= key; (*tp)->elem= key;
return NULL; return NULL;
}else
return key;
} }
} }
...@@ -188,8 +191,7 @@ int main(void){ ...@@ -188,8 +191,7 @@ int main(void){
av_tree_insert(&root, (void*)(j+1), cmp, &node); av_tree_insert(&root, (void*)(j+1), cmp, &node);
j= (random()%86294); j= (random()%86294);
k= av_tree_find(root, (void*)(j+1), cmp, NULL); {
if(k){
AVTreeNode *node2=NULL; AVTreeNode *node2=NULL;
av_log(NULL, AV_LOG_ERROR, "removing %4d\n", j); av_log(NULL, AV_LOG_ERROR, "removing %4d\n", j);
av_tree_insert(&root, (void*)(j+1), cmp, &node2); av_tree_insert(&root, (void*)(j+1), cmp, &node2);
......
...@@ -45,8 +45,7 @@ void *av_tree_find(const struct AVTreeNode *root, void *key, int (*cmp)(void *ke ...@@ -45,8 +45,7 @@ void *av_tree_find(const struct AVTreeNode *root, void *key, int (*cmp)(void *ke
/** /**
* Inserts or removes an element. * Inserts or removes an element.
* If *next is NULL then the element supplied will be removed, if no such * If *next is NULL then the element supplied will be removed if it exists.
* element exists behavior is undefined.
* If *next is not NULL then the element supplied will be inserted, unless * If *next is not NULL then the element supplied will be inserted, unless
* it already exists in the tree. * it already exists in the tree.
* @param rootp A pointer to a pointer to the root node of the tree. Note that * @param rootp A pointer to a pointer to the root node of the tree. Note that
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment