@@ -142,13 +142,37 @@ EOF_SENSITIVE_NAME_MAIN
142142cat > " $SENSITIVE_NAME_DIR /credentials.txt" << 'EOF_SENSITIVE_NAME_SECRET '
143143plain text but sensitive by filename
144144EOF_SENSITIVE_NAME_SECRET
145+ cat > " $SENSITIVE_NAME_DIR /.envrc" << 'EOF_SENSITIVE_NAME_ENVRC '
146+ export TOKEN=1
147+ EOF_SENSITIVE_NAME_ENVRC
148+ cat > " $SENSITIVE_NAME_DIR /credentials-prod.txt" << 'EOF_SENSITIVE_NAME_CREDENTIALS_DASH '
149+ prod credentials
150+ EOF_SENSITIVE_NAME_CREDENTIALS_DASH
151+ cat > " $SENSITIVE_NAME_DIR /secret_backup" << 'EOF_SENSITIVE_NAME_SECRET_BACKUP '
152+ backup secret
153+ EOF_SENSITIVE_NAME_SECRET_BACKUP
154+ cat > " $SENSITIVE_NAME_DIR /id_rsa_backup" << 'EOF_SENSITIVE_NAME_ID_RSA_BACKUP '
155+ backup ssh key
156+ EOF_SENSITIVE_NAME_ID_RSA_BACKUP
145157(cd " $SENSITIVE_NAME_DIR " && " $BIN " --no-git -o - > sensitive_name_stdout.txt 2> " $TMPDIR /sensitive_name_stderr.txt" )
146158assert_contains " $SENSITIVE_NAME_DIR /sensitive_name_stdout.txt" " ## main.c"
147159assert_not_contains " $SENSITIVE_NAME_DIR /sensitive_name_stdout.txt" " credentials.txt"
160+ assert_not_contains " $SENSITIVE_NAME_DIR /sensitive_name_stdout.txt" " .envrc"
161+ assert_not_contains " $SENSITIVE_NAME_DIR /sensitive_name_stdout.txt" " credentials-prod.txt"
162+ assert_not_contains " $SENSITIVE_NAME_DIR /sensitive_name_stdout.txt" " secret_backup"
163+ assert_not_contains " $SENSITIVE_NAME_DIR /sensitive_name_stdout.txt" " id_rsa_backup"
148164assert_contains " $TMPDIR /sensitive_name_stderr.txt" " Warning: Skipping sensitive file ./credentials.txt"
165+ assert_contains " $TMPDIR /sensitive_name_stderr.txt" " Warning: Skipping sensitive file ./.envrc"
166+ assert_contains " $TMPDIR /sensitive_name_stderr.txt" " Warning: Skipping sensitive file ./credentials-prod.txt"
167+ assert_contains " $TMPDIR /sensitive_name_stderr.txt" " Warning: Skipping sensitive file ./secret_backup"
168+ assert_contains " $TMPDIR /sensitive_name_stderr.txt" " Warning: Skipping sensitive file ./id_rsa_backup"
149169
150170(cd " $SENSITIVE_NAME_DIR " && " $BIN " --no-git --allow-sensitive -o - > sensitive_name_allow_stdout.txt 2> " $TMPDIR /sensitive_name_allow_stderr.txt" )
151171assert_contains " $SENSITIVE_NAME_DIR /sensitive_name_allow_stdout.txt" " ## credentials.txt"
172+ assert_contains " $SENSITIVE_NAME_DIR /sensitive_name_allow_stdout.txt" " ## .envrc"
173+ assert_contains " $SENSITIVE_NAME_DIR /sensitive_name_allow_stdout.txt" " ## credentials-prod.txt"
174+ assert_contains " $SENSITIVE_NAME_DIR /sensitive_name_allow_stdout.txt" " ## secret_backup"
175+ assert_contains " $SENSITIVE_NAME_DIR /sensitive_name_allow_stdout.txt" " ## id_rsa_backup"
152176assert_not_contains " $TMPDIR /sensitive_name_allow_stderr.txt" " Warning: Skipping sensitive file"
153177
154178SENSITIVE_CONTENT_DIR=" $TMPDIR /sensitive_content"
@@ -254,6 +278,23 @@ if [ "$(id -u)" -ne 0 ]; then
254278 assert_contains " $PERM_DIR /permission_stderr.txt" " Warning: Failed to process file ./private.txt"
255279fi
256280
281+ UNREADABLE_DIR=" $TMPDIR /unreadable_directory"
282+ mkdir -p " $UNREADABLE_DIR /blocked"
283+ cat > " $UNREADABLE_DIR /main.c" << 'EOF_UNREADABLE_DIR_MAIN '
284+ int main(void) { return 0; }
285+ EOF_UNREADABLE_DIR_MAIN
286+ cat > " $UNREADABLE_DIR /blocked/hidden.c" << 'EOF_UNREADABLE_DIR_HIDDEN '
287+ int hidden(void) { return 0; }
288+ EOF_UNREADABLE_DIR_HIDDEN
289+ if [ " $( id -u) " -ne 0 ]; then
290+ chmod 000 " $UNREADABLE_DIR /blocked"
291+ (cd " $UNREADABLE_DIR " && " $BIN " --no-git --no-tree -o - > unreadable_dir_stdout.txt 2> unreadable_dir_stderr.txt)
292+ chmod 700 " $UNREADABLE_DIR /blocked"
293+ assert_contains " $UNREADABLE_DIR /unreadable_dir_stdout.txt" " ## main.c"
294+ assert_not_contains " $UNREADABLE_DIR /unreadable_dir_stdout.txt" " hidden.c"
295+ assert_contains " $UNREADABLE_DIR /unreadable_dir_stderr.txt" " Warning: Failed to process directory ./blocked"
296+ fi
297+
257298ODD_DIR=" $TMPDIR /odd_paths"
258299mkdir -p " $ODD_DIR "
259300cat > " $ODD_DIR /main.c" << 'EOF_ODD_MAIN '
@@ -403,6 +444,12 @@ assert_contains "$STDIN_DIR/stdin_spaces_newline_stdout.txt" "## file with space
403444printf ' file with spaces.txt\0' | (cd " $STDIN_DIR " && " $BIN " --from-stdin --null --no-tree -o - > stdin_spaces_null_stdout.txt 2> stdin_spaces_null_stderr.txt)
404445assert_contains " $STDIN_DIR /stdin_spaces_null_stdout.txt" " ## file with spaces.txt"
405446
447+ ABS_STDIN_PATH=$( cd " $STDIN_DIR " && pwd) /alpha.c
448+ printf ' %s\n' " $ABS_STDIN_PATH " | (cd " $STDIN_DIR " && " $BIN " --from-stdin -o - > stdin_absolute_stdout.txt 2> stdin_absolute_stderr.txt)
449+ assert_contains " $STDIN_DIR /stdin_absolute_stdout.txt" " ## $ABS_STDIN_PATH "
450+ assert_contains " $STDIN_DIR /stdin_absolute_stdout.txt" " └── /"
451+ assert_contains " $STDIN_DIR /stdin_absolute_stdout.txt" " └── alpha.c"
452+
406453printf ' beta.c\nalpha.c\n' | (cd " $STDIN_DIR " && " $BIN " --from-stdin --no-tree -o - > stdin_order_stdout.txt 2> stdin_order_stderr.txt)
407454first_heading=$( grep ' ^## ' " $STDIN_DIR /stdin_order_stdout.txt" | head -n 1)
408455if [ " $first_heading " != " ## alpha.c" ]; then
0 commit comments