Fixes from clang / scan-build
[freeradius.git] / src / lib / radius.c
index 62751df..439feec 100644 (file)
@@ -233,7 +233,7 @@ static int rad_sendto(int sockfd, void *data, size_t data_len, int flags,
         *      And if they don't specify a source IP address, don't
         *      use udpfromto.
         */
-       if ((dst_ipaddr->af == AF_INET) ||
+       if ((dst_ipaddr->af == AF_INET) &&
            (src_ipaddr->af != AF_UNSPEC)) {
                return sendfromto(sockfd, data, data_len, flags,
                                  (struct sockaddr *)&src, sizeof_src,
@@ -936,7 +936,6 @@ static int rad_vp2extended(const RADIUS_PACKET *packet,
 
        if (vp->flags.extended) {
                ptr[2] = (attribute & 0xff00) >> 8;
-               len++;
 
        } else if (vp->flags.extended_flags) {
                if (room < 4) return 0;
@@ -944,8 +943,6 @@ static int rad_vp2extended(const RADIUS_PACKET *packet,
                ptr[1] = 4;
                ptr[2] = (attribute & 0xff00) >> 8;
                ptr[3] = 0;
-
-               len += 2;
        }
 
        /*
@@ -1101,7 +1098,7 @@ static int rad_encode_wimax(const RADIUS_PACKET *packet,
 {
        int len, redo;
        uint32_t lvalue;
-       uint8_t *ptr = start, *vsa = start;
+       uint8_t *ptr, *vsa;
        uint32_t maxattr;
        VALUE_PAIR *vp = reply;
 
@@ -2881,8 +2878,11 @@ VALUE_PAIR *rad_attr2vp(const RADIUS_PACKET *packet,
                DICT_ATTR *da;
 
                da = dict_attrbyvalue(attribute, VENDORPEC_EXTENDED);
-               if (da && (da->flags.extended || da->flags.extended_flags)) {
+               if (da) {       /* flags.extended MUST be set */
 
+                       /*
+                        *      MUST have at least an "extended type" octet.
+                        */
                        if (length == 0) return NULL;
 
                        attribute |= (data[0] << fr_wimax_shift[1]);
@@ -2917,6 +2917,11 @@ VALUE_PAIR *rad_attr2vp(const RADIUS_PACKET *packet,
                                              attribute, length, data);
                        }
                }
+
+               /*
+                *      We could avoid another dictionary lookup here
+                *      by using pairalloc(da), but it's not serious...
+                */
        }
        vp = paircreate(attribute, vendor, PW_TYPE_OCTETS);
        if (!vp) return NULL;
@@ -3697,7 +3702,7 @@ void fr_rand_seed(const void *data, size_t size)
                        size_t total;
                        ssize_t this;
 
-                       total = this = 0;
+                       total = 0;
                        while (total < sizeof(fr_rand_pool.randrsl)) {
                                this = read(fd, fr_rand_pool.randrsl,
                                            sizeof(fr_rand_pool.randrsl) - total);