Hi, of course it's your decision, but I personally think that adding the check to the wrapper is a good idea. For now, I added the check everywhere in my code where I use a const char* with Rcpp::wrap.
Regards, Christoph On 05/24/2011 03:24 PM, Dirk Eddelbuettel wrote:
On 24 May 2011 at 14:53, Romain Francois wrote: | Le 24/05/11 13:46, Dirk Eddelbuettel a écrit : |> |> On 24 May 2011 at 13:22, Christoph Bergmeir wrote: |> | Hello everybody, |> | |> | I just ran into the following problem: Using Rcpp::wrap with a NULL pointer crashes my R. I'm not so sure if this is a bug or if I'm using Rcpp::wrap in a way it shouldn't be used, so I wanted to discuss this here. |> | |> | Here is some example code: |> | |> | This works fine: |> | #----------------------------------- |> | library(inline) |> | |> | src<- ' |> | const char* ret = "test"; |> | return Rcpp::wrap(ret); |> | ' |> | |> | fun<- cxxfunction(signature(), src, plugin="Rcpp") |> | fun() |> | #----------------------------------- |> | |> | Whereas this crashes R: |> | #----------------------------------- |> | |> | src<- ' |> | const char* ret = NULL; |> | return Rcpp::wrap(ret); |> | ' |> | |> | fun<- cxxfunction(signature(), src, plugin="Rcpp") |> | fun() |> | #----------------------------------- |> |> I think this is mostly of the |> |> Q Doctor, doctor it hurts when I do this! |> A Well then don't it |> |> variety. wrap() is tasked with making a valid SEXP out of what you hand it. |> Maybe you want to test for NULL before calling it. |> |> Dirk | | And you start sounding like Steve Jobs :-) | Perhaps we can bring the test inside Rcpp in this wrap : | | inline SEXP wrap(const char* const v ){ | return Rf_mkString(v) ; | } | | Not sure what the result ought to be though: NULL, NA, "" ? Yes, when glancing at the traits header for wrap, and the internal/wrap.h which contains this I also spotted this special case for const char*, and had the same idea. This can hold a test for NULL. But that said I simply fear that by accomodating const char* we set ourselves up for the next guys sending us a void* As the saying goes, you cannot write foolproof software as you simply attract smarter fools ;-) We could indeed return R_NilValue in this case. But what about other 'misuses'? Dirk | | Romain | |> | I'm using Rcpp 0.9.4 and R.2.13, which I think are the latest versions. |> | |> | Regards, |> | Christoph |> | |> | PD: Dirk, Romain, I just read through the slides you made for this workshop a month ago. Great work! Thanks a lot! |> |> Thanks! |> |> | |> | |> | -- |> | Christoph Bergmeir |> | e-mail: c.bergm...@decsai.ugr.es |> | Grupo SCI2S, DiCITS Lab (http://sci2s.ugr.es/DiCITS) |> | Dpto. de Ciencias de la Computacion e Inteligencia Artificial |> | E.T.S. Ingenierias de Informatica y Telecomunicacion |> | Universidad de Granada |> | 18071 - GRANADA (Spain) |> | _______________________________________________ |> | Rcpp-devel mailing list |> | Rcpp-devel@lists.r-forge.r-project.org |> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel |> | | | -- | Romain Francois | Professional R Enthusiast | +33(0) 6 28 91 30 30 | http://romainfrancois.blog.free.fr | http://romain-francois.com | |- http://bit.ly/hdKhCy : Rcpp article in JSS | |- http://bit.ly/elZJRJ : Montpellier Comedie Club - Avril 2011 | `- http://bit.ly/fhqbRC : Rcpp workshop in Chicago on April 28th | |
-- Christoph Bergmeir e-mail: c.bergm...@decsai.ugr.es Grupo SCI2S, DiCITS Lab (http://sci2s.ugr.es/DiCITS) Dpto. de Ciencias de la Computacion e Inteligencia Artificial E.T.S. Ingenierias de Informatica y Telecomunicacion Universidad de Granada 18071 - GRANADA (Spain) _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel