summaryrefslogtreecommitdiff
path: root/net-mgmt/net-snmp-devel/files/patch-asn1.c
diff options
context:
space:
mode:
authorJun Kuriyama <kuriyama@FreeBSD.org>2005-03-22 08:32:48 +0000
committerJun Kuriyama <kuriyama@FreeBSD.org>2005-03-22 08:32:48 +0000
commita3597c82c28ab7d9aaf7926adb75b1f7490b932f (patch)
tree033be3002384478c54207ecb0e6a3f7c73d9d3ad /net-mgmt/net-snmp-devel/files/patch-asn1.c
parent- Fix build on RELENG_5 after math.h MFC (diff)
(1) Fix memory leak by connections from <UNKNOWN>.
(2) Take care of large counters on 64bit platforms. PR: ports/78807 (1) Submitted by: Andriy Gapon <avg@icyb.net.ua> (1), Peter Losher <Peter_Losher@isc.org> (2) Approved by: portmgr (marcus)
Notes
Notes: svn path=/head/; revision=131884
Diffstat (limited to 'net-mgmt/net-snmp-devel/files/patch-asn1.c')
-rw-r--r--net-mgmt/net-snmp-devel/files/patch-asn1.c50
1 files changed, 48 insertions, 2 deletions
diff --git a/net-mgmt/net-snmp-devel/files/patch-asn1.c b/net-mgmt/net-snmp-devel/files/patch-asn1.c
index 477a909b07b9..8dc5fe0108d6 100644
--- a/net-mgmt/net-snmp-devel/files/patch-asn1.c
+++ b/net-mgmt/net-snmp-devel/files/patch-asn1.c
@@ -1,5 +1,5 @@
---- snmplib/asn1.c.orig Tue Jan 25 10:09:35 2005
-+++ snmplib/asn1.c Tue Jan 25 10:09:55 2005
+--- snmplib/asn1.c.orig.2 Sat Dec 11 00:07:16 2004
++++ snmplib/asn1.c Thu Feb 24 23:42:30 2005
@@ -181,6 +181,9 @@
#include <in.h>
#endif
@@ -10,3 +10,49 @@
#if HAVE_DMALLOC_H
#include <dmalloc.h>
#endif
+@@ -584,6 +587,11 @@
+ return NULL;
+ }
+ integer = *intp;
++ if (intsize > 4) {
++ register u_long signmask = ((u_long)1 << ((8 * sizeof(long)) - 1));
++ register u_long signbit = ((integer & signmask) != 0);
++ integer &= (signbit << 31) | 0x7fffffff;
++ }
+ /*
+ * Truncate "unnecessary" bytes off of the most significant end of this
+ * 2's complement integer. There should be no sequence of 9
+@@ -663,6 +671,9 @@
+ return NULL;
+ }
+ integer = *intp;
++ if (intsize > 4) {
++ integer &= 0xffffffff;
++ }
+ mask = ((u_long) 0xFF) << (8 * (sizeof(long) - 1));
+ /*
+ * mask is 0xFF000000 on a big-endian machine
+@@ -2674,6 +2685,12 @@
+ return 0;
+ }
+
++ if (intsize > 4) {
++ register u_long signmask = ((u_long)1 << ((8 * sizeof(long)) - 1));
++ register u_long signbit = ((integer & signmask) != 0);
++ integer &= (signbit << 31) | 0x7fffffff;
++ }
++
+ if (((*pkt_len - *offset) < 1) && !(r && asn_realloc(pkt, pkt_len))) {
+ return 0;
+ }
+@@ -2823,6 +2840,10 @@
+ if (intsize != sizeof(unsigned long)) {
+ _asn_size_err(errpre, intsize, sizeof(unsigned long));
+ return 0;
++ }
++
++ if (intsize > 4) {
++ integer &= 0xffffffff;
+ }
+
+ if (((*pkt_len - *offset) < 1) && !(r && asn_realloc(pkt, pkt_len))) {