<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 2013/12/19 22:59, Alan Bateman
      wrote:<br>
    </div>
    <blockquote cite="mid:52B309C1.2030804@oracle.com" type="cite">On
      19/12/2013 08:01, Eric Wang wrote:
      <br>
      <blockquote type="cite">Hi Everyone,
        <br>
        <br>
        I'm working on the bug
        <a class="moz-txt-link-freetext" href="https://bugs.openjdk.java.net/browse/JDK-8030690">https://bugs.openjdk.java.net/browse/JDK-8030690</a>.
        <br>
        The test failed due to there's a logic fault in
        randomizeRange(), if cb.capacity() returns 1 then mid =
        cb.capacity() &gt;&gt;&gt; 1 which is 0. it causes
        Random.nextInt(0) throws the IllegalArgumentException.
        <br>
        <br>
        So the suggested fix is to update the randomizeRange() like
        below.
        <br>
        <br>
            static CharBuffer randomizeRange(CharBuffer cb) {
        <br>
                int mid = cb.capacity() &gt;&gt;&gt; 1;
        <br>
                int start = RAND.nextInt(mid + 1); // from 0 to mid
        <br>
                int end = mid + RAND.nextInt(cb.capacity() - mid + 1);
        // from mid to capacity.
        <br>
                cb.position(start);
        <br>
                cb.limit(end);
        <br>
                return cb;
        <br>
            }
        <br>
        <br>
        Please let me know if you have any comment. The webrev will be
        sent soon.
        <br>
      </blockquote>
      The change looks okay in that the method will handle the case that
      the capacity is 1. So it a slice that has a capacity of 1?
      <br>
      <br>
      -Alan.
      <br>
    </blockquote>
    Hi Alan,<br>
    <br>
    Please review the webrev <a
      href="http://cr.openjdk.java.net/%7Eewang/JDK-8030690/webrev.00/">http://cr.openjdk.java.net/~ewang/JDK-8030690/webrev.00/</a>,
    if it looks OK, could you help to be the sponsor to check in?<br>
    Here is explanation <span style="color: rgb(67, 67, 67);
      font-family: Tahoma, Arial; font-size: 12px; font-style: normal;
      font-variant: normal; font-weight: bold; letter-spacing: normal;
      line-height: 19.1875px; orphans: auto; text-align: left;
      text-indent: 0px; text-transform: none; white-space: normal;
      widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(242, 242, 242); display: inline !important;
      float: none;"><span class="Apple-converted-space"></span></span>why
    a slice has 1 capacity: <br>
    <br>
    In the addCase(...) method, it calls randomize(sb) which calls
    randomizeRange(sb), it may set a CharBuffer position equals to limit
    - 1, so the next call of sb.slice() returns a CharBuffer which
    capacity is 1.<br>
    <br>
    Thanks,<br>
    Eric<br>
    <br>
  </body>
</html>