[Rd] Inconsistent behavior for the C AP's R_ParseVector() ?

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Mon Dec 2 12:36:56 CET 2019


Dear Laurent,

could you please provide a complete reproducible example where parsing 
results in a crash of R? Calling parse(text="list(''=123") from R works 
fine for me (gives Error: attempt to use zero-length variable name).

I don't think the problem you observed could be related to the memory 
leak. The leak is on the heap, not stack.

Zero-length names of elements in a list are allowed. They are not the 
same thing as zero-length variables in an environment. If you try to 
convert "lst" from your example to an environment, you would get the 
error (attempt to use zero-length variable name).

Best
Tomas


On 11/30/19 11:55 PM, Laurent Gautier wrote:
> Hi again,
>
> Beside R_ParseVector()'s possible inconsistent behavior, R's handling of
> zero-length named elements does not seem consistent either:
>
> ```
>> lst <- list()
>> lst[[""]] <- 1
>> names(lst)
> [1] ""
>> list("" = 1)
> Error: attempt to use zero-length variable name
> ```
>
> Should the parser be made to accept as valid what is otherwise possible
> when using `[[<` ?
>
>
> Best,
>
> Laurent
>
>
>
> Le sam. 30 nov. 2019 à 17:33, Laurent Gautier <lgautier using gmail.com> a écrit :
>
>> I found the following code comment in `src/main/gram.c`:
>>
>> ```
>>
>> /* Memory leak
>>
>> yyparse(), as generated by bison, allocates extra space for the parser
>> stack using malloc(). Unfortunately this means that there is a memory
>> leak in case of an R error (long-jump). In principle, we could define
>> yyoverflow() to relocate the parser stacks for bison and allocate say on
>> the R heap, but yyoverflow() is undocumented and somewhat complicated
>> (we would have to replicate some macros from the generated parser here).
>> The same problem exists at least in the Rd and LaTeX parsers in tools.
>> */
>>
>> ```
>>
>> Could this be related to be issue ?
>>
>> Le sam. 30 nov. 2019 à 14:04, Laurent Gautier <lgautier using gmail.com> a
>> écrit :
>>
>>> Hi,
>>>
>>> The behavior of
>>> ```
>>> SEXP R_ParseVector(SEXP, int, ParseStatus *, SEXP);
>>> ```
>>> defined in `src/include/R_ext/Parse.h` appears to be inconsistent
>>> depending on the string to be parsed.
>>>
>>> Trying to parse a string such as `"list(''=1+"` sets the
>>> `ParseStatus` to incomplete parsing error but trying to parse
>>> `"list(''=123"` will result in R sending a message to the console (followed but a crash):
>>>
>>> ```
>>> R[write to console]: Error: attempt to use zero-length variable nameR[write to console]: Fatal error: unable to initialize the JIT*** stack smashing detected ***: <unknown> terminated
>>> ```
>>>
>>> Is there a reason for the difference in behavior, and is there a workaround ?
>>>
>>> Thanks,
>>>
>>>
>>> Laurent
>>>
>>>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list