BIND 10 #838: "string iterator is not dereferencable" issue

BIND 10 Development do-not-reply at isc.org
Fri May 6 06:36:50 UTC 2011


#838: "string iterator is not dereferencable" issue
-------------------------------------+-------------------------------------
                   Reporter:         |                 Owner:  jinmei
  fdupont                            |                Status:  reviewing
                       Type:         |             Milestone:
  defect                             |  Sprint-20110517
                   Priority:  major  |            Resolution:
                  Component:         |             Sensitive:  0
  Unclassified                       |           Sub-Project:  DNS
                   Keywords:         |  Estimated Difficulty:  0.0
            Defect Severity:  N/A    |           Total Hours:  0
Feature Depending on Ticket:         |
        Add Hours to Ticket:  0      |
                  Internal?:  0      |
-------------------------------------+-------------------------------------

Comment (by jinmei):

 Replying to [comment:15 ocean]:

 > > In any case, lacking the environment, it's not very clear to me what
 > > is exactly wrong with the original implementation (calling operator*
 > > at the end() of the data is wrong of course, but I don't understand
 > > how that situation happened).  Please explain more details about the
 > > problem.
 > >
 > > Thanks,
 >
 > This is triggered by the following sequence.
 [snip]

 Okay, thanks.  I now think I fully understand the problem.

 I also successfully reproduced the same (I believe) problem on our
 Solaris buildbox machine with the STLPort debug mode.

 Now, comments about the fix:

 It seems to be the correct fix to throw an exception in
 DecodeNormalizer::operator*().  But we can then make another cleanup:
 we now don't need to check whether *base_ is BASE_PADDING_CHAR.  It
 was an (incorrect) attempt to avoid the situation that the base_ ==
 base_end_ check now does.

 Also,

 > 1. Given input string of " " which is a one char string with 0x20 (the
 space) character.

 with your fix, the input of " " will result in the exception, which is
 not correct.  It should be handled just like "".  On looking at it
 closely, I noticed the previous code doesn't handle the case where the
 input begins with a space (this is a different problem than the
 iterator bug itself).

 Finally, regarding the conversion of char to signed int for isspace():
 I don't think checking it with >0 is the cleanest fix.  Even though I
 generally want to avoid relying on casts, it seems to be one of the
 (rare) cases where a cast makes most sense (and in this case the case
 should be safe).

 I've just committed my counter proposal based on the above comments
 and pushed it.  I also made a couple of unrelated (but STL-related)
 bugs in the test code.  Please check it (it's just a "proposal" and
 I've pushed it so that we can easily share it.)  Also, please consider
 adding more tests to base64 and hex tests that highlight the problem
 as I did it for base32hex.

 Oh, and really finally, a higher level point.  Wheter or not we create
 a separate ticket, I believe we should fix the problems Francis
 reported for Windows.  I agree with Francis on this point; it's not an
 issue specific for Windows, but real bugs that just happen to be
 revealed more clearly in a Windows environment (in fact, we can
 reproduce some of the problems on Solaris + STLPort).  Priority is
 another issue, and on that point the fact we are not seriously
 thinking Windows support can matter.

-- 
Ticket URL: <http://bind10.isc.org/ticket/838#comment:16>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development


More information about the bind10-tickets mailing list