From 33111697075e60cec522848c0f04fd397bc9ea8d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 7 Jan 2008 13:50:32 +0000 Subject: [PATCH] When the DHCP file/sname fields are empty, don't allow them to override their equivalent DHCP-option-specified values. --- src/net/udp/dhcp.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index 2fdb943c..b10c3ee7 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -368,11 +368,11 @@ static size_t dhcp_field_len ( const void *data, size_t max_len ) { * @v max_len Field length * @v tag DHCP option tag, or 0 * - * If @c tag is non-zero, the field will be treated as a - * NUL-terminated string representing the value of the specified DHCP - * option. If @c tag is zero, the field will be treated as a block of - * DHCP options, and simply appended to the existing options in the - * option block. + * If @c tag is non-zero (and the field is not empty), the field will + * be treated as a NUL-terminated string representing the value of the + * specified DHCP option. If @c tag is zero, the field will be + * treated as a block of DHCP options, and simply appended to the + * existing options in the option block. * * The caller must ensure that there is enough space in the options * block to perform the merge. @@ -385,7 +385,9 @@ static void merge_dhcp_field ( struct dhcp_option_block *options, struct dhcp_option *end; if ( tag ) { - set_dhcp_option ( options, tag, data, strlen ( data ) ); + len = strlen ( data ); + if ( len ) + set_dhcp_option ( options, tag, data, len ); } else { len = dhcp_field_len ( data, max_len ); dest = ( options->data + options->len - 1 );