View | Details | Raw Unified | Return to bug 202099
Collapse All | Expand All

(-)net-snmp/Makefile (-1 / +1 lines)
Lines 3-9 Link Here
3
3
4
PORTNAME=	snmp
4
PORTNAME=	snmp
5
PORTVERSION=	5.7.3
5
PORTVERSION=	5.7.3
6
PORTREVISION=	7
6
PORTREVISION=	8
7
CATEGORIES=	net-mgmt ipv6
7
CATEGORIES=	net-mgmt ipv6
8
MASTER_SITES=	SF/net-${PORTNAME}/net-${PORTNAME}/${PORTVERSION}
8
MASTER_SITES=	SF/net-${PORTNAME}/net-${PORTNAME}/${PORTVERSION}
9
PKGNAMEPREFIX=	net-
9
PKGNAMEPREFIX=	net-
(-)net-snmp/files/patch-snmp_api.c (+117 lines)
Line 0 Link Here
1
--- snmplib/snmp_api.c.orig	2015-08-05 13:06:13.000000000 +0500
2
+++ snmplib/snmp_api.c	2015-08-05 13:14:05.000000000 +0500
3
@@ -4350,10 +4350,9 @@
4
     u_char          type;
5
     u_char          msg_type;
6
     u_char         *var_val;
7
-    int             badtype = 0;
8
     size_t          len;
9
     size_t          four;
10
-    netsnmp_variable_list *vp = NULL;
11
+    netsnmp_variable_list *vp = NULL, *vplast = NULL;
12
     oid             objid[MAX_OID_LEN];
13
     u_char         *p;
14
 
15
@@ -4493,38 +4492,24 @@
16
                               (ASN_SEQUENCE | ASN_CONSTRUCTOR),
17
                               "varbinds");
18
     if (data == NULL)
19
-        return -1;
20
+        goto fail;
21
 
22
     /*
23
      * get each varBind sequence 
24
      */
25
     while ((int) *length > 0) {
26
-        netsnmp_variable_list *vptemp;
27
-        vptemp = (netsnmp_variable_list *) malloc(sizeof(*vptemp));
28
-        if (NULL == vptemp) {
29
-            return -1;
30
-        }
31
-        if (NULL == vp) {
32
-            pdu->variables = vptemp;
33
-        } else {
34
-            vp->next_variable = vptemp;
35
-        }
36
-        vp = vptemp;
37
+	vp = SNMP_MALLOC_TYPEDEF(netsnmp_variable_list);
38
+	if (NULL == vp)
39
+	    goto fail;
40
 
41
-        vp->next_variable = NULL;
42
-        vp->val.string = NULL;
43
         vp->name_length = MAX_OID_LEN;
44
-        vp->name = NULL;
45
-        vp->index = 0;
46
-        vp->data = NULL;
47
-        vp->dataFreeHook = NULL;
48
         DEBUGDUMPSECTION("recv", "VarBind");
49
         data = snmp_parse_var_op(data, objid, &vp->name_length, &vp->type,
50
                                  &vp->val_len, &var_val, length);
51
         if (data == NULL)
52
-            return -1;
53
+            goto fail;
54
         if (snmp_set_var_objid(vp, objid, vp->name_length))
55
-            return -1;
56
+            goto fail;
57
 
58
         len = MAX_PACKET_LENGTH;
59
         DEBUGDUMPHEADER("recv", "Value");
60
@@ -4604,7 +4589,7 @@
61
                 vp->val.string = (u_char *) malloc(vp->val_len);
62
             }
63
             if (vp->val.string == NULL) {
64
-                return -1;
65
+                goto fail;
66
             }
67
             p = asn_parse_string(var_val, &len, &vp->type, vp->val.string,
68
                              &vp->val_len);
69
@@ -4619,7 +4604,7 @@
70
             vp->val_len *= sizeof(oid);
71
             vp->val.objid = (oid *) malloc(vp->val_len);
72
             if (vp->val.objid == NULL) {
73
-                return -1;
74
+                goto fail;
75
             }
76
             memmove(vp->val.objid, objid, vp->val_len);
77
             break;
78
@@ -4631,7 +4616,7 @@
79
         case ASN_BIT_STR:
80
             vp->val.bitstring = (u_char *) malloc(vp->val_len);
81
             if (vp->val.bitstring == NULL) {
82
-                return -1;
83
+                goto fail;
84
             }
85
             p = asn_parse_bitstring(var_val, &len, &vp->type,
86
                                 vp->val.bitstring, &vp->val_len);
87
@@ -4640,12 +4625,28 @@
88
             break;
89
         default:
90
             snmp_log(LOG_ERR, "bad type returned (%x)\n", vp->type);
91
-            badtype = -1;
92
+            goto fail;
93
             break;
94
         }
95
         DEBUGINDENTADD(-4);
96
+
97
+	if (NULL == vplast) {
98
+	    pdu->variables = vp;
99
+	} else {
100
+	    vplast->next_variable = vp;
101
+	}
102
+	vplast = vp;
103
+	vp = NULL;
104
     }
105
-    return badtype;
106
+    return 0;
107
+
108
+  fail:
109
+    DEBUGMSGTL(("recv", "error while parsing VarBindList\n"));
110
+    /** if we were parsing a var, remove it from the pdu and free it */
111
+    if (vp)
112
+	snmp_free_var(vp);
113
+
114
+     return -1;
115
 }
116
 
117
 /*

Return to bug 202099