lib/dirs: abort loudly on over-long path, not silent truncation (#69)
dirs build() capped the composed path at the 256B pathbuf with a silent break, so a HOME (or XDG_*) near/over ~240 bytes produced a truncated path that lookup() then mkdir'd and returned rc=0 — a silently-wrong, freshly-created directory. ref/hare/dirs/xdg.ha routes through path::set/push whose too_long error the `!` aborts loudly. Precompute the composition length in build() and rt_abort when it won't fit; drop the now-dead silent caps. (Shape (a); routing dirs through lib/path is the filed fidelity follow-up.) 975_dirs_toolong_run pins the abort + no-stray-dir on both driver twins.
This commit is contained in:
11
Makefile
11
Makefile
@@ -517,6 +517,7 @@ TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
||||
$(BIN)/test_attest_record \
|
||||
$(BIN)/test_fmt_run $(BIN)/test_log_run $(BIN)/test_fnmatch_run \
|
||||
$(BIN)/test_shlex_run $(BIN)/test_getenv_run $(BIN)/test_dirs_run \
|
||||
$(BIN)/test_dirs_toolong_run \
|
||||
$(BIN)/test_stat_run $(BIN)/test_time_run \
|
||||
$(BIN)/test_intdiv_signed \
|
||||
$(BIN)/test_strings_run \
|
||||
@@ -2683,6 +2684,16 @@ $(BIN)/test_dirs_run: test/wcc/975_dirs_run.c $(BIN)/ww $(BIN)/w6c \
|
||||
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
# 975_dirs_toolong_run (F14 #69): an over-long composed path must abort
|
||||
# loudly, not silently mkdir a truncated wrong directory. Builds+runs a
|
||||
# dirs.config fixture on BOTH driver twins under a short and a ~260B HOME.
|
||||
$(BIN)/test_dirs_toolong_run: test/wcc/975_dirs_toolong_run.c \
|
||||
$(BIN)/ww $(BIN)/ww_ww \
|
||||
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
||||
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_stat_run: test/wcc/976_stat_run.c $(BIN)/ww $(BIN)/w6c \
|
||||
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
Reference in New Issue
Block a user