On 08/28/2012 03:33 AM, Christian Hammers wrote:
> Am Tue, 28 Aug 2012 00:09:41 +0200
> schrieb Christian Hammers <c...@lathspell.de>:
> 
>> Hello
>>
>> Am Mon, 27 Aug 2012 16:39:23 -0400
>> schrieb Gary Gregory <garydgreg...@gmail.com>:
>>
>>> On Mon, Aug 27, 2012 at 2:53 PM, Thomas Neidhart
>>> <thomas.neidh...@gmail.com>wrote:
>>>
>>>> On 08/27/2012 03:36 PM, Gary Gregory wrote:
>>>>> Hi All:
>>>>>
>>>>> FindBugs says the following a couple of times for UnixCrypt:
>>>>> "Vacuous bit mask operation on integer value
>>>>> (INT_VACUOUS_BIT_OPERATION)
>>>>>
>>>>> This is an integer bit operation (and, or, or exclusive or) that
>>>>> doesn't
>>>> do
>>>>> any useful work (e.g., v & 0xffffffff)."
>>>>> This makes me wonder if the whole class is correct in the first
>>>>> place and if/how/why these ops got in there.
>>>>>
>>>>> Was this translated (incorrectly) from JetSpeed's
>>>>> implementation? Where
>>>> the
>>>>> types (int vs longs?) in JetSpeed different? Where did JetSpeed
>>>>> get this implementation?
>>>>
>>>> I do not know the source of the JetSpeed implementation, but there
>>>> are several (slightly different) variants of this floating around
>>>> in other projects:
>>>>
>>>>
>>>> http://grepcode.com/file/repository.jboss.org/maven2/postgresql/postgresql/8.4-701.jdbc3/org/postgresql/util/UnixCrypt.java
>>>>
>>>>
>>>> http://grepcode.com/file/repo1.maven.org/maven2/org.mortbay.jetty/jetty/6.1.11/org/mortbay/jetty/security/UnixCrypt.jav
>>>>
>>>> The jetty version looks the most clean one, and as it is also
>>>> Apache license, maybe we should take this one and cleanup the
>>>> code a bit?
>>>>
>>>
>>> The first thing to try would be to drop in the Jetty impl (I looked
>>> at the one in the 8.1 version) and see our unit tests run unchanged
>>> (aside from the different APIs). I cannot do this today though. Feel
>>> try to try ;)
>>>
>>> Gary
>>
>> The original Jetspeed source also had this "v & 0xffffffff":
>>   
>> http://www.javadocexamples.com/java_source/org/apache/jetspeed/services/security/ldap/UnixCrypt.java.html
>>   http://archive.apache.org/dist/jakarta/jetspeed/jetspeed-current-src.zip 
>>
>> But I will have a look now how the Jetty source looks in comparison...
> 
> The Aki Yoshida version from Jetty does not pass the UTF-8 unit tests:
> It gives the same result for ASCII inputs and also for a single 0x80
> but two consecutive bytes > 0x80 like 0xC3 0xA4 for "ä" gives a
> different result than "perl -e 'print crypt("ä", "xx");'.
> As it looks totally different than all the other UnixCrypt
> implementations I have no clue how to fix it.
> 
> Regarding the other ones, most of them have a common ancestors in
> John Dumas Java port which is the one with the "v & 0xffffffff".
> http://www.dynamic.net.au/christos/crypt/ gives a nice
> genealogy overview :)
> 
> The first one mentioned there, from Davit Scott, also works but is
> not only significantly slower than all the other ones but also
> does not have a clear license statement so I doubt that we could
> use it.
> 
> Our current version, which is similar to the PostgreSQL JDBC one
> mentioned above, passes all tests without the "0xffffffff" though.
> As it "int" is defined as a 4 bytes in the JLS 4.2.1 and not platform
> dependend like in C, we could just remove it and make FindBugs happy.
> 
> Apropos, "Math.abs(r.nextInt()) % numSaltChars" could be replaced by
> "r.nextInt(numSaltChars)" and FindBugs would be completely
> clean for this file.

Interesting is also that in the postgresql variant, the bitwise and
operation is using a slightly different argument:

 c &= 0x0fffffff;

So they must have made this observation too because the rest of the code
looks very much the same.

Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to