From 0f281a41e3d6172c989bbb3249610cce795da1fd Mon Sep 17 00:00:00 2001
From: Daniel Waggoner <dwaggoner@frbatlanta.org>
Date: Tue, 22 Feb 2011 17:33:14 -0500
Subject: [PATCH] killed bug in dw_histogram.c caused by uninitialized variable
 (cherry picked from commit 7663b6d5488896126a95e697cbf843277de9f1ac)

---
 histogram/dw_histogram.c | 89 +++++++++++++++++-----------------------
 1 file changed, 37 insertions(+), 52 deletions(-)

diff --git a/histogram/dw_histogram.c b/histogram/dw_histogram.c
index 9f8fdda..d38c54f 100644
--- a/histogram/dw_histogram.c
+++ b/histogram/dw_histogram.c
@@ -692,10 +692,10 @@ static TMatrix MakeHistogramAuto(int low, int *h, int high, PRECISION min, PRECI
  PRECISION inc=(max-min)/intervals, max_out, min_out;
  int lo, hi;
 
- if ((low == sample_size) || (inc <= 0))
+ if ((low == sample_size) || (high == sample_size) || (inc <= 0))
    {
-     min_out=min-1.0;
-     max_out=min+1.0;
+     min_out=min-0.5;
+     max_out=min+0.5;
    }
  else
    {
@@ -704,60 +704,45 @@ static TMatrix MakeHistogramAuto(int low, int *h, int high, PRECISION min, PRECI
      else
        for (lo=0; (lo < intervals) && !h[lo]; lo++);
 
-     if (lo == intervals)
-       {
-	 min_out=max-1.0;
-	 max_out=max+1.0;
-       }
+     if (high > 0)
+       hi=intervals;
      else
+       for (hi=intervals-1;(hi >= 0) && !h[hi]; hi--);
+
+     if (lo >= 0)
        {
-	 if (high > 0)
-	   hi=intervals;
+	 min_out=min+lo*inc;
+	 if (hi < intervals)
+	   max_out=min+(hi+1)*inc;
 	 else
-	   for (hi=intervals-1; !h[hi]; hi--);
-
-	 if (lo >= 0)
-	   if (hi < intervals)
-	     {
-	       min_out=min+lo*inc;
-	       max_out=min+(hi+1)*inc;
-	     }
-	   else
-	     {
-	       min_out=min+lo*inc;
-	       if (bins == 1)
-		 max_out=(1+SQRT_MACHINE_EPSILON)*max;
-	       else
-		 {
-		   inc=(1-SQRT_MACHINE_EPSILON)*(max - min_out)/(PRECISION)(bins-1);
-		   max_out=max + inc;
-		 }
-	     }
-	 else
-	   if (hi < intervals)
-	     {
-	       max_out=min+(hi+1)*inc;
-	       if (bins == 1)
-		 min_out=(1-SQRT_MACHINE_EPSILON)*min;
-	       else
-		 {
-		   inc=(1-SQRT_MACHINE_EPSILON)*(max_out - min)/(PRECISION)(bins-1);
-		   min_out=min - inc;
-		 }
-	     }
-	   else
-	     if (bins <= 2)
-	       {
-		 min_out=(1-SQRT_MACHINE_EPSILON)*min;
-		 max_out=(1+SQRT_MACHINE_EPSILON)*max;
-	       }
+	   {
+	     if (bins == 1)
+	       max_out=(1.0+SQRT_MACHINE_EPSILON)*max;
 	     else
-	       {
-		 inc=(1-SQRT_MACHINE_EPSILON)*(max_out - min)/(PRECISION)(bins-2);
-		 min_out=min - inc;
-		 max_out=max +inc;
-	       }
+	       max_out=max + (1.0-SQRT_MACHINE_EPSILON)*(max - min_out)/(PRECISION)(bins-1);
+	   }
        }
+     else
+       if (hi < intervals)
+	 {
+	   max_out=min+(hi+1)*inc;
+	   if (bins == 1)
+	     min_out=(1.0-SQRT_MACHINE_EPSILON)*min;
+	   else
+	     min_out=min - (1.0-SQRT_MACHINE_EPSILON)*(max_out - min)/(PRECISION)(bins-1);
+	 }
+       else
+	 if (bins <= 2)
+	   {
+	     min_out=(1.0-SQRT_MACHINE_EPSILON)*min;
+	     max_out=(1.0+SQRT_MACHINE_EPSILON)*max;
+	   }
+	 else
+	   {
+	     inc=(1.0-SQRT_MACHINE_EPSILON)*(max - min)/(PRECISION)(bins-2);
+	     min_out=min - inc;
+	     max_out=max + inc;
+	   }
    }
                                      
  return MakeHistogram(low,h,min,max,intervals,sample_size,min_out,max_out,bins);
-- 
GitLab