* misc/tsearch.c (__tdelete): Remove unnecessary test
authorUlrich Drepper <drepper@redhat.com>
Tue, 2 May 2006 00:50:46 +0000 (00:50 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 2 May 2006 00:50:46 +0000 (00:50 +0000)
[Coverity CID 75].

* sysdeps/generic/unwind-dw2.c (execute_cfa_program): Print error
message for invalid DWARF data instead of crashing.

ChangeLog
misc/tsearch.c
sysdeps/generic/unwind-dw2.c

index 5902e54..7a782f8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2006-05-01  Ulrich Drepper  <drepper@redhat.com>
 
+       * misc/tsearch.c (__tdelete): Remove unnecessary test
+       [Coverity CID 75].
+
+       * sysdeps/generic/unwind-dw2.c (execute_cfa_program): Print error
+       message for invalid DWARF data instead of crashing.
+
        * nis/nss_nis/nis-pwd.c (internal_nis_getpwent_r): Don't try to
        free outkey in error case when batch_read is set.
 
index 5ba244b..1e94d64 100644 (file)
@@ -447,7 +447,7 @@ __tdelete (const void *key, void **vrootp, __compar_fn_t compar)
              /* Q is R's brother, P is R's parent.  The subtree with root
                 R has one black edge less than the subtree with root Q.  */
              q = p->right;
-             if (q != NULL && q->red)
+             if (q->red)
                {
                  /* If Q is red, we know that P is black. We rotate P left
                     so that Q becomes the top node in the tree, with P below
@@ -535,7 +535,7 @@ __tdelete (const void *key, void **vrootp, __compar_fn_t compar)
            {
              /* Comments: see above.  */
              q = p->left;
-             if (q != NULL && q->red)
+             if (q->red)
                {
                  q->red = 0;
                  p->red = 1;
index 5ecf284..d818e5d 100644 (file)
@@ -25,6 +25,7 @@
 #include <error.h>
 #include <libintl.h>
 #include <dwarf2.h>
+#include <stdio.h>
 #include <unwind.h>
 #include <unwind-pe.h>
 #include <unwind-dw2-fde.h>
@@ -837,9 +838,16 @@ execute_cfa_program (const unsigned char *insn_ptr,
        case DW_CFA_restore_state:
          {
            struct frame_state_reg_info *old_rs = fs->regs.prev;
-           fs->regs = *old_rs;
-           old_rs->prev = unused_rs;
-           unused_rs = old_rs;
+#ifdef _LIBC
+           if (old_rs == NULL)
+             __libc_fatal ("invalid DWARF unwind data");
+           else
+#endif
+             {
+               fs->regs = *old_rs;
+               old_rs->prev = unused_rs;
+               unused_rs = old_rs;
+             }
          }
          break;