diff options
author | Michael Brown | 2006-08-11 20:16:34 +0200 |
---|---|---|
committer | Michael Brown | 2006-08-11 20:16:34 +0200 |
commit | db0ff1731f85d2be846e2ed0c8d792a919dd356f (patch) | |
tree | 0722577dc3cdc5db75b6604e5db0c99e30b2271d /src/net/dhcpopts.c | |
parent | Added basic infrastructure for manipulating settings. (diff) | |
download | ipxe-db0ff1731f85d2be846e2ed0c8d792a919dd356f.tar.gz ipxe-db0ff1731f85d2be846e2ed0c8d792a919dd356f.tar.xz ipxe-db0ff1731f85d2be846e2ed0c8d792a919dd356f.zip |
Fail gracefully when set_dhcp_option() is called with options==NULL.
Diffstat (limited to 'src/net/dhcpopts.c')
-rw-r--r-- | src/net/dhcpopts.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/net/dhcpopts.c b/src/net/dhcpopts.c index c906b191..e847c81d 100644 --- a/src/net/dhcpopts.c +++ b/src/net/dhcpopts.c @@ -409,12 +409,16 @@ struct dhcp_option * set_dhcp_option ( struct dhcp_option_block *options, const void *data, size_t len ) { static const uint8_t empty_encapsulator[] = { DHCP_END }; struct dhcp_option *option; - void *insertion_point = options->data; + void *insertion_point; struct dhcp_option *encapsulator = NULL; unsigned int encap_tag = DHCP_ENCAPSULATOR ( tag ); size_t old_len = 0; size_t new_len = ( len ? ( len + DHCP_OPTION_HEADER_LEN ) : 0 ); + /* Return NULL if no options block specified */ + if ( ! options ) + return NULL; + /* Find old instance of this option, if any */ option = find_dhcp_option_with_encap ( options, tag, &encapsulator ); if ( option ) { @@ -428,6 +432,7 @@ struct dhcp_option * set_dhcp_option ( struct dhcp_option_block *options, } /* Ensure that encapsulator exists, if required */ + insertion_point = options->data; if ( DHCP_IS_ENCAP_OPT ( tag ) ) { if ( ! encapsulator ) encapsulator = set_dhcp_option ( options, encap_tag, |