On 24/01/2023 1:12 p.m., Ivan Krylov wrote:
On Tue, 24 Jan 2023 17:33:10 +0000
Maxim Nazarov <maxim.naza...@openanalytics.eu> wrote:
this seems to come from the C code
I'm 99% sure this comes from the following changes to the package:
--- minpack.lm_1.2-2/src/fcn_message.c 2020-03-23 10:54:03.000000000 +0300
+++ minpack.lm_1.2-3/src/fcn_message.c 2023-01-17 09:30:05.000000000 +0300
@@ -3,24 +3,24 @@
char *fcn_message(char *msg, int info, int n, int nit)
{
if (info == 1)
- sprintf(msg, "Relative error in the sum of squares is at most
`ftol'.");
+ Rprintf(msg, "Relative error in the sum of squares is at most
`ftol'.");
else if (info == 2)
(And so on for other values of `info`.)
sprintf() takes a string pointer to write into as its first argument.
Rprintf(), on the other hand, prints straight to the R console; its
first argument is the format string. Given a valid pointer to an
uninitialised string instead of the format string, Rprintf prints stack
garbage to the console, ignoring the following arguments. My guess is
that the maintainers either intended to remove the msg argument
altogether or needed to use snprintf() and pass the buffer size to
fcn_message().
Package maintainers recently got a message telling us not to use
sprintf() any more. I guess the minpack.lm maintainer either didn't
read the whole message carefully enough and used Rprintf as a substitute
instead of snprintf(), or intended to use snprintf(), but typed
Rprintf() out of habit.
Duncan Murdoch
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel