diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2026-04-23 01:26:03 -0400 |
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2026-04-23 01:26:27 -0400 |
| commit | 44ed1c60ad8f838bfb6cfff26683bf706285552a (patch) | |
| tree | e4bae9ececbe5fdddeec4276222132a3e85c4d42 /src | |
| parent | 821f58a4c54fe8c3fc33fbefd6afb1d7b8b69419 (diff) | |
| download | stasis-44ed1c60ad8f838bfb6cfff26683bf706285552a.tar.gz | |
Fix snprintfs
Diffstat (limited to 'src')
| -rw-r--r-- | src/cli/stasis/args.c | 4 | ||||
| -rw-r--r-- | src/lib/core/artifactory.c | 7 | ||||
| -rw-r--r-- | src/lib/core/conda.c | 41 | ||||
| -rw-r--r-- | src/lib/core/multiprocessing.c | 5 | ||||
| -rw-r--r-- | src/lib/core/utils.c | 15 | ||||
| -rw-r--r-- | src/lib/delivery/delivery_conda.c | 12 | ||||
| -rw-r--r-- | src/lib/delivery/delivery_docker.c | 10 | ||||
| -rw-r--r-- | src/lib/delivery/delivery_install.c | 10 |
8 files changed, 38 insertions, 66 deletions
diff --git a/src/cli/stasis/args.c b/src/cli/stasis/args.c index 98b4479..e1c49fe 100644 --- a/src/cli/stasis/args.c +++ b/src/cli/stasis/args.c @@ -105,9 +105,7 @@ void usage(char *progname) { strncat(opt_short, " ", sizeof(opt_short) - strlen(opt_short) - 1); } - const char *opt_fmt = " %%-%ds\t%%s\t\t%%s"; - size_t opt_fmt_len = snprintf(NULL, 0, opt_fmt, width); - snprintf(tmp, sizeof(tmp) - opt_fmt_len, opt_fmt, width + 4); + snprintf(tmp, sizeof(tmp) - strlen(tmp), " %%-%ds\t%%s\t\t%%s", width + 4); snprintf(output, sizeof(output), tmp, opt_long, opt_short, long_options_help[x]); puts(output); } diff --git a/src/lib/core/artifactory.c b/src/lib/core/artifactory.c index f70c0b8..2490346 100644 --- a/src/lib/core/artifactory.c +++ b/src/lib/core/artifactory.c @@ -76,15 +76,12 @@ int artifactory_download_cli(char *dest, } SYSDEBUG("%s", "Construct path to write data"); - const char *remote_filename_fmt = "/%s"; - int remote_filename_fmt_len = snprintf(NULL, 0, remote_filename_fmt, remote_filename); SYSDEBUG("path buffer contents: '%s'", path); SYSDEBUG("path buffer size: %zu", sizeof(path)); SYSDEBUG("path strlen: %zu", strlen(path)); - SYSDEBUG("remote_filename_fmt_len: %d", remote_filename_fmt_len); - SYSDEBUG("maxlen for snprintf: %zu", sizeof(path) - strlen(path) - remote_filename_fmt_len); + SYSDEBUG("maxlen for snprintf: %zu", sizeof(path) - strlen(path)); - snprintf(path + strlen(path), sizeof(path) - strlen(path) - remote_filename_fmt_len, remote_filename_fmt, remote_filename); + snprintf(path + strlen(path), sizeof(path) - strlen(path), "/%s", remote_filename); char *errmsg = NULL; SYSDEBUG("%s", "Downloading..."); long fetch_status = download(url, path, &errmsg); diff --git a/src/lib/core/conda.c b/src/lib/core/conda.c index c8cdb25..4daf0dc 100644 --- a/src/lib/core/conda.c +++ b/src/lib/core/conda.c @@ -17,10 +17,8 @@ int micromamba(const struct MicromambaInfo *info, char *command, ...) { strncpy(sys.machine, "64", sizeof(sys.machine) - 1); } - char url[PATH_MAX]; - const char *url_fmt = "https://micro.mamba.pm/api/micromamba/%s-%s/latest"; - const int url_fmt_len = snprintf(NULL, 0, url_fmt, sys.sysname, sys.machine); - snprintf(url, sizeof(url) - url_fmt_len, url_fmt, sys.sysname, sys.machine); + char url[PATH_MAX] = {0}; + snprintf(url, sizeof(url), "https://micro.mamba.pm/api/micromamba/%s-%s/latest", sys.sysname, sys.machine); char installer_path[PATH_MAX]; snprintf(installer_path, sizeof(installer_path), "%s/latest", getenv("TMPDIR") ? getenv("TMPDIR") : "/tmp"); @@ -95,16 +93,12 @@ int micromamba(const struct MicromambaInfo *info, char *command, ...) { int python_exec(const char *args) { const char *command_base = "python "; - const char *command_fmt = "%s%s"; - const int len = snprintf(NULL, 0, command_fmt, command_base, args); - char *command = calloc(len + 1, sizeof(*command)); - if (!command) { - SYSERROR("Unable to allocate %d bytes for command string", len); + char *command = NULL; + if (asprintf(&command, "%s%s", command_base, args) < 0 || !command) { + SYSERROR("%s", "Unable to allocate command string"); return -1; } - - snprintf(command, len + 1, command_fmt, command_base, args); msg(STASIS_MSG_L3, "Executing: %s\n", command); const int result = system(command); @@ -114,15 +108,12 @@ int python_exec(const char *args) { int pip_exec(const char *args) { const char *command_base = "python -m pip "; - const char *command_fmt = "%s%s"; - const int len = snprintf(NULL, 0, command_fmt, command_base, args); - char *command = calloc(len + 1, sizeof(*command)); - if (!command) { - SYSERROR("Unable to allocate %d bytes for command string", len); + char *command = NULL; + if (asprintf(&command, "%s%s", command_base, args) < 0 || !command) { + SYSERROR("%s", "Unable to allocate command string"); return -1; } - snprintf(command, len + 1, command_fmt, command_base, args); msg(STASIS_MSG_L3, "Executing: %s\n", command); const int result = system(command); @@ -170,7 +161,7 @@ int pkg_index_provides(int mode, const char *index, const char *spec) { int status = 0; struct Process proc = {0}; proc.redirect_stderr = 1; - strncpy(proc.f_stdout, logfile, sizeof(proc.f_stdout) - 1); + snprintf(proc.f_stdout, sizeof(proc.f_stdout), "%s", logfile); if (mode == PKG_USE_PIP) { // Do an installation in dry-run mode to see if the package exists in the given index. @@ -512,8 +503,8 @@ int conda_setup_headless() { if (isempty(item)) { continue; } - const int cmd_fmt_len = snprintf(NULL, 0, cmd_fmt, item); - snprintf(cmd + strlen(cmd), sizeof(cmd) - strlen(cmd) - cmd_fmt_len, cmd_fmt, item); + + snprintf(cmd + strlen(cmd), sizeof(cmd) - strlen(cmd), cmd_fmt, item); if (i < total - 1) { strncat(cmd, " ", sizeof(cmd) - strlen(cmd) - 1); } @@ -605,13 +596,12 @@ int conda_env_create_from_uri(char *name, char *uri, char *python_version) { file_replace_text(tempfile, "- python\n", spec, 0); const char *fmt = "env create -n '%s' --file='%s'"; - int len = snprintf(NULL, 0, fmt, name, tempfile); - char *env_command = calloc(len + 1, sizeof(*env_command)); - if (!env_command) { + char *env_command = NULL; + if (asprintf(&env_command, fmt, name, tempfile) < 0 || !env_command) { + SYSERROR("%s", "unable to allocate environment command"); return -1; } - snprintf(env_command, len + 1, fmt, name, tempfile); const int status = conda_exec(env_command); unlink(tempfile); guard_free(env_command); @@ -669,7 +659,6 @@ int conda_index(const char *path) { int conda_env_exists(const char *root, const char *name) { char path[PATH_MAX] = {0}; - const int len = snprintf(NULL, 0, "%s/%s", root, name); - snprintf(path, sizeof(path) - len, "%s/envs/%s", root, name); + snprintf(path, sizeof(path), "%s/envs/%s", root, name); return access(path, F_OK) == 0; } diff --git a/src/lib/core/multiprocessing.c b/src/lib/core/multiprocessing.c index 69bcc02..8d848fe 100644 --- a/src/lib/core/multiprocessing.c +++ b/src/lib/core/multiprocessing.c @@ -74,9 +74,8 @@ int child(struct MultiProcessingPool *pool, struct MultiProcessingTask *task) { // Set log file name if (globals.enable_task_logging) { - const char *log_file_fmt = "task-%zu-%d.log"; - const int log_file_len = snprintf(NULL, 0, log_file_fmt, mp_global_task_count, task->parent_pid); - snprintf(task->log_file + strlen(task->log_file), sizeof(task->log_file) - strlen(task->log_file) - log_file_len, log_file_fmt, mp_global_task_count, task->parent_pid); + snprintf(task->log_file + strlen(task->log_file), sizeof(task->log_file) - strlen(task->log_file), + "task-%zu-%d.log", mp_global_task_count, task->parent_pid); } fp_log = freopen(task->log_file, "w+", stdout); if (!fp_log) { diff --git a/src/lib/core/utils.c b/src/lib/core/utils.c index ea23024..83e684f 100644 --- a/src/lib/core/utils.c +++ b/src/lib/core/utils.c @@ -320,9 +320,7 @@ int git_clone(struct Process *proc, char *url, char *destdir, char *gitref) { if (destdir && access(destdir, F_OK) < 0) { // Destination directory does not exist - const char *command_fmt = " %s"; - const int command_fmt_len = snprintf(NULL, 0, command_fmt, destdir); - snprintf(command + strlen(command), sizeof(command) - strlen(command) - command_fmt_len, command_fmt, destdir); + snprintf(command + strlen(command), sizeof(command) - strlen(command), " %s", destdir); // Clone the repo result = shell(proc, command); if (result) { @@ -944,13 +942,8 @@ void debug_hexdump(char *data, int len) { continue; } - const char *bytes_fmt = "%02X "; - const int bytes_fmt_len = snprintf(NULL, 0, bytes_fmt, (unsigned char) *pos); - snprintf(bytes + strlen(bytes), sizeof(bytes) - strlen(bytes) - bytes_fmt_len, bytes_fmt, (unsigned char) *pos); - - const char *ascii_fmt = "%c"; - // no need to calculate length for a single character - snprintf(ascii + strlen(ascii), sizeof(ascii) - strlen(ascii), ascii_fmt, isprint(*pos) ? *pos : '.'); + snprintf(bytes + strlen(bytes), sizeof(bytes) - strlen(bytes), "%02X ", (unsigned char) *pos); + snprintf(ascii + strlen(ascii), sizeof(ascii) - strlen(ascii), "%c", isprint(*pos) ? *pos : '.'); pos++; count++; @@ -964,7 +957,7 @@ void debug_hexdump(char *data, int len) { for (int i = 0; i < padding; i++) { strncat(bytes, " ", sizeof(bytes) - strlen(bytes) - 1); } - snprintf(output, DEBUG_HEXDUMP_FMT_BYTES + sizeof(addr) + sizeof(bytes) + sizeof(ascii), "%s | %s | %s", addr, bytes, ascii); + snprintf(output, sizeof(output), "%s | %s | %s", addr, bytes, ascii); puts(output); } diff --git a/src/lib/delivery/delivery_conda.c b/src/lib/delivery/delivery_conda.c index d6898a4..cf61abb 100644 --- a/src/lib/delivery/delivery_conda.c +++ b/src/lib/delivery/delivery_conda.c @@ -4,25 +4,29 @@ void delivery_get_conda_installer_url(struct Delivery *ctx, char *result, size_t int len = 0; if (ctx->conda.installer_version) { // Use version specified by configuration file - len = snprintf(NULL, 0, ctx->conda.installer_baseurl, + len = snprintf(NULL, 0, "%s/%s-%s-%s-%s.sh", + ctx->conda.installer_baseurl, ctx->conda.installer_name, ctx->conda.installer_version, ctx->conda.installer_platform, ctx->conda.installer_arch); - snprintf(result, maxlen - len, "%s/%s-%s-%s-%s.sh", ctx->conda.installer_baseurl, + snprintf(result, maxlen - len, "%s/%s-%s-%s-%s.sh", + ctx->conda.installer_baseurl, ctx->conda.installer_name, ctx->conda.installer_version, ctx->conda.installer_platform, ctx->conda.installer_arch); } else { // Use latest installer - len = snprintf(NULL, 0, "%s/%s-%s-%s.sh", ctx->conda.installer_baseurl, + len = snprintf(NULL, 0, "%s/%s-%s-%s.sh", + ctx->conda.installer_baseurl, ctx->conda.installer_name, ctx->conda.installer_platform, ctx->conda.installer_arch); - snprintf(result, maxlen - len, "%s/%s-%s-%s.sh", ctx->conda.installer_baseurl, + snprintf(result, maxlen - len, "%s/%s-%s-%s.sh", + ctx->conda.installer_baseurl, ctx->conda.installer_name, ctx->conda.installer_platform, ctx->conda.installer_arch); diff --git a/src/lib/delivery/delivery_docker.c b/src/lib/delivery/delivery_docker.c index 6aa977a..1178a8c 100644 --- a/src/lib/delivery/delivery_docker.c +++ b/src/lib/delivery/delivery_docker.c @@ -46,10 +46,7 @@ int delivery_docker(struct Delivery *ctx) { char *tag_orig = strlist_item(ctx->deploy.docker.tags, i); strncpy(tag, tag_orig, sizeof(tag) - 1); docker_sanitize_tag(tag); - - const char *tag_fmt = " -t \"%s\" "; - const int tag_fmt_len = snprintf(NULL, 0, tag_fmt, tag); - snprintf(args + strlen(args), sizeof(args) - strlen(args) - tag_fmt_len, tag_fmt, tag); + snprintf(args + strlen(args), sizeof(args) - strlen(args), " -t \"%s\" ", tag); } // Append build arguments to command (i.e. --build-arg "key=value" @@ -58,10 +55,7 @@ int delivery_docker(struct Delivery *ctx) { if (!build_arg) { break; } - - const char *build_arg_fmt = " --build-arg \"%s\" "; - const int build_arg_fmt_len = snprintf(NULL, 0, build_arg_fmt, build_arg); - snprintf(args + strlen(args), sizeof(args) - strlen(args) - build_arg_fmt_len, build_arg_fmt, build_arg); + snprintf(args + strlen(args), sizeof(args) - strlen(args), " --build-arg \"%s\" ", build_arg); } // Build the image diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c index 26bd98f..22b3752 100644 --- a/src/lib/delivery/delivery_install.c +++ b/src/lib/delivery/delivery_install.c @@ -234,9 +234,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha if (!ctx->meta.based_on) { strncat(command_base, " --upgrade", sizeof(command_base) - strlen(command_base) - 1); } - const char *command_base_fmt = " --extra-index-url 'file://%s'"; - const int len = snprintf(NULL, 0, command_base_fmt, ctx->storage.wheel_artifact_dir); - snprintf(command_base + strlen(command_base), sizeof(command_base) - len, command_base_fmt, ctx->storage.wheel_artifact_dir); + snprintf(command_base + strlen(command_base), sizeof(command_base), " --extra-index-url 'file://%s'", ctx->storage.wheel_artifact_dir); } size_t args_alloc_len = STASIS_BUFSIZ; @@ -320,7 +318,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha return -1; } } - snprintf(args + strlen(args), sizeof(args) - strlen(args) - required_len + 1, fmt, req, info->version); + snprintf(args + strlen(args), args_alloc_len - strlen(args), fmt, req, info->version); } else { fprintf(stderr, "Deferred package '%s' is not present in the tested package list!\n", name); guard_free(args); @@ -338,7 +336,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha return -1; } } - snprintf(args + strlen(args), sizeof(args) - strlen(args) - required_len + 1, fmt, name); + snprintf(args + strlen(args), args_alloc_len - strlen(args), fmt, name); } else { const char *fmt_append = "%s '%s'"; const char *fmt = " '%s'"; @@ -350,7 +348,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha return -1; } } - snprintf(args + strlen(args), sizeof(args) - strlen(args) - required_len + 1, fmt, name); + snprintf(args + strlen(args), args_alloc_len - strlen(args), fmt, name); } } } |
