[Rd] use of buffers in sprintf and snprintf

Simon Urbanek @|mon@urb@nek @end|ng |rom R-project@org
Fri May 31 04:20:51 CEST 2019


No, that will make it even worse since you'll be declaring a lot more memory that you actually have.

The real problem is that you're ignoring the truncation, so you probably want to use something like

if (snprintf(tempname, sizeof(tempname), "%s.%d", of1name, j) >= sizeof(tempname)) Rf_error("file name is too long");

BTW: most OSes systems have a path limits that are no lower than 256 so you should allow at least as much.

Cheers,
Simon




> On May 29, 2019, at 11:49 AM, jing hua zhao <jinghuazhao using hotmail.com> wrote:
> 
> Dear R-developers,
> 
> I am struggling with packaging with sprintf and snprintf() as the following WARNINGS from gcc 9.x,
> 
>  hap_c.c:380:46: warning: �%d� directive output may be truncated writing between 1 and 10 bytes into a region of size between 0 and 127 [-Wformat-truncation=]
>  hap_c.c:392:46: warning: �%d� directive output may be truncated writing between 1 and 10 bytes into a region of size between 0 and 127 [-Wformat-truncation=]
> 
> Essentially, I have
> 
> #define MAX_FILENAME_LEN 128
> char of1name[MAX_FILENAME_LEN],of2name[MAX_FILENAME_LEN], tempname[MAX_FILENAME_LEN];
> 
> ...
> 
> snprintf(tempname,sizeof(tempname),"%s.%d", of1name, j);
> 
> It looks I could get around with
> 
> 
> #define MAX_FILENAME_LEN 128
> 
> #define MAX_FILENAME_LEN2 256
> 
> char of1name[MAX_FILENAME_LEN],of2name[MAX_FILENAME_LEN], tempname[MAX_FILENAME_LEN2];
> 
> ...
> snprintf(tempname,2*sizeof(tempname)+1,"%s.%d", of1name, j)
> 
> It looks a bit waste of resources to me.
> 
> 
> Any idea will be greatly appreciated,
> 
> 
> 
> Jing Hua
> 
> 	[[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