On 27/03/2012 14:22, Terry Therneau wrote:
I received the following note this AM. The problem is, I'm not quite
sure how to fix it.
Can one use PROTECT(coxlist(eval(PROTECT.... , do I create an
intermediate variable, or otherwise?
You can, but I find it easiest to follow if you create an intermediate
variable. Look for example at unique.c:
SEXP call, r;
PROTECT(call = lang2(install("as.character"), s));
PROTECT(r = eval(call, env));
UNPROTECT(2);
return r;
I'm willing to update the code if someone will give me a pointer to the
right documentation. This particular chunk was written when there was a
lot of change going on in the callback mechanism and so there might be a
safer and/or simpler and/or more standard aproach by now. The routine in
question has to do with penalized Cox models, the C code needs to get
the value of the penalty and the penalty is an arbitrary S expression
passed down from top level.
Terry T
----------------------------
In survival_2.36-12 (and earlier), in the function cox_callback() at
cox_Rcallback.c:40:
PROTECT(coxlist=eval(lang2(fexpr,data),rho));
the return value of the call to lang2() is vulnerable if allocations
within eval() give rise to garbage collection.
(Discovered during CXXR development.)
Andrew
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
--
Brian D. Ripley, [email protected]
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel