Hi all,

Le 23/02/2012 16:45, Jörg Schaible a écrit :
> Gilles Sadowski wrote:
> 
>>>>>>>>>> URL: http://svn.apache.org/viewvc?rev=1245061&view=rev
>>>>>>>>>> Log:
>>>>>>>>>> Removed unneeded clone.
>>>>>>>>>>
>>>>>>>>>> The clone did not protect the array used, only the reference
>>>>>>>>>> ones. JIRA: MATH-650
>>>>>>>>>
>>>>>>>>> -1
>>>>>>>>>
>>>>>>>>> That was the whole point of the clone - to protect the original
>>>>>>>>> external data.
>>>>>>>>
>>>>>>>> Please (re-)explain what you mean by "protect".  Cf. my comment
>>>>>>>> on the JIRA page.
>>>>>>>
>>>>>>> See also your comment of 30/Nov/11 00:31.
>>>>>>
>>>>>> I know, but my latest comment overrides that one.
>>>>>>
>>>>>>> The arrays in FastMathLiteralArrays are private, but the access
>>>>>>> methods are not, and returning an array allows the caller to modify
>>>>>>> array elements.
>>>>>>
>>>>>> It's true, but unless I'm mistaken, it doesn't matter since in the
>>>>>> end there is one and only one array that will be _used_ (the
>>>>>> modified one) and having a pristine copy somewhere else will not
>>>>>> prevent the dire consequences of using the modified one... ;-/
>>>>>
>>>>> Not sure I follow that.
>>>>>
>>>>> Without clone, the array entries can be changed at any time.
>>>>>
>>>>> With clone, there are two pristine copies; neither can be changed
>>>>> directly as they are stored in private arrays.
>>>>
>>>> The question is: Why calling "clone"?
>>>> The answer is: You get a copy and you cannot change the array stored in
>>>> "FastMathLiteralArrays".
>>>> But that doesn't save you from the bug that consists in changing an
>>>> array entry from within "FastMath".
>>>> If that potential bug exists, some methods will produce erroneous
>>>> values because they use the copy, not the pristine original array
>>>> stored in "FastMathLiteralArrays". [After loading, the original array
>>>> is never accessed again.]
>>>>
>>>> Now if you just obtain a reference to the original array (i.e. no call
>>>> to "clone"), the bug will indeed modify it.
>>>> But the consequences are not worse than in the above scenario: The
>>>> exact same erroneous values will be computed.
>>>
>>> Not strictly true, because it's not only the FastMath class that can
>>> corrupt the array.
>>
>> Only "our" classes (in the package "o.a.c.m.util") can access (and
>> corrupt) the arrays.
>>
>>>
>>> Of course clone does not protect against bugs in FastMath; only array
>>> entry getters can do that.
>>
>> Yes. That's what I said.
>>
>>> But that's not the point;
>>
>> Yes, that's the point.
>>
>>> since the arrays were (at your insistence)
>>> moved out of FastMath itself, this necessarily meant exposing the
>>> contents to some degree.
>>> Using clone closes that potential exposure - as would using array entry
>>> getters.
>>
>> "clone" provides protection against CM developers, which I deem
>> unnecessary, since those same developers would also be able to make the
>> "mistake" of modifying the contents "FastMathLiteralArrays". [And the same
>> mistake could also happen if the arrays were stored inside the "FastMath"
>> class.]
> 
> I support Gilles here, the methods are package scoped and therefore 
> internal. A CM user will have to create an own package with same name (which 
> will not work for sealed jars or with OSGi bundles anyway) or use reflection 
> to access them. At that stage he should already know what he does. For CM 
> itself there's no need to pay the penalty to create a copy.

I don't have any clear cut opinion here, but has said in another thread
in this list we do have a veto on a code change, and this cannot be
ignored as per Apache rules.

So I a  going to undo that change and get the clone back.

Luc


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


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

Reply via email to