From pdalgd at gmail.com  Sun Aug 14 01:59:41 2011
From: pdalgd at gmail.com (peter dalgaard)
Date: Sun, 14 Aug 2011 01:59:41 +0200
Subject: [Rd] Latent flaw in SEXPREC definition
In-Reply-To: <20110813205643.GA4049@cs.toronto.edu>
References: <20110813205643.GA4049@cs.toronto.edu>
Message-ID: <7DE8973C-B303-4201-9964-F5117FD283E8@gmail.com>


On Aug 13, 2011, at 22:56 , Radford Neal wrote:

> There seems to be a latent flaw in the definition of struct SEXPREC
> in Rinternals.h, which likely doesn't cause problems now, but could
> if the relative sizes of data types changes.
> 
> The SEXPREC structure contains a union that includes a primsxp,
> symsxp, etc, but not a vecsxp.  However, in allocVector in memory.c,
> zero-length vectors are allocated using allocSExpNonCons, which
> appears to allocates a SEXPREC structure.  This won't work if a vecsxp
> is larger than the other types that are in the union in the SEXPREC
> structure.
> 
> Simply adding a vecsxp to the union would seem to fix this, as in
> the following patch:

But the whole point of separating VECTOR_SEXPREC from the other SEXPRECs is that they are _shorter_. A vecsxp is only going to be larger than (say) an envsxp if 2 R_len_t's are more than 3 pointers, which is quite unlikely since R_len_t variables holds things that one might add to pointers.

NOT having vecsxp in the SEXPREC union prevents programmers from mistakingly using SEXP* where VECSXP* should have been used. Since the distinction wasn't always there, I suspect that flagging usage of x->u.vecsxp.length by the compiler was rather important at some point in time.  


> 
> Index: src/include/Rinternals.h
> ===================================================================
> --- src/include/Rinternals.h    (revision 56640)
> +++ src/include/Rinternals.h    (working copy)
> @@ -219,6 +219,7 @@
> typedef struct SEXPREC {
>     SEXPREC_HEADER;
>     union {
> +       struct vecsxp_struct vecsxp;
>        struct primsxp_struct primsxp;
>        struct symsxp_struct symsxp;
>        struct listsxp_struct listsxp;
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
"D?den skal tape!" --- Nordahl Grieg



[Rd] Latent flaw in SEXPREC definition
peter dalgaard