Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Mar 2000 19:48:34 +0300 (MSK)
From:      Dmitry Sivachenko <dima@Chg.RU>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   ports/17221: Fix net/rrdtool
Message-ID:  <200003061648.TAA78509@netserv1.chg.ru>

next in thread | raw e-mail | index | archive | help

>Number:         17221
>Category:       ports
>Synopsis:       Fix net/rrdtool
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Mar  6 08:50:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Dmitry Sivachenko
>Release:        FreeBSD 3.3-RELEASE i386
>Organization:
>Environment:

	

>Description:

Please apply this patch to the net/rrdtool port.
It eliminates core dump under some conditions.
Submitted-by: phk@freebsd.org



>How-To-Repeat:

	

>Fix:
	
	

diff -Nur rrdtool.old/patches/patch-ap rrdtool/patches/patch-ap
--- rrdtool.old/patches/patch-ap	Thu Jan  1 03:00:00 1970
+++ rrdtool/patches/patch-ap	Mon Mar  6 19:43:11 2000
@@ -0,0 +1,143 @@
+--- src/rrd_graph.c	Sun Feb  6 23:19:21 2000
++++ src/rrd_graph.c	Mon Mar  6 17:13:16 2000
+@@ -35,6 +35,7 @@
+             OP_SUB,OP_MUL,
+ 	    OP_DIV,OP_SIN, OP_DUP, OP_EXC, OP_POP,
+ 	    OP_COS,OP_LOG,OP_EXP,OP_LT,OP_LE,OP_GT,OP_GE,OP_EQ,OP_IF,
++	    OP_MIN,OP_MAX,OP_LIMIT,
+ 	    OP_UN,OP_END};
+ 
+ enum if_en {IF_GIF=0,IF_PNG=1};
+@@ -769,6 +770,9 @@
+ 	match_op(OP_GE,GE)
+ 	match_op(OP_EQ,EQ)
+ 	match_op(OP_IF,IF)
++	match_op(OP_MIN,MIN)
++	match_op(OP_MAX,MAX)
++	match_op(OP_LIMIT,LIMIT)
+ 	  /* order is important here ! .. match longest first */
+ 	match_op(OP_UNKN,UNKN)
+ 	match_op(OP_UN,UN)
+@@ -1057,7 +1061,12 @@
+ 			free(stack);
+ 			return -1;
+ 		    }
+-		    stack[stptr-1] = stack[stptr-1] < stack[stptr] ? 1.0 : 0.0;
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else
++			    stack[stptr-1] = stack[stptr-1] < stack[stptr] ? 1.0 : 0.0;
+ 		    stptr--;
+ 		    break;
+ 		case OP_LE:
+@@ -1066,7 +1075,12 @@
+ 			free(stack);
+ 			return -1;
+ 		    }
+-		    stack[stptr-1] = stack[stptr-1] <= stack[stptr] ? 1.0 : 0.0;
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else
++		        stack[stptr-1] = stack[stptr-1] <= stack[stptr] ? 1.0 : 0.0;
+ 		    stptr--;
+ 		    break;
+ 		case OP_GT:
+@@ -1075,7 +1089,12 @@
+ 			free(stack);
+ 			return -1;
+ 		    }
+-		    stack[stptr-1] = stack[stptr-1] > stack[stptr] ? 1.0 : 0.0;
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else
++		        stack[stptr-1] = stack[stptr-1] > stack[stptr] ? 1.0 : 0.0;
+ 		    stptr--;
+ 		    break;
+ 		case OP_GE:
+@@ -1084,7 +1103,12 @@
+ 			free(stack);
+ 			return -1;
+ 		    }
+-		    stack[stptr-1] = stack[stptr-1] >= stack[stptr] ? 1.0 : 0.0;
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else
++		        stack[stptr-1] = stack[stptr-1] >= stack[stptr] ? 1.0 : 0.0;
+ 		    stptr--;
+ 		    break;
+ 		case OP_EQ:
+@@ -1093,7 +1117,12 @@
+ 			free(stack);
+ 			return -1;
+ 		    }
+-		    stack[stptr-1] = stack[stptr-1] == stack[stptr] ? 1.0 : 0.0;
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else
++		        stack[stptr-1] = stack[stptr-1] == stack[stptr] ? 1.0 : 0.0;
+ 		    stptr--;
+ 		    break;
+ 		case OP_IF:
+@@ -1105,6 +1134,52 @@
+ 		    stack[stptr-2] = stack[stptr-2] != 0.0 ? stack[stptr-1] : stack[stptr];
+ 		    stptr--;
+ 		    stptr--;
++		    break;
++		case OP_MIN:
++		    if(stptr<1){
++			rrd_set_error("RPN stack underflow");
++			free(stack);
++			return -1;
++		    }
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else if (stack[stptr-1] > stack[stptr])
++		        stack[stptr-1] = stack[stptr];
++		    stptr--;
++		    break;
++		case OP_MAX:
++		    if(stptr<1){
++			rrd_set_error("RPN stack underflow");
++			free(stack);
++			return -1;
++		    }
++		    if (isnan(stack[stptr-1])) 
++			;
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-1] = stack[stptr];
++		    else if (stack[stptr-1] < stack[stptr])
++		        stack[stptr-1] = stack[stptr];
++		    stptr--;
++		    break;
++		case OP_LIMIT:
++		    if(stptr<2){
++			rrd_set_error("RPN stack underflow");
++			free(stack);
++			return -1;
++		    }
++		    if (isnan(stack[stptr-2])) 
++			;
++		    else if (isnan(stack[stptr-1]))
++		        stack[stptr-2] = stack[stptr-1];
++		    else if (isnan(stack[stptr]))
++		        stack[stptr-2] = stack[stptr];
++		    else if (stack[stptr-2] < stack[stptr-1])
++		        stack[stptr-2] = DNAN;
++		    else if (stack[stptr-2] > stack[stptr])
++		        stack[stptr-2] = DNAN;
++		    stptr-=2;
+ 		    break;
+ 		case OP_UN:
+ 		    if(stptr<0){

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003061648.TAA78509>