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>