[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