ports/108693: Maintainer update of irrtoolset port to eliminate segfaults
Kevin Oberman
oberman at es.net
Fri Feb 2 17:20:15 UTC 2007
>Number: 108693
>Category: ports
>Synopsis: Maintainer update of irrtoolset port to eliminate segfaults
>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: Fri Feb 02 17:20:14 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator: Kevin Oberman
>Release: FreeBSD 6.2-STABLE i386
>Organization:
ESnet-The Energy Sciences Network
>Environment:
System: FreeBSD ptavv.es.net 6.2-STABLE FreeBSD 6.2-STABLE #6: Mon Jan 22 13:25:14 PST 2007 root at ptavv.es.net:/usr/obj/usr/src/sys/PTAVV i386
>Description:
There is a bug in the current release that will cause frequent
segmentation faults on many operations.
>How-To-Repeat:
Run peval repeatedly on a V6 system and it will eventually crash.
>Fix:
Add the following file as files/patch-src-irr-rawhoisc.cc and bump
PORTREVISION (to 1).
--- src/irr/rawhoisc.cc.orig Thu Jun 8 08:16:26 2006
+++ src/irr/rawhoisc.cc Tue Jan 23 15:14:24 2007
@@ -1,4 +1,4 @@
-// $Id: rawhoisc.cc,v 4.11 2006/06/08 15:16:26 shane Exp $
+// $Id: rawhoisc.cc,v 4.11.10.1 2006/12/08 08:33:52 shane Exp $
// Copyright (c) 2001,2002 RIPE NCC
//
// All Rights Reserved
@@ -187,7 +187,7 @@
}
void RAWhoisClient::GetVersion() {
- char *buffer = (char *) calloc (80,1);
+ char *buffer;
char *start;
if (! _is_open)
@@ -199,7 +199,7 @@
start = start + 8; //jump
version = atoi(start)*10 + atoi(start+2); // x.x... format
Trace(TR_WHOIS_RESPONSE) << "Whois: Response " << buffer << endl;
- free(buffer);
+ delete [] buffer;
}
void RAWhoisClient::SetSources(const char *_sources) {
@@ -298,9 +298,11 @@
return 0;
}
if (is_rpslng()) {
- response = strdup("");
- char *prev;
+ response = new char[1];
+ response[0] = '\0';
+ char *prev = NULL;
do {
+ free(prev);
prev = strdup(buffer);
Trace(TR_WHOIS_RESPONSE) << "Whois: Response <<\n" << buffer <<">>"<< endl;
if (strstr (buffer, "route") || strstr(buffer, "route6")) {
@@ -315,18 +317,20 @@
// save response
tmp = strdup (response);
// allocate new string
+ delete [] response;
response = new char [strlen(tmp) + strlen(end_prefix) + 2];
- memset(response, 0, strlen(response));
// copy old and new response
- strncat (response, tmp, strlen(tmp));
- strncat (response, " ", 1);
- strncat (response, end_prefix, strlen(end_prefix));
+ strcpy(response, tmp);
+ strcat(response, " ");
+ strcat(response, end_prefix);
free(tmp);
}
} while (fgets(buffer, sizeof(buffer), in) &&
// this condition should work with irrd version >= 2.2b19
// until then, ripe-style queries won't work with persistent connections
!((*prev == '\n') && (*buffer == '\n')));
+
+ free(prev);
// The WHOIS protocol and RPSL give no indication of
// end of a protocol data unit, so we need to keep
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list