From: Tomek Mrugalski Date: Tue, 7 Oct 2014 14:17:42 +0000 (+0200) Subject: [3546] (hopefully) last changes after review: X-Git-Tag: trac3489_base~2^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e92e97f7b64558bb2eb81338e120c078f59cc23;p=thirdparty%2Fkea.git [3546] (hopefully) last changes after review: - clarified that returned offset refers to last successfully parsed option - unpackOptions6() now returns proper offset if vendor-option is truncated --- diff --git a/src/lib/dhcp/libdhcp++.cc b/src/lib/dhcp/libdhcp++.cc index 9b100a9c39..93961b9b9f 100644 --- a/src/lib/dhcp/libdhcp++.cc +++ b/src/lib/dhcp/libdhcp++.cc @@ -260,8 +260,9 @@ size_t LibDHCP::unpackOptions6(const OptionBuffer& buf, if (opt_type == D6O_VENDOR_OPTS) { if (offset + 4 > length) { // Truncated vendor-option. There is expected at least 4 bytes - // long enterprise-id field - return (offset); + // long enterprise-id field. Let's roll back option code + option + // length (4 bytes) and return. + return (offset - 4); } // Parse this as vendor option diff --git a/src/lib/dhcp/libdhcp++.h b/src/lib/dhcp/libdhcp++.h index 230ba9480c..642d2ab6d2 100644 --- a/src/lib/dhcp/libdhcp++.h +++ b/src/lib/dhcp/libdhcp++.h @@ -123,6 +123,7 @@ public: /// of to be used to parse options in the packets. /// @param options Reference to option container. Options will be /// put here. + /// @return offset to the first byte after the last successfully parsed option static size_t unpackOptions4(const OptionBuffer& buf, const std::string& option_space, isc::dhcp::OptionCollection& options); @@ -147,7 +148,7 @@ public: /// offset to beginning of relay_msg option will be stored in it. /// @param relay_msg_len reference to a size_t structure. If specified, /// length of the relay_msg option will be stored in it. - /// @return offset to the first byte after last parsed option + /// @return offset to the first byte after the last successfully parsed option static size_t unpackOptions6(const OptionBuffer& buf, const std::string& option_space, isc::dhcp::OptionCollection& options, @@ -192,6 +193,7 @@ public: /// @param buf Buffer to be parsed. /// @param options Reference to option container. Options will be /// put here. + /// @return offset to the first byte after the last successfully parsed option static size_t unpackVendorOptions6(const uint32_t vendor_id, const OptionBuffer& buf, isc::dhcp::OptionCollection& options); @@ -206,6 +208,7 @@ public: /// @param buf Buffer to be parsed. /// @param options Reference to option container. Options will be /// put here. + /// @return offset to the first byte after the last successfully parsed option static size_t unpackVendorOptions4(const uint32_t vendor_id, const OptionBuffer& buf, isc::dhcp::OptionCollection& options);