Correctly handle large attributes
authorAlan T. DeKok <aland@freeradius.org>
Tue, 5 Jan 2010 11:52:00 +0000 (12:52 +0100)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 5 Jan 2010 11:54:01 +0000 (12:54 +0100)
src/modules/frs_vmps/vqp.c

index 44c91b4..b28bf69 100644 (file)
@@ -381,7 +381,7 @@ RADIUS_PACKET *vqp_recv(int sockfd)
                                rad_free(&packet);
                                return NULL;
                        }
-                       attrlen = ptr[5];
+                       attrlen = (ptr[4] << 8) | ptr[5];
                        ptr += 6 + attrlen;
                        length -= (6 + attrlen);
                }
@@ -514,8 +514,8 @@ int vqp_decode(RADIUS_PACKET *packet)
                case PW_TYPE_OCTETS:
                case PW_TYPE_STRING:
                        vp->length = (length > MAX_VMPS_LEN) ? MAX_VMPS_LEN : length;
-                       memcpy(vp->vp_octets, ptr, length);
-                       vp->vp_octets[length] = '\0';
+                       memcpy(vp->vp_octets, ptr, vp->length);
+                       vp->vp_octets[vp->length] = '\0';
                        break;
                }
                ptr += length;