diff tree.c @ 572:5877edf05eb7 libavutil

Avoid undefined behavior for removing elements that were not in the tree.
author michael
date Fri, 19 Sep 2008 12:41:12 +0000
parents 0839746f3fcf
children 6fabc7908537
line wrap: on
line diff
--- a/tree.c	Mon Sep 15 22:10:28 2008 +0000
+++ b/tree.c	Fri Sep 19 12:41:12 2008 +0000
@@ -119,8 +119,11 @@
         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 @@
         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);