ports/85839: [maintainer-update] openradius .9.10 - fatal error amd64

Adam Jette jettea46 at yahoo.com
Wed Sep 7 16:40:07 UTC 2005


>Number:         85839
>Category:       ports
>Synopsis:       [maintainer-update] openradius .9.10 - fatal error amd64
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Sep 07 16:40:05 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Adam Jette
>Release:        FreeBSD 4.11-RELEASE i386
>Organization:
>Environment:
System: FreeBSD 


	
>Description:
	I totally blew the last problem report, #85837, sorry. Joerg Wunsch discovered an error in openradius when run in FreeBSD under amd64 that causes it to core dump constantly. He has fixed this error with a patch and I'm submitting it for him until openradius fixes their code.
>How-To-Repeat:
	
>Fix:
B

	

--- openradius.patch begins here ---
diff -ruN openradius.bak/files/patch-ringbuf openradius/files/patch-ringbuf
--- openradius.bak/files/patch-ringbuf	Wed Dec 31 19:00:00 1969
+++ openradius/files/patch-ringbuf	Wed Sep  7 11:31:47 2005
@@ -0,0 +1,62 @@
+--- common/ringbuf.c.orig	Mon Feb 14 16:10:51 2005
++++ common/ringbuf.c	Tue Aug 30 13:55:42 2005
+@@ -355,7 +355,7 @@
+ ssize_t ring_count(RING *r, RINGCNTFUNC func, ...)
+ {
+ 	va_list ap;
+-	ssize_t len, ret;
++	ssize_t len, ret = 0;
+ 
+ 	len = ring_maxget(r);
+ 
+@@ -363,37 +363,41 @@
+ 
+ 		/* There is data available */
+ 
+-		va_start(ap, func);
+-
+ 		if (r->r + len <= r->size) {
+ 
+ 			/* Message ends before end of buffer */
+ 
+ 			/* peek at single part, return whatever the
+ 			   closure returns. */
+-			return func(r->buf + r->r, len, 0, ap);
++			va_start(ap, func);
++			ret = func(r->buf + r->r, len, 0, ap);
++			va_end(ap);
+ 		}
+ 		else {
+ 
+ 			/* Message doesn't end before end of buffer */
+ 
+ 			/* peek at first part, till end of buffer */
++			va_start(ap, func);
+ 			ret = func(r->buf + r->r, r->size - r->r, 0, ap);
++			va_end(ap);
+ 
+ 			if (ret < r->size - r->r) {
+ 				/* Satisfied by first part; return whatever
+ 				   the closure gave us. */
+-				return ret;
+ 			}
+-
+-			/* peek at rest, from start of buffer */
+-			return ret + func(r->buf, len - (r->size - r->r), 
+-					  ret, ap);
++			else {
++				/* peek at rest, from start of buffer */
++				va_start(ap, func);
++				ret += func(r->buf, len - (r->size - r->r), 
++					    ret, ap);
++				va_end(ap);
++			}
+ 		}
+ 	}
+ 
+ 	/* No data available, return 0. */
+-	return 0;
++	return ret;
+ }
+ 
+ 
--- openradius.patch ends here ---


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



More information about the freebsd-ports-bugs mailing list