On Fri, Dec 18, 2009 at 03:26:14PM +0300, Alexander Sabourenkov wrote: > Dumping string-type data would spew contents of uninitialized memory > because ber_get_string does no effort to zero-terminate its result.
Please submit diffs that apply to -current. I admit ignorance of SNMP internals but by inspecting the code I am not convinced this is the right fix. Before working around missing NUL terminator it must become clear why is it missing in the first place. Look at buf_read_element. The BER_TYPE_OCTETSTRING is always NUL-terminated. Why is the terminator missing few lines later? Then look at mps_setstr. It strdups BER_TYPE_OCTETSTRING. If NUL was always missing, then use of strdup would be incorrect. Is it? Jacek > Index: snmpe.c > =================================================================== > RCS file: /cvs/src/usr.sbin/snmpd/snmpe.c,v > retrieving revision 1.25 > diff -u snmpe.c > --- snmpe.c 16 Dec 2009 22:17:53 -0000 1.25 > +++ snmpe.c 18 Dec 2009 12:15:24 -0000 > @@ -433,9 +433,11 @@ > root->be_type == SNMP_T_IPADDR) { > fprintf(stderr, "addr %s\n", > inet_ntoa(*(struct in_addr *)buf)); > - } else > - fprintf(stderr, "string \"%s\"\n", > - root->be_len ? buf : ""); > + } else { > + fwrite("string \"", 8, 1, stderr); > + fwrite(buf, root->be_len, 1, stderr); > + fwrite("\"\n", 2, 1, stderr); > + } > break; > case BER_TYPE_NULL: /* no payload */ > case BER_TYPE_EOC: > > -- > > ./lxnt