summaryrefslogtreecommitdiff
path: root/net/net-snmp/patches/patch-ad
diff options
context:
space:
mode:
Diffstat (limited to 'net/net-snmp/patches/patch-ad')
-rw-r--r--net/net-snmp/patches/patch-ad103
1 files changed, 103 insertions, 0 deletions
diff --git a/net/net-snmp/patches/patch-ad b/net/net-snmp/patches/patch-ad
new file mode 100644
index 00000000000..874ba5dd176
--- /dev/null
+++ b/net/net-snmp/patches/patch-ad
@@ -0,0 +1,103 @@
+$NetBSD: patch-ad,v 1.5 2008/05/18 11:59:54 tron Exp $
+
+--- perl/SNMP/SNMP.xs.orig 2007-06-18 23:28:09.000000000 +0100
++++ perl/SNMP/SNMP.xs 2008-05-18 12:40:27.000000000 +0100
+@@ -470,14 +470,16 @@
+ if (flag == USE_ENUMS) {
+ for(ep = tp->enums; ep; ep = ep->next) {
+ if (ep->value == *var->val.integer) {
+- strcpy(buf, ep->label);
++ strncpy(buf, ep->label, buf_len);
++ buf[buf_len-1] = '\0';
+ len = strlen(buf);
+ break;
+ }
+ }
+ }
+ if (!len) {
+- sprintf(buf,"%ld", *var->val.integer);
++ snprintf(buf, buf_len, "%ld", *var->val.integer);
++ buf[buf_len-1] = '\0';
+ len = strlen(buf);
+ }
+ break;
+@@ -486,21 +488,25 @@
+ case ASN_COUNTER:
+ case ASN_TIMETICKS:
+ case ASN_UINTEGER:
+- sprintf(buf,"%lu", (unsigned long) *var->val.integer);
++ snprintf(buf, buf_len, "%lu", (unsigned long) *var->val.integer);
++ buf[buf_len-1] = '\0';
+ len = strlen(buf);
+ break;
+
+ case ASN_OCTET_STR:
+ case ASN_OPAQUE:
+- memcpy(buf, (char*)var->val.string, var->val_len);
+ len = var->val_len;
++ if ( len > buf_len )
++ len = buf_len;
++ memcpy(buf, (char*)var->val.string, len);
+ break;
+
+ case ASN_IPADDRESS:
+- ip = (u_char*)var->val.string;
+- sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
+- len = strlen(buf);
+- break;
++ ip = (u_char*)var->val.string;
++ snprintf(buf, buf_len, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
++ buf[buf_len-1] = '\0';
++ len = strlen(buf);
++ break;
+
+ case ASN_NULL:
+ break;
+@@ -512,14 +518,14 @@
+ break;
+
+ case SNMP_ENDOFMIBVIEW:
+- sprintf(buf,"%s", "ENDOFMIBVIEW");
+- break;
++ snprintf(buf, buf_len, "%s", "ENDOFMIBVIEW");
++ break;
+ case SNMP_NOSUCHOBJECT:
+- sprintf(buf,"%s", "NOSUCHOBJECT");
+- break;
++ snprintf(buf, buf_len, "%s", "NOSUCHOBJECT");
++ break;
+ case SNMP_NOSUCHINSTANCE:
+- sprintf(buf,"%s", "NOSUCHINSTANCE");
+- break;
++ snprintf(buf, buf_len, "%s", "NOSUCHINSTANCE");
++ break;
+
+ case ASN_COUNTER64:
+ #ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+@@ -538,19 +544,19 @@
+ #endif
+
+ case ASN_BIT_STR:
+- snprint_bitstring(buf, sizeof(buf), var, NULL, NULL, NULL);
++ snprint_bitstring(buf, buf_len, var, NULL, NULL, NULL);
+ len = strlen(buf);
+ break;
+ #ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+ case ASN_OPAQUE_FLOAT:
+- if (var->val.floatVal)
+- sprintf(buf,"%f", *var->val.floatVal);
+- break;
++ if (var->val.floatVal)
++ snprintf(buf, buf_len, "%f", *var->val.floatVal);
++ break;
+
+ case ASN_OPAQUE_DOUBLE:
+- if (var->val.doubleVal)
+- sprintf(buf,"%f", *var->val.doubleVal);
+- break;
++ if (var->val.doubleVal)
++ snprintf(buf, buf_len, "%f", *var->val.doubleVal);
++ break;
+ #endif
+
+ case ASN_NSAP: