[fpc-devel] ref count issue with out param
lazarus at mfriebe.de
Sat Jun 13 23:42:38 CEST 2015
On 13/06/2015 21:48, Jonas Maebe wrote:
> On 13/06/15 22:04, Florian Klämpfl wrote:
>> Or is it documented somewhere that out parameters are finalized first and then the other parameters
>> are loaded?
> Regardless of whether it's documented, maybe we should do that anyway.
> It doesn't seem like a bad idea.
It would in any case not break Delphi Compatibility. And it would remove
one pitfall for dangling pointer vulnerabilities.
A few observations I made. But they are mostly implementation detail, so
if done other ways may be taken...
FPC currently simply decrements the refcount (on calling site). So if
refcount > 1 then the string remains valid. (vaild = not a dangling pointer)
If I am right a ref count of 1 can only happen, if the value is read
directly from memory (variable, via pointer, property without getter)
function bar(a: AnsiString): AnsiString;
result := a;
in the debugger shows the refcount goes up. So function results may be
safe anyway? If so eval orders of functions does not even need to change.
In Delphi I observed:
- The ref count does not matter. The other param (that has the same
variable) always gets nil
- Except, if resut of a function call
Bar always gets the actual value of s1, and then the result of Bar is
passed. (But again that really may be implementation detail)
More information about the fpc-devel