Hi, Peter.
I understand your point, but I think it's unreasonable for the
reason that source code compatibility problem, it's really a bug.
User can't understand why the size method return a negative number.
Best, lamber-ken
------------------ ???????? ------------------
??????: "Peter Levart"<peter.lev...@gmail.com>;
????????: 2019??9??5??(??????) ????3:51
??????: "????????"<2217232...@qq.com>;"core-libs-dev"<core-libs-dev@openjdk.java.net>;
????: "David Holmes"<david.hol...@oracle.com>;
????: Re: ?????? ?????? what to do next to fix JDK-8230557. thanks
Hi ????????,
As David has pointed out, your proposed fix would break binary and
source compatibility of BitSet.size() method, so it is not acceptable.
BitSet API allows addressing individual bits using non-negative 'int'
typed indexes (analogous to indexes of Java arrays). The range of
indexes is: 0 ... 2^31 - 1 (0 ... Integer.MAX_VALUE). The maximum
"size"
of BitSet is therefore 2^31. Unfortunately, this value can't be
"corectly" represented with signed 32 bit integer (int). Only in this
corner case, - 2^31 (Integer.MIN_VALUE) is the interpreted value
returned from size(). If one would interpret it as unsigned 32 bit
integer value, it is entirely correct. For example, this holds:
Integer.toUnsignedLong(new BitSet(Integer.MAX_VALUE).size()) == 1L
<< 31
It is also always true what javadoc says about size(): "The maximum
element in the set is the size - 1st element"
The following holds also for this corner case:
new BitSet(Integer.MAX_VALUE).size() - 1 == Integer.MAX_VALUE;
So perhaps, the fix could be just to describe this corner case in the
spec. And perhaps, to support the following use case in the corner
case:
BitSet set1 = ...
...
BitSet set2 = new BitSet(set1.size());
... by modifying the BitSet constructor to accept the Integer.MIN_VALUE
in addition to all the non-negative values as the 'nbits' parameter.
What do you think?
Regards, Peter
On 9/5/19 8:31 AM, David Holmes wrote:
> Hi,
>
> On 5/09/2019 4:11 pm, ???????? wrote:
>>
>> Thanks very much.
>>
>> *BUG-LINK:* https://bugs.openjdk.java.net/browse/JDK-8230557
>>
>> *Describe: *
>> the return type of the method BitSet#size is int, so the
method may
>> return a negative value in some case, for example, will return
>> -2147483648.
>> ```
>> BitSet bitSet = new BitSet(Integer.MAX_VALUE);
>> for (int i = 0; i < Integer.MAX_VALUE - 1000; i++) {
>> bitSet.set(i);
>> }
>> System.out.println(bitSet.size());
>> ```
>> EXPECTED: 2147483648, but ACTUAL: -2147483648.
>>
>> *FIX*
>> I have put the patch in the attachment of the mail.
>
> In case the attachment got stripped form the mailing list the
proposed
> fix is:
>
> - public int size() {
> - return words.length
* BITS_PER_WORD;
> + public long size() {
> + return (long)
words.length * BITS_PER_WORD;
>
> Unfortunately this simple fix it not possible. You can't just
change
> the return type of the method to long as that is a
source-incompatible
> change and would not be approved [1]. Instead the return value
should
> be capped at Integer.MAX_VALUE - but I'll leave that for
someone from
> core-libs team to pick up. Also look at the evaluation in:
>
> https://bugs.openjdk.java.net/browse/JDK-4213570
>
> Cheers,
> David
>
> [1] https://wiki.openjdk.java.net/display/csr/CSR+FAQs
>
>
>
>>
>> ------------------ ???????? ------------------
>> *??????:* "David Holmes"<david.hol...@oracle.com>;
>> *????????:* 2019??9??5??(??????) ????2:00
>>
*??????:* "????????"<2217232...@qq.com>;"core-libs-dev"<core-libs-
>> d...@openjdk.java.net>;
>> *????:* Re: ?????? what to do next to fix JDK-8230557.
thanks
>>
>> On 5/09/2019 3:46 pm, ???????? wrote:
>> >
>> > hi, developers.
>> >
>> > Can someone help me? thanks very much !!
>>
>> Help you how exactly. As I stated your are up to step 2 of
the how to
>> contribute process. If you have a suggested fix for the bug
then put
>> that in an email as described.
>>
>> Thanks,
>> David
>>
>> >
>> >
------------------ ???????? ------------------
>> > *??????:* "David
Holmes"<david.hol...@oracle.com>;
>> > *????????:* 2019??9??5??(??????) ????1:44
>> >
*??????:* "????????"<2217232...@qq.com>;"core-libs-dev"<core-libs-
>> > d...@openjdk.java.net>;
>> > *????:* Re: what to do next to fix
JDK-8230557. thanks
>> >
>> > On 5/09/2019 3:35 pm, ???????? wrote:
>> > > Hi, leaders.
>> >
>> > Hi,
>> >
>> > No "leaders" here only developers :)
>> >
>> > >
>> > > A few days ago, I report a bug in
core lib[1]. According to the
>> > contribute document[2], I had send oca to oracle
and&nbsp;my name has
>> > been listed on&nbsp;oca[3].
>> >
>> > Welcome aboard!
>> >
>> > > But I still can't push my changes to
jdk, can someone tell me
>> how to
>> > do next? thanks very match!!
>> >
>> > You can't push anything until you become a
Committer and before
>> that you
>> > have to become an Author. The steps for
contributing are outlined
>> here:
>> >
>> > http://openjdk.java.net/contribute/
>> >
>> > and you would seem to be up to step 2. :)
>> >
>> > Cheers,
>> > David
>> >
>> > >
>> > >
>> > >
>> > >
>> > >
[1]https://bugs.openjdk.java.net/browse/JDK-8230557
>> > >
>> > > [2]http://openjdk.java.net/contribute/
>> > >
[3]https://www.oracle.com/technetwork/community/oca-486395.html
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
------------------&nbsp;????????&nbsp;------------------
>> > > ??????:&nbsp;"Bug Report
>> >
Notification"<bug-report-daemon...@oracle.com&gt;;
>> > > ????????:&nbsp;2019??9??5??(??????)
????3:33
>> > >
??????:&nbsp;"????????"<2217232...@qq.com&gt;;
>> > >
>> > > ????:&nbsp;Update Notification: Bug
Report - JDK-8230557
>> > >
>> > >
>> > >
>> > >
>> >
[This is an automated response. Please
>> do not
>> > reply.]
>> > > Dear Java Developer,
>> > > We have finished evaluating your
report and have assigned it a Bug
>> > ID: JDK-8230557. The issue is visible on
bugs.java.com at the
>> following
>> > url JDK-8230557.
>> >
>
To provide more information about this issue,
>> > click here.
>> >
>
We work to resolve the issues that are
>> submitted to
>> > us according to their impact to the community as
a whole, and make no
>> > promises as to the time or release in which a
bug might be fixed. If
>> > this issue has a significant impact on your
project you may want to
>> > consider using one of the technical support
offerings available at
>> > Oracle Support.
>> >
>
Regards,
>> >
>
Java Developer Support
>> > >
>> > >
>> > >
>> > >
>> > >
>> > > Java SE
>> >
>
Java SE Documentation
>> >
>
Java SE Downloads
>> >
>
Java Developer Forums
>> >
>
Oracle Java SE Advanced
>> >
>
Bug Database
>> > >
>> >
Copyright ?0?8 Oracle
>> and/or
>> > its affiliates. All rights reserved.
>> > >
>> >
Terms of Use
|
>> Privacy
>> > >