]> granicus.if.org Git - icinga2/commitdiff
Check for end iterator before using iterator
authorGreg Hewgill <greg@hewgill.com>
Wed, 28 Sep 2016 00:32:08 +0000 (13:32 +1300)
committerGreg Hewgill <greg@hewgill.com>
Wed, 28 Sep 2016 00:35:57 +0000 (13:35 +1300)
If it == end, then sequence_length(it) will be called which will attempt to dereference the it iterator. This is normally harmless, because the get_sequence_x() functions each check to see whether it == end. However, some runtime libraries (MSVC CRT debug build in particular) check the validity of every iterator dereference, and a runtime check will be triggered inside sequence_length() if it is at the end.

source/utf8/core.h

index 693d388c078de9870d2f19be75d4e7483c393e77..ae0f367dbb9455d3c19e50885b2fe3d72a7bd544 100644 (file)
@@ -222,6 +222,9 @@ namespace internal
     template <typename octet_iterator>
     utf_error validate_next(octet_iterator& it, octet_iterator end, uint32_t& code_point)
     {
+       if (it == end)
+            return NOT_ENOUGH_ROOM;
+
         // Save the original value of it so we can go back in case of failure
         // Of course, it does not make much sense with i.e. stream iterators
         octet_iterator original_it = it;