Skip to content

Commit d6ec954

Browse files
committed
Fix cbm_mkdtemp: enlarge all test buffers to 256 bytes
The /tmp/ → %TEMP%\ translation produces longer paths (~50 chars) than the original templates (~25 chars). Changed all 68 test declarations from char tmpdir[] = "..." (sized to literal) to char tmpdir[256] with snprintf initialization.
1 parent 6f5b77a commit d6ec954

7 files changed

Lines changed: 78 additions & 76 deletions

File tree

src/foundation/compat.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ char *cbm_strcasestr(const char *haystack, const char *needle) {
4949
#ifdef _WIN32
5050
#include <direct.h>
5151
char *cbm_mkdtemp(char *tmpl) {
52-
/* On Windows, /tmp doesn't exist. Rewrite to %TEMP%.
53-
* All callers use buffers >= 256 bytes (checked by convention). */
54-
char buf[512];
52+
/* Build path in static buffer, then copy back to caller.
53+
* Callers must provide buffers >= 256 bytes (all test code does). */
54+
static char buf[512];
5555
if (strncmp(tmpl, "/tmp/", 5) == 0) {
5656
const char *tmp = getenv("TEMP");
5757
if (!tmp)
@@ -66,7 +66,7 @@ char *cbm_mkdtemp(char *tmpl) {
6666
return NULL;
6767
if (_mkdir(buf) != 0)
6868
return NULL;
69-
/* Copy back — callers expect tmpl to be modified in place (POSIX contract) */
69+
/* Copy result back — callers now use char[256]+ buffers */
7070
strcpy(tmpl, buf);
7171
return tmpl;
7272
}

src/foundation/compat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ static inline int cbm_nanosleep(const struct timespec *req, struct timespec *rem
9090

9191
/* ── mkdtemp (Windows lacks it) ──────────────────────────────── */
9292
#ifdef _WIN32
93+
/* Translates /tmp/ to %TEMP%\ and copies result back to tmpl.
94+
* Callers MUST use char buf[256] or larger. */
9395
char *cbm_mkdtemp(char *tmpl);
9496
#else
9597
#define cbm_mkdtemp mkdtemp

tests/test_cli.c

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ TEST(cli_version_get_set) {
174174
* ═══════════════════════════════════════════════════════════════════ */
175175

176176
TEST(cli_detect_shell_rc_zsh) {
177-
char tmpdir[] = "/tmp/cli-rc-XXXXXX";
177+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-rc-XXXXXX");
178178
if (!cbm_mkdtemp(tmpdir))
179179
SKIP("cbm_mkdtemp failed");
180180

@@ -197,7 +197,7 @@ TEST(cli_detect_shell_rc_zsh) {
197197
}
198198

199199
TEST(cli_detect_shell_rc_bash) {
200-
char tmpdir[] = "/tmp/cli-rc-XXXXXX";
200+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-rc-XXXXXX");
201201
if (!cbm_mkdtemp(tmpdir))
202202
SKIP("cbm_mkdtemp failed");
203203

@@ -221,7 +221,7 @@ TEST(cli_detect_shell_rc_bash) {
221221

222222
TEST(cli_detect_shell_rc_bash_with_bashrc) {
223223
/* Port of TestDetectShellRC_BashWithBashrc */
224-
char tmpdir[] = "/tmp/cli-rc-XXXXXX";
224+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-rc-XXXXXX");
225225
if (!cbm_mkdtemp(tmpdir))
226226
SKIP("cbm_mkdtemp failed");
227227

@@ -248,7 +248,7 @@ TEST(cli_detect_shell_rc_bash_with_bashrc) {
248248
}
249249

250250
TEST(cli_detect_shell_rc_fish) {
251-
char tmpdir[] = "/tmp/cli-rc-XXXXXX";
251+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-rc-XXXXXX");
252252
if (!cbm_mkdtemp(tmpdir))
253253
SKIP("cbm_mkdtemp failed");
254254

@@ -269,7 +269,7 @@ TEST(cli_detect_shell_rc_fish) {
269269
}
270270

271271
TEST(cli_detect_shell_rc_default) {
272-
char tmpdir[] = "/tmp/cli-rc-XXXXXX";
272+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-rc-XXXXXX");
273273
if (!cbm_mkdtemp(tmpdir))
274274
SKIP("cbm_mkdtemp failed");
275275

@@ -295,7 +295,7 @@ TEST(cli_detect_shell_rc_default) {
295295

296296
TEST(cli_find_cli_not_found) {
297297
/* Port of TestFindCLI_NotFound */
298-
char tmpdir[] = "/tmp/cli-find-XXXXXX";
298+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-find-XXXXXX");
299299
if (!cbm_mkdtemp(tmpdir))
300300
SKIP("cbm_mkdtemp failed");
301301

@@ -316,7 +316,7 @@ TEST(cli_find_cli_not_found) {
316316

317317
TEST(cli_find_cli_on_path) {
318318
/* Port of TestFindCLI_FoundOnPATH */
319-
char tmpdir[] = "/tmp/cli-find-XXXXXX";
319+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-find-XXXXXX");
320320
if (!cbm_mkdtemp(tmpdir))
321321
SKIP("cbm_mkdtemp failed");
322322

@@ -344,7 +344,7 @@ TEST(cli_find_cli_on_path) {
344344

345345
TEST(cli_find_cli_fallback_paths) {
346346
/* Port of TestFindCLI_FallbackPaths */
347-
char tmpdir[] = "/tmp/cli-find-XXXXXX";
347+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-find-XXXXXX");
348348
if (!cbm_mkdtemp(tmpdir))
349349
SKIP("cbm_mkdtemp failed");
350350

@@ -397,7 +397,7 @@ TEST(cli_dry_run_flags) {
397397

398398
TEST(cli_skill_creation) {
399399
/* Port of TestInstallSkillCreation */
400-
char tmpdir[] = "/tmp/cli-skill-XXXXXX";
400+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-skill-XXXXXX");
401401
if (!cbm_mkdtemp(tmpdir))
402402
SKIP("cbm_mkdtemp failed");
403403

@@ -427,7 +427,7 @@ TEST(cli_skill_creation) {
427427

428428
TEST(cli_skill_idempotent) {
429429
/* Port of TestInstallIdempotent */
430-
char tmpdir[] = "/tmp/cli-skill-XXXXXX";
430+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-skill-XXXXXX");
431431
if (!cbm_mkdtemp(tmpdir))
432432
SKIP("cbm_mkdtemp failed");
433433

@@ -456,7 +456,7 @@ TEST(cli_skill_idempotent) {
456456

457457
TEST(cli_skill_force_overwrite) {
458458
/* Port of TestCLI_InstallForceOverwrites */
459-
char tmpdir[] = "/tmp/cli-skill-XXXXXX";
459+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-skill-XXXXXX");
460460
if (!cbm_mkdtemp(tmpdir))
461461
SKIP("cbm_mkdtemp failed");
462462

@@ -475,7 +475,7 @@ TEST(cli_skill_force_overwrite) {
475475

476476
TEST(cli_uninstall_removes_skills) {
477477
/* Port of TestUninstallRemovesSkills */
478-
char tmpdir[] = "/tmp/cli-skill-XXXXXX";
478+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-skill-XXXXXX");
479479
if (!cbm_mkdtemp(tmpdir))
480480
SKIP("cbm_mkdtemp failed");
481481

@@ -501,7 +501,7 @@ TEST(cli_uninstall_removes_skills) {
501501

502502
TEST(cli_remove_old_monolithic_skill) {
503503
/* Port of TestRemoveOldMonolithicSkill */
504-
char tmpdir[] = "/tmp/cli-skill-XXXXXX";
504+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-skill-XXXXXX");
505505
if (!cbm_mkdtemp(tmpdir))
506506
SKIP("cbm_mkdtemp failed");
507507

@@ -580,7 +580,7 @@ TEST(cli_codex_instructions) {
580580

581581
TEST(cli_editor_mcp_install) {
582582
/* Port of TestEditorMCPInstall */
583-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
583+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
584584
if (!cbm_mkdtemp(tmpdir))
585585
SKIP("cbm_mkdtemp failed");
586586

@@ -602,7 +602,7 @@ TEST(cli_editor_mcp_install) {
602602

603603
TEST(cli_editor_mcp_idempotent) {
604604
/* Port of TestEditorMCPInstallIdempotent */
605-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
605+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
606606
if (!cbm_mkdtemp(tmpdir))
607607
SKIP("cbm_mkdtemp failed");
608608

@@ -632,7 +632,7 @@ TEST(cli_editor_mcp_idempotent) {
632632

633633
TEST(cli_editor_mcp_preserves_others) {
634634
/* Port of TestEditorMCPPreservesOtherServers */
635-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
635+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
636636
if (!cbm_mkdtemp(tmpdir))
637637
SKIP("cbm_mkdtemp failed");
638638

@@ -660,7 +660,7 @@ TEST(cli_editor_mcp_preserves_others) {
660660

661661
TEST(cli_editor_mcp_uninstall) {
662662
/* Port of TestEditorMCPUninstall */
663-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
663+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
664664
if (!cbm_mkdtemp(tmpdir))
665665
SKIP("cbm_mkdtemp failed");
666666

@@ -682,7 +682,7 @@ TEST(cli_editor_mcp_uninstall) {
682682

683683
TEST(cli_gemini_mcp_install) {
684684
/* Port of TestGeminiMCPInstall */
685-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
685+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
686686
if (!cbm_mkdtemp(tmpdir))
687687
SKIP("cbm_mkdtemp failed");
688688

@@ -708,7 +708,7 @@ TEST(cli_gemini_mcp_install) {
708708

709709
TEST(cli_vscode_mcp_install) {
710710
/* Port of TestVSCodeMCPInstall */
711-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
711+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
712712
if (!cbm_mkdtemp(tmpdir))
713713
SKIP("cbm_mkdtemp failed");
714714

@@ -732,7 +732,7 @@ TEST(cli_vscode_mcp_install) {
732732

733733
TEST(cli_vscode_mcp_uninstall) {
734734
/* Port of TestVSCodeMCPUninstall */
735-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
735+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
736736
if (!cbm_mkdtemp(tmpdir))
737737
SKIP("cbm_mkdtemp failed");
738738

@@ -757,7 +757,7 @@ TEST(cli_vscode_mcp_uninstall) {
757757

758758
TEST(cli_zed_mcp_install) {
759759
/* Port of TestZedMCPInstall */
760-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
760+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
761761
if (!cbm_mkdtemp(tmpdir))
762762
SKIP("cbm_mkdtemp failed");
763763

@@ -781,7 +781,7 @@ TEST(cli_zed_mcp_install) {
781781

782782
TEST(cli_zed_mcp_preserves_settings) {
783783
/* Port of TestZedMCPPreservesSettings */
784-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
784+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
785785
if (!cbm_mkdtemp(tmpdir))
786786
SKIP("cbm_mkdtemp failed");
787787

@@ -811,7 +811,7 @@ TEST(cli_zed_mcp_preserves_settings) {
811811

812812
TEST(cli_zed_mcp_uninstall) {
813813
/* Port of TestZedMCPUninstall */
814-
char tmpdir[] = "/tmp/cli-mcp-XXXXXX";
814+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-mcp-XXXXXX");
815815
if (!cbm_mkdtemp(tmpdir))
816816
SKIP("cbm_mkdtemp failed");
817817

@@ -836,7 +836,7 @@ TEST(cli_zed_mcp_uninstall) {
836836

837837
TEST(cli_ensure_path_append) {
838838
/* Port of TestCLI_InstallPATHAppend */
839-
char tmpdir[] = "/tmp/cli-path-XXXXXX";
839+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-path-XXXXXX");
840840
if (!cbm_mkdtemp(tmpdir))
841841
SKIP("cbm_mkdtemp failed");
842842

@@ -855,7 +855,7 @@ TEST(cli_ensure_path_append) {
855855
}
856856

857857
TEST(cli_ensure_path_already_present) {
858-
char tmpdir[] = "/tmp/cli-path-XXXXXX";
858+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-path-XXXXXX");
859859
if (!cbm_mkdtemp(tmpdir))
860860
SKIP("cbm_mkdtemp failed");
861861

@@ -871,7 +871,7 @@ TEST(cli_ensure_path_already_present) {
871871
}
872872

873873
TEST(cli_ensure_path_dry_run) {
874-
char tmpdir[] = "/tmp/cli-path-XXXXXX";
874+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-path-XXXXXX");
875875
if (!cbm_mkdtemp(tmpdir))
876876
SKIP("cbm_mkdtemp failed");
877877

@@ -896,7 +896,7 @@ TEST(cli_ensure_path_dry_run) {
896896

897897
TEST(cli_copy_file) {
898898
/* Port of TestCopyFile */
899-
char tmpdir[] = "/tmp/cli-copy-XXXXXX";
899+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-copy-XXXXXX");
900900
if (!cbm_mkdtemp(tmpdir))
901901
SKIP("cbm_mkdtemp failed");
902902

@@ -918,7 +918,7 @@ TEST(cli_copy_file) {
918918

919919
TEST(cli_copy_file_source_not_found) {
920920
/* Port of TestCopyFile_SourceNotFound */
921-
char tmpdir[] = "/tmp/cli-copy-XXXXXX";
921+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-copy-XXXXXX");
922922
if (!cbm_mkdtemp(tmpdir))
923923
SKIP("cbm_mkdtemp failed");
924924

@@ -988,7 +988,7 @@ TEST(cli_extract_binary_from_targz_invalid_data) {
988988

989989
TEST(cli_install_dry_run) {
990990
/* Port of TestCLI_InstallDryRun */
991-
char tmpdir[] = "/tmp/cli-dry-XXXXXX";
991+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-dry-XXXXXX");
992992
if (!cbm_mkdtemp(tmpdir))
993993
SKIP("cbm_mkdtemp failed");
994994

@@ -1013,7 +1013,7 @@ TEST(cli_install_dry_run) {
10131013

10141014
TEST(cli_uninstall_dry_run) {
10151015
/* Port of TestCLI_UninstallDryRun */
1016-
char tmpdir[] = "/tmp/cli-dry-XXXXXX";
1016+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-dry-XXXXXX");
10171017
if (!cbm_mkdtemp(tmpdir))
10181018
SKIP("cbm_mkdtemp failed");
10191019

@@ -1043,7 +1043,7 @@ TEST(cli_uninstall_dry_run) {
10431043

10441044
TEST(cli_install_and_uninstall) {
10451045
/* Port of TestCLI_InstallAndUninstall */
1046-
char tmpdir[] = "/tmp/cli-full-XXXXXX";
1046+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/cli-full-XXXXXX");
10471047
if (!cbm_mkdtemp(tmpdir))
10481048
SKIP("cbm_mkdtemp failed");
10491049

tests/test_httplink.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ TEST(httplink_load_config_default) {
549549

550550
TEST(httplink_load_config_from_file) {
551551
/* Create temp dir with .cgrconfig */
552-
char tmpdir[] = "/tmp/httplink-cfg-XXXXXX";
552+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/httplink-cfg-XXXXXX");
553553
if (!cbm_mkdtemp(tmpdir))
554554
SKIP("cbm_mkdtemp failed");
555555

@@ -589,7 +589,7 @@ TEST(httplink_load_config_from_file) {
589589

590590
TEST(httplink_load_config_invalid_yaml) {
591591
/* Invalid YAML → fallback to defaults */
592-
char tmpdir[] = "/tmp/httplink-bad-XXXXXX";
592+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/httplink-bad-XXXXXX");
593593
if (!cbm_mkdtemp(tmpdir))
594594
SKIP("cbm_mkdtemp failed");
595595

@@ -719,7 +719,7 @@ TEST(httplink_route_extraction_negative_cases) {
719719

720720
TEST(httplink_read_source_lines) {
721721
/* Create temp dir with test file */
722-
char tmpdir[] = "/tmp/httplink-test-XXXXXX";
722+
char tmpdir[256]; snprintf(tmpdir, sizeof(tmpdir), "/tmp/httplink-test-XXXXXX");
723723
if (!cbm_mkdtemp(tmpdir)) {
724724
printf(" SKIP: cbm_mkdtemp failed\n");
725725
return -1;

0 commit comments

Comments
 (0)