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

Reply via email to