On 4/18/19 11:07 PM, Jack Wasey wrote:
I was trying to get an interactive R prompt with the current working directory. 
I reviewed R source 'main.c' and 'options.c', and saw that a 20 char buffer is 
used when in Browse debugging mode, but that no other validation is done on the 
length of the prompt option.
There is no limit enforced on the length of the prompt option. There is nothing wrong about accepting strings of unlimited length, when they are handled properly. I don't see any problem in how the prompt string is handled in the present code base. The only reason to add such limit may be to hide the readline issue you found, but perhaps it would be better to solve that on the readline side, unless you have a realistic reproducible example to trigger the problem.
This hangs R, or takes extremely long to return:

# R --vanilla
big <- paste(sample(LETTERS, size = 1e7, replace = TRUE), collapse = "")
options(prompt = big)

Running R with gdb and interrupting to get backtraces shows that 'pushReadLine' 
in 'unix/sys-std.c' results in a chain of libreadline calls, including, in my 
case at least, UTF-8 and a lot of __strlen_avx2 activity. 'R_PromptString' in 
'main.c' should check prompt is a reasonable length, as well as a check when 
setting the prompt in 'options.c'. This may be a readline bug, too? I watched 
it do nothing for a while, it didn't seem to accumulate much or any new memory 
while watching 'top', but did max one core of CPU.

I can reproduce this issue with readline on Ubuntu and Fedora, rl_callback_handler_install() takes very long, spending a lot on time in encoding conversions, and for large inputs corrupts memory. On macOS with editline I could get long prompts working fine (fast and without crashing). I don't see how this could be a problem in R, it seems to be in readline: if you or anyone find it to be a problem worth spending time on, I would suggest creating a small standalone C example to trigger it and file a bug against readline.

I've searched R-devel and see minimal discussion of security threats in R. Has 
anybody fuzzed R with data or source files? As R grows in popularity, I hope 
there is some pro-active security work going on, which I understand may not 
always best be done on a public mailing list.

Keep in mind that R by design lets you run arbitrary code on the machine without any restriction (e.g. via "system", "library", "dyn.load"), and there is no API in R to restrict access to those and similar functions. So, there is no point in exploiting say a buffer overflow bug. Of course, a buffer overflow bug is still a correctness problem and will be fixed if found and reported.

Tomas


Jack Wasey

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to