X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fatalkd%2Fnbp.c;h=45f5ef0698e5f7f1bd1b846633ed16b9512492ed;hb=a29969cf6b790d8cf2031a8a49324ef576abd35d;hp=ea662599a8bde63a8cea827f932e4d7c6b44545c;hpb=247d58a92f5e5ab9c7de0ecb194dc6923bdf25cd;p=netatalk.git diff --git a/etc/atalkd/nbp.c b/etc/atalkd/nbp.c index ea662599..45f5ef06 100644 --- a/etc/atalkd/nbp.c +++ b/etc/atalkd/nbp.c @@ -1,5 +1,5 @@ /* - * $Id: nbp.c,v 1.5.2.1 2001-12-31 20:05:20 srittau Exp $ + * $Id: nbp.c,v 1.5.2.2 2002-02-07 23:58:46 srittau Exp $ * * Copyright (c) 1990,1993 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. @@ -85,6 +85,7 @@ int nbp_packet( ap, from, data, len ) struct rtmptab *rtmp; char *end, *nbpop, *zonep, packet[ ATP_BUFSIZ ]; int n, i, cc, locallkup; + u_char tmplen; end = data + len; if ( data >= end ) { @@ -122,30 +123,36 @@ int nbp_packet( ap, from, data, len ) nn.nn_sat.sat_port = nt.nt_port; /* object */ - if ( data >= end || ( *data < 0 || *data > 32 ) || data + *data > end ) { + tmplen = (u_char) *data; + if ( data >= end || tmplen > 32 || data + tmplen > end ) { syslog( LOG_INFO, "nbp_packet: malformed packet" ); return 1; } - nn.nn_objlen = *data++; + nn.nn_objlen = tmplen; + data++; memcpy( nn.nn_obj, data, nn.nn_objlen ); data += nn.nn_objlen; /* type */ - if ( data >= end || ( *data < 0 || *data > 32 ) || data + *data > end ) { + tmplen = (u_char) *data; + if ( data >= end || tmplen > 32 || data + tmplen > end ) { syslog( LOG_INFO, "nbp_packet: malformed packet" ); return 1; } - nn.nn_typelen = *data++; + nn.nn_typelen = tmplen; + data++; memcpy( nn.nn_type, data, nn.nn_typelen ); data += nn.nn_typelen; /* zone */ - if ( data >= end || ( *data < 0 || *data > 32 ) || data + *data > end ) { + tmplen = (u_char) *data; + if ( data >= end || tmplen > 32 || data + tmplen > end ) { syslog( LOG_INFO, "nbp_packet: malformed packet" ); return 1; } zonep = data; /* remember for fwd */ - nn.nn_zonelen = *data++; + nn.nn_zonelen = tmplen; + data++; memcpy( nn.nn_zone, data, nn.nn_zonelen ); data += nn.nn_zonelen;