[Rcpp-devel] Rcpp::wrap seg fault (when called with a NULL pointer)
Christoph Bergmeir
c.bergmeir at decsai.ugr.es
Tue May 24 17:29:27 CEST 2011
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.bergmeir at 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 at 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.bergmeir at 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)
More information about the Rcpp-devel
mailing list