char dnam[PROC_PID_FD_LEN];
DIR *dir;
- sprintf(dnam, "/proc/%ld/fd", (long) getpid());
+ snprintf(dnam, sizeof(dnam), "/proc/%ld/fd", (long) getpid());
dir = opendir(dnam);
if (!dir)
return false;
maxfd = sysconf(_SC_OPEN_MAX);
- sprintf(dnam, "/proc/%ld/fd", (long) getpid());
+ snprintf(dnam, sizeof(dnam), "/proc/%ld/fd", (long) getpid());
dir = try_opendir(dnam, &fromfd, maxfd);
if (!dir)
dir = try_opendir("/dev/fd", &fromfd, maxfd);
* like 0.3 -> 0.299999999999999988898 .
*/
char buf[64];
- sprintf(buf, "%.16g", num);
+ snprintf(buf, sizeof(buf), "%.16g", num);
if (number_is_valid(buf))
sb_puts(out, buf);
* json_out_start(jout, NULL, '{');
* for (int i = 1; i < argc; i++) {
* char fieldname[80];
- * sprintf(fieldname, "argv%i", i);
+ * snprintf(fieldname, sizeof(fieldname), "argv%i", i);
* json_out_add(jout, fieldname,
* !can_be_json_literal(argv[i]),
* "%s", argv[i]);
struct thash_iter i;
char *ret;
struct trace *t;
+ size_t maxlen;
worst = NULL;
worst_ratio = 2;
if (worst_ratio * 100 > percent)
return NULL;
- ret = malloc(strlen(worst->condstr) +
- strlen(worst->file) +
- sizeof(long int) * 8 +
- sizeof("%s:%u:%slikely(%s) correct %u%% (%lu/%lu)"));
- sprintf(ret, "%s:%u:%slikely(%s) correct %u%% (%lu/%lu)",
- worst->file, worst->line,
- worst->expect ? "" : "un", worst->condstr,
- (unsigned)(worst_ratio * 100),
- worst->right, worst->count);
+ maxlen = strlen(worst->condstr) +
+ strlen(worst->file) +
+ sizeof(long int) * 8 +
+ sizeof("%s:%u:%slikely(%s) correct %u%% (%lu/%lu)");
+ ret = malloc(maxlen);
+ snprintf(ret, maxlen - 1, "%s:%u:%slikely(%s) correct %u%% (%lu/%lu)",
+ worst->file, worst->line,
+ worst->expect ? "" : "un", worst->condstr,
+ (unsigned)(worst_ratio * 100),
+ worst->right, worst->count);
thash_del(&htable, worst);
free(worst);
static char *arg_bad(const char *fmt, const char *arg)
{
- char *str = opt_alloc.alloc(strlen(fmt) + strlen(arg));
- sprintf(str, fmt, arg);
+ char *str = opt_alloc.alloc(strlen(fmt) + strlen(arg) + 1);
+ snprintf(str, strlen(fmt) + strlen(arg), fmt, arg);
+ str[strlen(fmt) + strlen(arg)] = '\0';
return str;
}
char *opt_invalid_argument(const char *arg)
{
- char *str = opt_alloc.alloc(sizeof("Invalid argument '%s'") + strlen(arg));
- sprintf(str, "Invalid argument '%s'", arg);
+ size_t maxlen = sizeof("Invalid argument '%s'") + strlen(arg);
+ char *str = opt_alloc.alloc(maxlen + 1);
+ snprintf(str, maxlen, "Invalid argument '%s'", arg);
+ str[maxlen] = '\0';
return str;
}
pass("Can't test error message");
} else {
char buf[30];
- sprintf(buf, "%lu", ULONG_MAX);
+ snprintf(buf, sizeof(buf), "%lu", ULONG_MAX);
ok1(!parse_args(&argc, &argv, "-a", buf, NULL));
ok1(strstr(err_output, ": -a: value '")
&& strstr(err_output, buf)
size_t len;
char exname[256];
- sprintf(exname, "%s[%s]", e->name, NLT(crlf));
+ snprintf(exname, sizeof(exname), "%s[%s]", e->name, NLT(crlf));
buf = assemble_msg(e, &len, crlf);
ok((buf), "assembled %s", exname);
size_t len;
char exname[256];
- sprintf(exname, "%s[%s]", e->name, NLT(crlf));
+ snprintf(exname, sizeof(exname), "%s[%s]", e->name, NLT(crlf));
buf = assemble_msg(e, &len, crlf);
ok((buf), "assembled %s", exname);
/* Caller can't set both! */
if (fieldval_int) {
assert(!fieldval_str);
- sprintf(strfield, "%"PRIi64, *fieldval_int);
+ snprintf(strfield, sizeof(strfield) - 1, "%"PRIi64, *fieldval_int);
+ strfield[sizeof(strfield) - 1] = '\0';
fieldval_str = strfield;
fieldval_strlen = strlen(strfield);
}
memset(&types, 0xFF, sizeof(types));
/* Hex versions */
- sprintf(str, "0x%llx", (unsigned long long)types.u1byte);
+ snprintf(str, sizeof(str), "0x%llx", (unsigned long long)types.u1byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u1byte));
- sprintf(str, "0x%llx", (unsigned long long)types.u2byte);
+ snprintf(str, sizeof(str), "0x%llx", (unsigned long long)types.u2byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u2byte));
- sprintf(str, "0x%llx", (unsigned long long)types.u4byte);
+ snprintf(str, sizeof(str), "0x%llx", (unsigned long long)types.u4byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u4byte));
- sprintf(str, "0x%llx", (unsigned long long)types.u8byte);
+ snprintf(str, sizeof(str), "0x%llx", (unsigned long long)types.u8byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u8byte));
/* Decimal versions */
- sprintf(str, "%u", types.u1byte);
+ snprintf(str, sizeof(str), "%u", types.u1byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u1byte));
- sprintf(str, "%d", types.s1byte);
+ snprintf(str, sizeof(str), "%d", types.s1byte);
ok1(strlen(str) < STR_MAX_CHARS(types.s1byte));
- sprintf(str, "%u", types.u2byte);
+ snprintf(str, sizeof(str), "%u", types.u2byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u2byte));
- sprintf(str, "%d", types.s2byte);
+ snprintf(str, sizeof(str), "%d", types.s2byte);
ok1(strlen(str) < STR_MAX_CHARS(types.s2byte));
- sprintf(str, "%u", types.u4byte);
+ snprintf(str, sizeof(str), "%u", types.u4byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u4byte));
- sprintf(str, "%d", types.s4byte);
+ snprintf(str, sizeof(str), "%d", types.s4byte);
ok1(strlen(str) < STR_MAX_CHARS(types.s4byte));
- sprintf(str, "%llu", (unsigned long long)types.u8byte);
+ snprintf(str, sizeof(str), "%llu", (unsigned long long)types.u8byte);
ok1(strlen(str) < STR_MAX_CHARS(types.u8byte));
- sprintf(str, "%lld", (long long)types.s8byte);
+ snprintf(str, sizeof(str), "%lld", (long long)types.s8byte);
ok1(strlen(str) < STR_MAX_CHARS(types.s8byte));
/* Pointer version. */
- sprintf(str, "%p", types.ptr);
+ snprintf(str, sizeof(str), "%p", types.ptr);
ok1(strlen(str) < STR_MAX_CHARS(types.ptr));
return exit_status();
for (j = 0; j < NUM_SUBSTRINGS; j++) {
strings[n] = malloc(strlen(substrings[i])
+ strlen(substrings[j]) + 1);
- sprintf(strings[n++], "%s%s",
- substrings[i], substrings[j]);
+ snprintf(strings[n++],
+ strlen(substrings[i]) + strlen(substrings[j]),
+ "%s%s",
+ substrings[i], substrings[j]);
}
}
for (i = 0; i < NUM; i++) {
char template[10];
- sprintf(template, "%08u", i);
+ snprintf(template, sizeof(template), "%08u", i);
str[i] = strdup(template);
}
for (i = 0; i < NUM; i++) {
char template[10];
- sprintf(template, "%08u", i);
+ snprintf(template, sizeof(template), "%08u", i);
str[i] = strdup(template);
}
for (i = 0; i < NUM; i++) {
char template[10];
- sprintf(template, "%08u", i);
+ snprintf(template, sizeof(template), "%08u", i);
str[i] = strdup(template);
}
for (i = 0; i < NUM; i++) {
char template[10];
- sprintf(template, "%08u", i);
+ snprintf(template, sizeof(template), "%08u", i);
str[i] = strdup(template);
}
return labelarr[i];
}
- sprintf(pointer_buf, "%p", takenarr[0]);
+ snprintf(pointer_buf, sizeof(pointer_buf), "%p", takenarr[0]);
return pointer_buf;
}
if (errorstr) {
/* Try not to malloc: it may be corrupted. */
char msg[strlen(errorstr) + 20 + strlen(errmsg) + 1];
- sprintf(msg, "%s:%p %s", errorstr, from_tal_hdr(t), errmsg);
+ snprintf(msg, sizeof(msg), "%s:%p %s", errorstr, from_tal_hdr(t), errmsg);
+ msg[sizeof(msg) - 1] = '\0';
call_error(msg);
}
return false;
static void unlink_all(const char *dir)
{
char cmd[strlen(dir) + sizeof("rm -rf ")];
- sprintf(cmd, "rm -rf %s", dir);
+ snprintf(cmd, sizeof(cmd), "rm -rf %s", dir);
if (tools_verbose)
printf("Running: %s\n", cmd);
if (system(cmd) != 0)