{"thread":{"id":"45642","subject":"[PATCH 0/2] test: Detect *lots* of bugs by adding non-alnum to trash dir names","startedAt":"2017-04-09T19:11:38Z","lastAt":"2017-04-19T10:59:38Z","messageCount":25,"participants":["Ævar Arnfjörð Bjarmason","Joachim Durchholz","SZEDER Gábor","Jeff King","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"316445","messageId":"20170409191117.25175-1-avarab@gmail.com","threadId":"45642","inReplyTo":null,"subject":"[PATCH 0/2] test: Detect *lots* of bugs by adding non-alnum to trash dir names","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-09T19:11:15Z","receivedAt":"2017-04-09T19:11:38Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"There's a patch now on the ML for an issue with read v.s. read -r in\nsubmodule revealed when the submodule name contains a \\.\n\nThat fix is fine, but we should do better and structurally arrange our\ntests to detect these sorts of issues before they're reported.\n\nThis series changes the test library so that we interpolate the result\nof:\n\n    perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f'\n\nInto the trash directory name we generate. Doing this makes 30% of the\ntest suite fail. Most of the diffstat below is just adding:\n\n    test_fails_on_unusual_directory_names=1\n\nTo those tests that failed, which makes them not use these garbage\ntrash directory names.\n\nSome of those failures are legitimate bugs, some are an artifact of us\nusing shellscripting as our test language (namely interpolating ' and\n\" somewhere).\n\nIt might make sense to mark these tests more granularly, e.g.:\n\n    test_fails_on_unusual_directory_name_types=quotes\n\netc., if the test fails just because of \" or ', but I think as it is\nthis makes sense for inclusion, it makes sure we don't regress on the\nremaining 70% of our test suite.\n\nÆvar Arnfjörð Bjarmason (2):\n  tests: mark tests that fail when the TEST_DIRECTORY is unusual\n  test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY\n    name\n\n t/README                                         | 12 ++++++++++++\n t/t0000-basic.sh                                 |  2 ++\n t/t0003-attributes.sh                            |  1 +\n t/t0021-conversion.sh                            |  1 +\n t/t0060-path-utils.sh                            |  1 +\n t/t0300-credentials.sh                           |  1 +\n t/t0302-credential-store.sh                      |  1 +\n t/t1006-cat-file.sh                              |  1 +\n t/t1013-read-tree-submodule.sh                   |  1 +\n t/t1020-subdirectory.sh                          |  1 +\n t/t1050-large.sh                                 |  1 +\n t/t1060-object-corruption.sh                     |  1 +\n t/t1300-repo-config.sh                           |  1 +\n t/t1305-config-include.sh                        |  1 +\n t/t1308-config-set.sh                            |  1 +\n t/t1309-early-config.sh                          |  1 +\n t/t1500-rev-parse.sh                             |  1 +\n t/t1504-ceiling-dirs.sh                          |  1 +\n t/t1507-rev-parse-upstream.sh                    |  1 +\n t/t1510-repo-setup.sh                            |  1 +\n t/t1515-rev-parse-outside-repo.sh                |  1 +\n t/t2013-checkout-submodule.sh                    |  1 +\n t/t2025-worktree-add.sh                          |  1 +\n t/t2027-worktree-list.sh                         |  1 +\n t/t2028-worktree-move.sh                         |  1 +\n t/t3040-subprojects-basic.sh                     |  1 +\n t/t3050-subprojects-fetch.sh                     |  1 +\n t/t3409-rebase-preserve-merges.sh                |  1 +\n t/t3426-rebase-submodule.sh                      |  1 +\n t/t3501-revert-cherry-pick.sh                    |  1 +\n t/t3512-cherry-pick-submodule.sh                 |  1 +\n t/t3513-revert-submodule.sh                      |  1 +\n t/t3600-rm.sh                                    |  1 +\n t/t3900-i18n-commit.sh                           |  1 +\n t/t3906-stash-submodule.sh                       |  1 +\n t/t4027-diff-submodule.sh                        |  1 +\n t/t4030-diff-textconv.sh                         |  1 +\n t/t4031-diff-rewrite-binary.sh                   |  1 +\n t/t4035-diff-quiet.sh                            |  1 +\n t/t4041-diff-submodule-option.sh                 |  1 +\n t/t4059-diff-submodule-not-initialized.sh        |  1 +\n t/t4060-diff-submodule-option-diff-format.sh     |  1 +\n t/t4137-apply-submodule.sh                       |  1 +\n t/t4203-mailmap.sh                               |  1 +\n t/t4207-log-decoration-colors.sh                 |  1 +\n t/t4255-am-submodule.sh                          |  1 +\n t/t5000-tar-tree.sh                              |  1 +\n t/t5001-archive-attr.sh                          |  1 +\n t/t5002-archive-attr-pattern.sh                  |  1 +\n t/t5003-archive-zip.sh                           |  1 +\n t/t5150-request-pull.sh                          |  1 +\n t/t5300-pack-object.sh                           |  1 +\n t/t5304-prune.sh                                 |  1 +\n t/t5305-include-tag.sh                           |  1 +\n t/t5306-pack-nobase.sh                           |  1 +\n t/t5310-pack-bitmaps.sh                          |  1 +\n t/t5311-pack-bitmaps-shallow.sh                  |  1 +\n t/t5400-send-pack.sh                             |  1 +\n t/t5401-update-hooks.sh                          |  1 +\n t/t5402-post-merge-hook.sh                       |  1 +\n t/t5403-post-checkout-hook.sh                    |  1 +\n t/t5404-tracking-branches.sh                     |  1 +\n t/t5406-remote-rejects.sh                        |  1 +\n t/t5407-post-rewrite-hook.sh                     |  1 +\n t/t5500-fetch-pack.sh                            |  1 +\n t/t5501-fetch-push-alternates.sh                 |  1 +\n t/t5502-quickfetch.sh                            |  1 +\n t/t5505-remote.sh                                |  1 +\n t/t5509-fetch-push-namespaces.sh                 |  1 +\n t/t5510-fetch.sh                                 |  1 +\n t/t5512-ls-remote.sh                             |  1 +\n t/t5514-fetch-multiple.sh                        |  1 +\n t/t5515-fetch-merge-logic.sh                     |  1 +\n t/t5516-fetch-push.sh                            |  1 +\n t/t5519-push-alternates.sh                       |  1 +\n t/t5520-pull.sh                                  |  1 +\n t/t5521-pull-options.sh                          |  1 +\n t/t5522-pull-symlink.sh                          |  1 +\n t/t5524-pull-msg.sh                              |  1 +\n t/t5525-fetch-tagopt.sh                          |  1 +\n t/t5526-fetch-submodules.sh                      |  1 +\n t/t5527-fetch-odd-refs.sh                        |  1 +\n t/t5531-deep-submodule-push.sh                   |  1 +\n t/t5533-push-cas.sh                              |  1 +\n t/t5535-fetch-push-symref.sh                     |  1 +\n t/t5536-fetch-conflicts.sh                       |  1 +\n t/t5537-fetch-shallow.sh                         |  1 +\n t/t5538-push-shallow.sh                          |  1 +\n t/t5539-fetch-http-shallow.sh                    |  1 +\n t/t5540-http-push-webdav.sh                      |  1 +\n t/t5541-http-push-smart.sh                       |  1 +\n t/t5542-push-http-shallow.sh                     |  1 +\n t/t5544-pack-objects-hook.sh                     |  1 +\n t/t5545-push-options.sh                          |  1 +\n t/t5547-push-quarantine.sh                       |  1 +\n t/t5550-http-fetch-dumb.sh                       |  1 +\n t/t5551-http-fetch-smart.sh                      |  1 +\n t/t5560-http-backend-noserver.sh                 |  1 +\n t/t5561-http-backend.sh                          |  1 +\n t/t5570-git-daemon.sh                            |  1 +\n t/t5572-pull-submodule.sh                        |  1 +\n t/t5600-clone-fail-cleanup.sh                    |  1 +\n t/t5601-clone.sh                                 |  1 +\n t/t5604-clone-reference.sh                       |  1 +\n t/t5605-clone-local.sh                           |  1 +\n t/t5606-clone-options.sh                         |  1 +\n t/t5609-clone-branch.sh                          |  1 +\n t/t5610-clone-detached.sh                        |  1 +\n t/t5611-clone-config.sh                          |  1 +\n t/t5612-clone-refspec.sh                         |  1 +\n t/t5613-info-alternate.sh                        |  1 +\n t/t5614-clone-submodules.sh                      |  1 +\n t/t5615-alternate-env.sh                         |  1 +\n t/t5801-remote-helpers.sh                        |  1 +\n t/t5802-connect-helper.sh                        |  1 +\n t/t5810-proto-disable-local.sh                   |  1 +\n t/t5812-proto-disable-http.sh                    |  1 +\n t/t5813-proto-disable-ssh.sh                     |  1 +\n t/t5814-proto-disable-ext.sh                     |  1 +\n t/t5815-submodule-protos.sh                      |  1 +\n t/t5900-repo-selection.sh                        |  1 +\n t/t6008-rev-list-submodule.sh                    |  1 +\n t/t6030-bisect-porcelain.sh                      |  1 +\n t/t6040-tracking-info.sh                         |  1 +\n t/t6041-bisect-submodule.sh                      |  1 +\n t/t6050-replace.sh                               |  1 +\n t/t6060-merge-index.sh                           |  1 +\n t/t6134-pathspec-in-submodule.sh                 |  1 +\n t/t6200-fmt-merge-msg.sh                         |  1 +\n t/t6500-gc.sh                                    |  1 +\n t/t7001-mv.sh                                    |  1 +\n t/t7003-filter-branch.sh                         |  1 +\n t/t7005-editor.sh                                |  1 +\n t/t7006-pager.sh                                 |  1 +\n t/t7008-grep-binary.sh                           |  1 +\n t/t7010-setup.sh                                 |  1 +\n t/t7064-wtstatus-pv2.sh                          |  1 +\n t/t7103-reset-bare.sh                            |  1 +\n t/t7112-reset-submodule.sh                       |  1 +\n t/t7300-clean.sh                                 |  1 +\n t/t7400-submodule-basic.sh                       |  1 +\n t/t7402-submodule-rebase.sh                      |  1 +\n t/t7403-submodule-sync.sh                        |  1 +\n t/t7405-submodule-merge.sh                       |  1 +\n t/t7406-submodule-update.sh                      |  1 +\n t/t7407-submodule-foreach.sh                     |  1 +\n t/t7408-submodule-reference.sh                   |  1 +\n t/t7409-submodule-detached-work-tree.sh          |  1 +\n t/t7410-submodule-checkout-to.sh                 |  1 +\n t/t7411-submodule-config.sh                      |  1 +\n t/t7413-submodule-is-active.sh                   |  1 +\n t/t7504-commit-msg-hook.sh                       |  1 +\n t/t7506-status-submodule.sh                      |  1 +\n t/t7507-commit-verbose.sh                        |  1 +\n t/t7517-per-repo-email.sh                        |  1 +\n t/t7613-merge-submodule.sh                       |  1 +\n t/t7700-repack.sh                                |  1 +\n t/t7800-difftool.sh                              |  1 +\n t/t7810-grep.sh                                  |  1 +\n t/t7814-grep-recurse-submodules.sh               |  1 +\n t/t9001-send-email.sh                            |  1 +\n t/t9020-remote-svn.sh                            |  1 +\n t/t9100-git-svn-basic.sh                         |  1 +\n t/t9101-git-svn-props.sh                         |  1 +\n t/t9102-git-svn-deep-rmdir.sh                    |  1 +\n t/t9103-git-svn-tracked-directory-removed.sh     |  1 +\n t/t9104-git-svn-follow-parent.sh                 |  1 +\n t/t9105-git-svn-commit-diff.sh                   |  1 +\n t/t9106-git-svn-commit-diff-clobber.sh           |  1 +\n t/t9107-git-svn-migrate.sh                       |  1 +\n t/t9108-git-svn-glob.sh                          |  1 +\n t/t9109-git-svn-multi-glob.sh                    |  1 +\n t/t9110-git-svn-use-svm-props.sh                 |  1 +\n t/t9114-git-svn-dcommit-merge.sh                 |  1 +\n t/t9115-git-svn-dcommit-funky-renames.sh         |  1 +\n t/t9116-git-svn-log.sh                           |  1 +\n t/t9117-git-svn-init-clone.sh                    |  1 +\n t/t9118-git-svn-funky-branch-names.sh            |  1 +\n t/t9120-git-svn-clone-with-percent-escapes.sh    |  1 +\n t/t9122-git-svn-author.sh                        |  1 +\n t/t9123-git-svn-rebuild-with-rewriteroot.sh      |  1 +\n t/t9124-git-svn-dcommit-auto-props.sh            |  1 +\n t/t9125-git-svn-multi-glob-branch-names.sh       |  1 +\n t/t9127-git-svn-partial-rebuild.sh               |  1 +\n t/t9128-git-svn-cmd-branch.sh                    |  1 +\n t/t9129-git-svn-i18n-commitencoding.sh           |  1 +\n t/t9131-git-svn-empty-symlink.sh                 |  1 +\n t/t9132-git-svn-broken-symlink.sh                |  1 +\n t/t9133-git-svn-nested-git-repo.sh               |  1 +\n t/t9134-git-svn-ignore-paths.sh                  |  1 +\n t/t9137-git-svn-dcommit-clobber-series.sh        |  1 +\n t/t9138-git-svn-authors-prog.sh                  |  1 +\n t/t9140-git-svn-reset.sh                         |  1 +\n t/t9141-git-svn-multiple-branches.sh             |  1 +\n t/t9142-git-svn-shallow-clone.sh                 |  1 +\n t/t9143-git-svn-gc.sh                            |  1 +\n t/t9144-git-svn-old-rev_map.sh                   |  1 +\n t/t9145-git-svn-master-branch.sh                 |  1 +\n t/t9146-git-svn-empty-dirs.sh                    |  1 +\n t/t9147-git-svn-include-paths.sh                 |  1 +\n t/t9148-git-svn-propset.sh                       |  1 +\n t/t9150-svk-mergetickets.sh                      |  1 +\n t/t9151-svn-mergeinfo.sh                         |  1 +\n t/t9153-git-svn-rewrite-uuid.sh                  |  1 +\n t/t9154-git-svn-fancy-glob.sh                    |  1 +\n t/t9155-git-svn-fetch-deleted-tag.sh             |  1 +\n t/t9156-git-svn-fetch-deleted-tag-2.sh           |  1 +\n t/t9157-git-svn-fetch-merge.sh                   |  1 +\n t/t9158-git-svn-mergeinfo.sh                     |  1 +\n t/t9159-git-svn-no-parent-mergeinfo.sh           |  1 +\n t/t9160-git-svn-preserve-empty-dirs.sh           |  1 +\n t/t9161-git-svn-mergeinfo-push.sh                |  1 +\n t/t9162-git-svn-dcommit-interactive.sh           |  1 +\n t/t9163-git-svn-reset-clears-caches.sh           |  1 +\n t/t9164-git-svn-dcommit-concurrent.sh            |  1 +\n t/t9165-git-svn-fetch-merge-branch-of-branch.sh  |  1 +\n t/t9166-git-svn-fetch-merge-branch-of-branch2.sh |  1 +\n t/t9167-git-svn-cmd-branch-subproject.sh         |  1 +\n t/t9168-git-svn-partially-globbed-names.sh       |  1 +\n t/t9200-git-cvsexportcommit.sh                   |  1 +\n t/t9300-fast-import.sh                           |  1 +\n t/t9350-fast-export.sh                           |  1 +\n t/t9400-git-cvsserver-server.sh                  |  1 +\n t/t9401-git-cvsserver-crlf.sh                    |  1 +\n t/t9402-git-cvsserver-refs.sh                    |  1 +\n t/t9500-gitweb-standalone-no-errors.sh           |  1 +\n t/t9502-gitweb-standalone-parse-output.sh        |  1 +\n t/t9600-cvsimport.sh                             |  1 +\n t/t9601-cvsimport-vendor-branch.sh               |  1 +\n t/t9602-cvsimport-branches-tags.sh               |  1 +\n t/t9604-cvsimport-timestamps.sh                  |  1 +\n t/t9700-perl-git.sh                              |  1 +\n t/t9902-completion.sh                            |  1 +\n t/test-lib.sh                                    |  4 ++++\n 234 files changed, 249 insertions(+)\n\n-- \n2.11.0\n\n"},{"id":"316446","messageId":"20170409191117.25175-2-avarab@gmail.com","threadId":"45642","inReplyTo":"20170409191117.25175-1-avarab@gmail.com","subject":"[PATCH 1/2] tests: mark tests that fail when the TEST_DIRECTORY is unusual","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-09T19:11:16Z","receivedAt":"2017-04-09T19:11:45Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"Mark tests that fail when the TEST_DIRECTORY has a name that's\nunusual, i.e. contains control characters, various punctuation etc.\n\nThis change is followed by a change that adds the code that picks up\ntest_fails_on_unusual_directory_names to test-lib.sh, but comes before\nthat change to not break most of the test suite during bisecting.\n\nThis change is the result of:\n\n    for f in $(grep -B3 last_fail_time .prove |grep sh | perl -pe 's/^  (.*?):/$1/');\n        do perl -0666 -pi -e 's/^(test_description)/test_fails_on_unusual_directory_names=1\\n$1/m' $f\n    done\n\nAfter running the test suite with the aforementioned change to\ntest-lib.sh. The only exception is t0000-basic.sh, since its testing\nthe test suite itself its failing 'test --verbose' test needs a change\nto the test suite wrapper code to be excluded.\n\nSigned-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n---\n t/t0000-basic.sh                                 | 2 ++\n t/t0003-attributes.sh                            | 1 +\n t/t0021-conversion.sh                            | 1 +\n t/t0060-path-utils.sh                            | 1 +\n t/t0300-credentials.sh                           | 1 +\n t/t0302-credential-store.sh                      | 1 +\n t/t1006-cat-file.sh                              | 1 +\n t/t1013-read-tree-submodule.sh                   | 1 +\n t/t1020-subdirectory.sh                          | 1 +\n t/t1050-large.sh                                 | 1 +\n t/t1060-object-corruption.sh                     | 1 +\n t/t1300-repo-config.sh                           | 1 +\n t/t1305-config-include.sh                        | 1 +\n t/t1308-config-set.sh                            | 1 +\n t/t1309-early-config.sh                          | 1 +\n t/t1500-rev-parse.sh                             | 1 +\n t/t1504-ceiling-dirs.sh                          | 1 +\n t/t1507-rev-parse-upstream.sh                    | 1 +\n t/t1510-repo-setup.sh                            | 1 +\n t/t1515-rev-parse-outside-repo.sh                | 1 +\n t/t2013-checkout-submodule.sh                    | 1 +\n t/t2025-worktree-add.sh                          | 1 +\n t/t2027-worktree-list.sh                         | 1 +\n t/t2028-worktree-move.sh                         | 1 +\n t/t3040-subprojects-basic.sh                     | 1 +\n t/t3050-subprojects-fetch.sh                     | 1 +\n t/t3409-rebase-preserve-merges.sh                | 1 +\n t/t3426-rebase-submodule.sh                      | 1 +\n t/t3501-revert-cherry-pick.sh                    | 1 +\n t/t3512-cherry-pick-submodule.sh                 | 1 +\n t/t3513-revert-submodule.sh                      | 1 +\n t/t3600-rm.sh                                    | 1 +\n t/t3900-i18n-commit.sh                           | 1 +\n t/t3906-stash-submodule.sh                       | 1 +\n t/t4027-diff-submodule.sh                        | 1 +\n t/t4030-diff-textconv.sh                         | 1 +\n t/t4031-diff-rewrite-binary.sh                   | 1 +\n t/t4035-diff-quiet.sh                            | 1 +\n t/t4041-diff-submodule-option.sh                 | 1 +\n t/t4059-diff-submodule-not-initialized.sh        | 1 +\n t/t4060-diff-submodule-option-diff-format.sh     | 1 +\n t/t4137-apply-submodule.sh                       | 1 +\n t/t4203-mailmap.sh                               | 1 +\n t/t4207-log-decoration-colors.sh                 | 1 +\n t/t4255-am-submodule.sh                          | 1 +\n t/t5000-tar-tree.sh                              | 1 +\n t/t5001-archive-attr.sh                          | 1 +\n t/t5002-archive-attr-pattern.sh                  | 1 +\n t/t5003-archive-zip.sh                           | 1 +\n t/t5150-request-pull.sh                          | 1 +\n t/t5300-pack-object.sh                           | 1 +\n t/t5304-prune.sh                                 | 1 +\n t/t5305-include-tag.sh                           | 1 +\n t/t5306-pack-nobase.sh                           | 1 +\n t/t5310-pack-bitmaps.sh                          | 1 +\n t/t5311-pack-bitmaps-shallow.sh                  | 1 +\n t/t5400-send-pack.sh                             | 1 +\n t/t5401-update-hooks.sh                          | 1 +\n t/t5402-post-merge-hook.sh                       | 1 +\n t/t5403-post-checkout-hook.sh                    | 1 +\n t/t5404-tracking-branches.sh                     | 1 +\n t/t5406-remote-rejects.sh                        | 1 +\n t/t5407-post-rewrite-hook.sh                     | 1 +\n t/t5500-fetch-pack.sh                            | 1 +\n t/t5501-fetch-push-alternates.sh                 | 1 +\n t/t5502-quickfetch.sh                            | 1 +\n t/t5505-remote.sh                                | 1 +\n t/t5509-fetch-push-namespaces.sh                 | 1 +\n t/t5510-fetch.sh                                 | 1 +\n t/t5512-ls-remote.sh                             | 1 +\n t/t5514-fetch-multiple.sh                        | 1 +\n t/t5515-fetch-merge-logic.sh                     | 1 +\n t/t5516-fetch-push.sh                            | 1 +\n t/t5519-push-alternates.sh                       | 1 +\n t/t5520-pull.sh                                  | 1 +\n t/t5521-pull-options.sh                          | 1 +\n t/t5522-pull-symlink.sh                          | 1 +\n t/t5524-pull-msg.sh                              | 1 +\n t/t5525-fetch-tagopt.sh                          | 1 +\n t/t5526-fetch-submodules.sh                      | 1 +\n t/t5527-fetch-odd-refs.sh                        | 1 +\n t/t5531-deep-submodule-push.sh                   | 1 +\n t/t5533-push-cas.sh                              | 1 +\n t/t5535-fetch-push-symref.sh                     | 1 +\n t/t5536-fetch-conflicts.sh                       | 1 +\n t/t5537-fetch-shallow.sh                         | 1 +\n t/t5538-push-shallow.sh                          | 1 +\n t/t5539-fetch-http-shallow.sh                    | 1 +\n t/t5540-http-push-webdav.sh                      | 1 +\n t/t5541-http-push-smart.sh                       | 1 +\n t/t5542-push-http-shallow.sh                     | 1 +\n t/t5544-pack-objects-hook.sh                     | 1 +\n t/t5545-push-options.sh                          | 1 +\n t/t5547-push-quarantine.sh                       | 1 +\n t/t5550-http-fetch-dumb.sh                       | 1 +\n t/t5551-http-fetch-smart.sh                      | 1 +\n t/t5560-http-backend-noserver.sh                 | 1 +\n t/t5561-http-backend.sh                          | 1 +\n t/t5570-git-daemon.sh                            | 1 +\n t/t5572-pull-submodule.sh                        | 1 +\n t/t5600-clone-fail-cleanup.sh                    | 1 +\n t/t5601-clone.sh                                 | 1 +\n t/t5604-clone-reference.sh                       | 1 +\n t/t5605-clone-local.sh                           | 1 +\n t/t5606-clone-options.sh                         | 1 +\n t/t5609-clone-branch.sh                          | 1 +\n t/t5610-clone-detached.sh                        | 1 +\n t/t5611-clone-config.sh                          | 1 +\n t/t5612-clone-refspec.sh                         | 1 +\n t/t5613-info-alternate.sh                        | 1 +\n t/t5614-clone-submodules.sh                      | 1 +\n t/t5615-alternate-env.sh                         | 1 +\n t/t5801-remote-helpers.sh                        | 1 +\n t/t5802-connect-helper.sh                        | 1 +\n t/t5810-proto-disable-local.sh                   | 1 +\n t/t5812-proto-disable-http.sh                    | 1 +\n t/t5813-proto-disable-ssh.sh                     | 1 +\n t/t5814-proto-disable-ext.sh                     | 1 +\n t/t5815-submodule-protos.sh                      | 1 +\n t/t5900-repo-selection.sh                        | 1 +\n t/t6008-rev-list-submodule.sh                    | 1 +\n t/t6030-bisect-porcelain.sh                      | 1 +\n t/t6040-tracking-info.sh                         | 1 +\n t/t6041-bisect-submodule.sh                      | 1 +\n t/t6050-replace.sh                               | 1 +\n t/t6060-merge-index.sh                           | 1 +\n t/t6134-pathspec-in-submodule.sh                 | 1 +\n t/t6200-fmt-merge-msg.sh                         | 1 +\n t/t6500-gc.sh                                    | 1 +\n t/t7001-mv.sh                                    | 1 +\n t/t7003-filter-branch.sh                         | 1 +\n t/t7005-editor.sh                                | 1 +\n t/t7006-pager.sh                                 | 1 +\n t/t7008-grep-binary.sh                           | 1 +\n t/t7010-setup.sh                                 | 1 +\n t/t7064-wtstatus-pv2.sh                          | 1 +\n t/t7103-reset-bare.sh                            | 1 +\n t/t7112-reset-submodule.sh                       | 1 +\n t/t7300-clean.sh                                 | 1 +\n t/t7400-submodule-basic.sh                       | 1 +\n t/t7402-submodule-rebase.sh                      | 1 +\n t/t7403-submodule-sync.sh                        | 1 +\n t/t7405-submodule-merge.sh                       | 1 +\n t/t7406-submodule-update.sh                      | 1 +\n t/t7407-submodule-foreach.sh                     | 1 +\n t/t7408-submodule-reference.sh                   | 1 +\n t/t7409-submodule-detached-work-tree.sh          | 1 +\n t/t7410-submodule-checkout-to.sh                 | 1 +\n t/t7411-submodule-config.sh                      | 1 +\n t/t7413-submodule-is-active.sh                   | 1 +\n t/t7504-commit-msg-hook.sh                       | 1 +\n t/t7506-status-submodule.sh                      | 1 +\n t/t7507-commit-verbose.sh                        | 1 +\n t/t7517-per-repo-email.sh                        | 1 +\n t/t7613-merge-submodule.sh                       | 1 +\n t/t7700-repack.sh                                | 1 +\n t/t7800-difftool.sh                              | 1 +\n t/t7810-grep.sh                                  | 1 +\n t/t7814-grep-recurse-submodules.sh               | 1 +\n t/t9001-send-email.sh                            | 1 +\n t/t9020-remote-svn.sh                            | 1 +\n t/t9100-git-svn-basic.sh                         | 1 +\n t/t9101-git-svn-props.sh                         | 1 +\n t/t9102-git-svn-deep-rmdir.sh                    | 1 +\n t/t9103-git-svn-tracked-directory-removed.sh     | 1 +\n t/t9104-git-svn-follow-parent.sh                 | 1 +\n t/t9105-git-svn-commit-diff.sh                   | 1 +\n t/t9106-git-svn-commit-diff-clobber.sh           | 1 +\n t/t9107-git-svn-migrate.sh                       | 1 +\n t/t9108-git-svn-glob.sh                          | 1 +\n t/t9109-git-svn-multi-glob.sh                    | 1 +\n t/t9110-git-svn-use-svm-props.sh                 | 1 +\n t/t9114-git-svn-dcommit-merge.sh                 | 1 +\n t/t9115-git-svn-dcommit-funky-renames.sh         | 1 +\n t/t9116-git-svn-log.sh                           | 1 +\n t/t9117-git-svn-init-clone.sh                    | 1 +\n t/t9118-git-svn-funky-branch-names.sh            | 1 +\n t/t9120-git-svn-clone-with-percent-escapes.sh    | 1 +\n t/t9122-git-svn-author.sh                        | 1 +\n t/t9123-git-svn-rebuild-with-rewriteroot.sh      | 1 +\n t/t9124-git-svn-dcommit-auto-props.sh            | 1 +\n t/t9125-git-svn-multi-glob-branch-names.sh       | 1 +\n t/t9127-git-svn-partial-rebuild.sh               | 1 +\n t/t9128-git-svn-cmd-branch.sh                    | 1 +\n t/t9129-git-svn-i18n-commitencoding.sh           | 1 +\n t/t9131-git-svn-empty-symlink.sh                 | 1 +\n t/t9132-git-svn-broken-symlink.sh                | 1 +\n t/t9133-git-svn-nested-git-repo.sh               | 1 +\n t/t9134-git-svn-ignore-paths.sh                  | 1 +\n t/t9137-git-svn-dcommit-clobber-series.sh        | 1 +\n t/t9138-git-svn-authors-prog.sh                  | 1 +\n t/t9140-git-svn-reset.sh                         | 1 +\n t/t9141-git-svn-multiple-branches.sh             | 1 +\n t/t9142-git-svn-shallow-clone.sh                 | 1 +\n t/t9143-git-svn-gc.sh                            | 1 +\n t/t9144-git-svn-old-rev_map.sh                   | 1 +\n t/t9145-git-svn-master-branch.sh                 | 1 +\n t/t9146-git-svn-empty-dirs.sh                    | 1 +\n t/t9147-git-svn-include-paths.sh                 | 1 +\n t/t9148-git-svn-propset.sh                       | 1 +\n t/t9150-svk-mergetickets.sh                      | 1 +\n t/t9151-svn-mergeinfo.sh                         | 1 +\n t/t9153-git-svn-rewrite-uuid.sh                  | 1 +\n t/t9154-git-svn-fancy-glob.sh                    | 1 +\n t/t9155-git-svn-fetch-deleted-tag.sh             | 1 +\n t/t9156-git-svn-fetch-deleted-tag-2.sh           | 1 +\n t/t9157-git-svn-fetch-merge.sh                   | 1 +\n t/t9158-git-svn-mergeinfo.sh                     | 1 +\n t/t9159-git-svn-no-parent-mergeinfo.sh           | 1 +\n t/t9160-git-svn-preserve-empty-dirs.sh           | 1 +\n t/t9161-git-svn-mergeinfo-push.sh                | 1 +\n t/t9162-git-svn-dcommit-interactive.sh           | 1 +\n t/t9163-git-svn-reset-clears-caches.sh           | 1 +\n t/t9164-git-svn-dcommit-concurrent.sh            | 1 +\n t/t9165-git-svn-fetch-merge-branch-of-branch.sh  | 1 +\n t/t9166-git-svn-fetch-merge-branch-of-branch2.sh | 1 +\n t/t9167-git-svn-cmd-branch-subproject.sh         | 1 +\n t/t9168-git-svn-partially-globbed-names.sh       | 1 +\n t/t9200-git-cvsexportcommit.sh                   | 1 +\n t/t9300-fast-import.sh                           | 1 +\n t/t9350-fast-export.sh                           | 1 +\n t/t9400-git-cvsserver-server.sh                  | 1 +\n t/t9401-git-cvsserver-crlf.sh                    | 1 +\n t/t9402-git-cvsserver-refs.sh                    | 1 +\n t/t9500-gitweb-standalone-no-errors.sh           | 1 +\n t/t9502-gitweb-standalone-parse-output.sh        | 1 +\n t/t9600-cvsimport.sh                             | 1 +\n t/t9601-cvsimport-vendor-branch.sh               | 1 +\n t/t9602-cvsimport-branches-tags.sh               | 1 +\n t/t9604-cvsimport-timestamps.sh                  | 1 +\n t/t9700-perl-git.sh                              | 1 +\n t/t9902-completion.sh                            | 1 +\n 232 files changed, 233 insertions(+)\n\ndiff --git a/t/t0000-basic.sh b/t/t0000-basic.sh\nindex 1aa5093f36..8afda030a5 100755\n--- a/t/t0000-basic.sh\n+++ b/t/t0000-basic.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2005 Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test the very basics part #1.\n \n The rest of the test suite does not check the basic operation of git\n@@ -56,6 +57,7 @@ _run_sub_test_lib_test_common () {\n \t\tcat >\"$name.sh\" <<-EOF &&\n \t\t#!$SHELL_PATH\n \n+\t\ttest_fails_on_unusual_directory_names=1\n \t\ttest_description='$descr (run in sub test-lib)\n \n \t\tThis is run in a sub test-lib so that we do not get incorrect\ndiff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh\nindex f19ae4f8cc..812f25f8e9 100755\n--- a/t/t0003-attributes.sh\n+++ b/t/t0003-attributes.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description=gitattributes\n \n . ./test-lib.sh\ndiff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\nindex 161f560446..c1db6d6136 100755\n--- a/t/t0021-conversion.sh\n+++ b/t/t0021-conversion.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='blob conversion via gitattributes'\n \n . ./test-lib.sh\ndiff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh\nindex 444b5a4df8..a53195102f 100755\n--- a/t/t0060-path-utils.sh\n+++ b/t/t0060-path-utils.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 David Reiss\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test various path utilities'\n \n . ./test-lib.sh\ndiff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh\nindex 03bd31e9f2..f4814096a5 100755\n--- a/t/t0300-credentials.sh\n+++ b/t/t0300-credentials.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='basic credential helper tests'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/lib-credential.sh\ndiff --git a/t/t0302-credential-store.sh b/t/t0302-credential-store.sh\nindex 1d8d1f210b..d066f4cb1a 100755\n--- a/t/t0302-credential-store.sh\n+++ b/t/t0302-credential-store.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='credential-store tests'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/lib-credential.sh\ndiff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh\nindex b19f332694..2e7bb356ac 100755\n--- a/t/t1006-cat-file.sh\n+++ b/t/t1006-cat-file.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git cat-file'\n \n . ./test-lib.sh\ndiff --git a/t/t1013-read-tree-submodule.sh b/t/t1013-read-tree-submodule.sh\nindex de1ba02dc5..8228c05775 100755\n--- a/t/t1013-read-tree-submodule.sh\n+++ b/t/t1013-read-tree-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='read-tree can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t1020-subdirectory.sh b/t/t1020-subdirectory.sh\nindex df3183ea1a..b9c5513f8a 100755\n--- a/t/t1020-subdirectory.sh\n+++ b/t/t1020-subdirectory.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Try various core-level commands in subdirectory.\n '\n \ndiff --git a/t/t1050-large.sh b/t/t1050-large.sh\nindex 6fd264cff0..7b058a3941 100755\n--- a/t/t1050-large.sh\n+++ b/t/t1050-large.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n # Copyright (c) 2011, Google Inc.\n \n+test_fails_on_unusual_directory_names=1\n test_description='adding and checking out large blobs'\n \n . ./test-lib.sh\ndiff --git a/t/t1060-object-corruption.sh b/t/t1060-object-corruption.sh\nindex 3f8705139d..ab53e96d5c 100755\n--- a/t/t1060-object-corruption.sh\n+++ b/t/t1060-object-corruption.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='see how we handle various forms of corruption'\n . ./test-lib.sh\n \ndiff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh\nindex afcca0d52c..2a4ca101a9 100755\n--- a/t/t1300-repo-config.sh\n+++ b/t/t1300-repo-config.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2005 Johannes Schindelin\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test git config in different settings'\n \n . ./test-lib.sh\ndiff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh\nindex e833939320..f03fda78f0 100755\n--- a/t/t1305-config-include.sh\n+++ b/t/t1305-config-include.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test config file include directives'\n . ./test-lib.sh\n \ndiff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh\nindex ff50960cca..449a0e3440 100755\n--- a/t/t1308-config-set.sh\n+++ b/t/t1308-config-set.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test git config-set API in different settings'\n \n . ./test-lib.sh\ndiff --git a/t/t1309-early-config.sh b/t/t1309-early-config.sh\nindex b97357b8ab..99267db020 100755\n--- a/t/t1309-early-config.sh\n+++ b/t/t1309-early-config.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test read_early_config()'\n \n . ./test-lib.sh\ndiff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh\nindex 03d3c7f6d6..50c4a6edf5 100755\n--- a/t/t1500-rev-parse.sh\n+++ b/t/t1500-rev-parse.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git rev-parse'\n . ./test-lib.sh\n \ndiff --git a/t/t1504-ceiling-dirs.sh b/t/t1504-ceiling-dirs.sh\nindex 3d51615e42..fc20a947ed 100755\n--- a/t/t1504-ceiling-dirs.sh\n+++ b/t/t1504-ceiling-dirs.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test GIT_CEILING_DIRECTORIES'\n . ./test-lib.sh\n \ndiff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh\nindex b23c4e3fab..dd08e4d251 100755\n--- a/t/t1507-rev-parse-upstream.sh\n+++ b/t/t1507-rev-parse-upstream.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test <branch>@{upstream} syntax'\n \n . ./test-lib.sh\ndiff --git a/t/t1510-repo-setup.sh b/t/t1510-repo-setup.sh\nindex 13ae12dfa7..192bd3d822 100755\n--- a/t/t1510-repo-setup.sh\n+++ b/t/t1510-repo-setup.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description=\"Tests of cwd/prefix/worktree/gitdir setup in all cases\n \n A few rules for repo setup:\ndiff --git a/t/t1515-rev-parse-outside-repo.sh b/t/t1515-rev-parse-outside-repo.sh\nindex 3ec2971ee5..0641651612 100755\n--- a/t/t1515-rev-parse-outside-repo.sh\n+++ b/t/t1515-rev-parse-outside-repo.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='check that certain rev-parse options work outside repo'\n . ./test-lib.sh\n \ndiff --git a/t/t2013-checkout-submodule.sh b/t/t2013-checkout-submodule.sh\nindex e8f70b806f..94d7033009 100755\n--- a/t/t2013-checkout-submodule.sh\n+++ b/t/t2013-checkout-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='checkout can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t2025-worktree-add.sh b/t/t2025-worktree-add.sh\nindex b618d6be21..bd0d4633cc 100755\n--- a/t/t2025-worktree-add.sh\n+++ b/t/t2025-worktree-add.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git worktree add'\n \n . ./test-lib.sh\ndiff --git a/t/t2027-worktree-list.sh b/t/t2027-worktree-list.sh\nindex 848da5f368..7b5e802f71 100755\n--- a/t/t2027-worktree-list.sh\n+++ b/t/t2027-worktree-list.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git worktree list'\n \n . ./test-lib.sh\ndiff --git a/t/t2028-worktree-move.sh b/t/t2028-worktree-move.sh\nindex 8298aaf97f..4577add799 100755\n--- a/t/t2028-worktree-move.sh\n+++ b/t/t2028-worktree-move.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git worktree move, remove, lock and unlock'\n \n . ./test-lib.sh\ndiff --git a/t/t3040-subprojects-basic.sh b/t/t3040-subprojects-basic.sh\nindex 0a4ff6d824..0acf434539 100755\n--- a/t/t3040-subprojects-basic.sh\n+++ b/t/t3040-subprojects-basic.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Basic subproject functionality'\n . ./test-lib.sh\n \ndiff --git a/t/t3050-subprojects-fetch.sh b/t/t3050-subprojects-fetch.sh\nindex 2f5f41a012..452c5fb615 100755\n--- a/t/t3050-subprojects-fetch.sh\n+++ b/t/t3050-subprojects-fetch.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetching and pushing project with subproject'\n \n . ./test-lib.sh\ndiff --git a/t/t3409-rebase-preserve-merges.sh b/t/t3409-rebase-preserve-merges.sh\nindex 8c251c57a6..9ce4749fe6 100755\n--- a/t/t3409-rebase-preserve-merges.sh\n+++ b/t/t3409-rebase-preserve-merges.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright(C) 2008 Stephen Habermann & Andreas Ericsson\n #\n+test_fails_on_unusual_directory_names=1\n test_description='git rebase -p should preserve merges\n \n Run \"git rebase -p\" and check that merges are properly carried along\ndiff --git a/t/t3426-rebase-submodule.sh b/t/t3426-rebase-submodule.sh\nindex ebf4f5e4b2..3c39d4cdf0 100755\n--- a/t/t3426-rebase-submodule.sh\n+++ b/t/t3426-rebase-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='rebase can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t3501-revert-cherry-pick.sh b/t/t3501-revert-cherry-pick.sh\nindex 4f2a263b63..b8547afe5e 100755\n--- a/t/t3501-revert-cherry-pick.sh\n+++ b/t/t3501-revert-cherry-pick.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test cherry-pick and revert with renames\n \n   --\ndiff --git a/t/t3512-cherry-pick-submodule.sh b/t/t3512-cherry-pick-submodule.sh\nindex 6863b7bb6f..37929530a9 100755\n--- a/t/t3512-cherry-pick-submodule.sh\n+++ b/t/t3512-cherry-pick-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='cherry-pick can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t3513-revert-submodule.sh b/t/t3513-revert-submodule.sh\nindex db9378142a..980ce5233d 100755\n--- a/t/t3513-revert-submodule.sh\n+++ b/t/t3513-revert-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='revert can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t3600-rm.sh b/t/t3600-rm.sh\nindex 3c63455729..1df9b1b5f5 100755\n--- a/t/t3600-rm.sh\n+++ b/t/t3600-rm.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Carl D. Worth\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test of the various options to git rm.'\n \n . ./test-lib.sh\ndiff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh\nindex 3b94283e35..f3af7bd2db 100755\n--- a/t/t3900-i18n-commit.sh\n+++ b/t/t3900-i18n-commit.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='commit and log output encodings'\n \n . ./test-lib.sh\ndiff --git a/t/t3906-stash-submodule.sh b/t/t3906-stash-submodule.sh\nindex d7219d6f8f..4d4d386342 100755\n--- a/t/t3906-stash-submodule.sh\n+++ b/t/t3906-stash-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='stash apply can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t4027-diff-submodule.sh b/t/t4027-diff-submodule.sh\nindex 518bf9524e..f7c146b125 100755\n--- a/t/t4027-diff-submodule.sh\n+++ b/t/t4027-diff-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='difference in submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t4030-diff-textconv.sh b/t/t4030-diff-textconv.sh\nindex aad6c7f78d..74ba69efe4 100755\n--- a/t/t4030-diff-textconv.sh\n+++ b/t/t4030-diff-textconv.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='diff.*.textconv tests'\n . ./test-lib.sh\n \ndiff --git a/t/t4031-diff-rewrite-binary.sh b/t/t4031-diff-rewrite-binary.sh\nindex eacc6694f7..01f37948ae 100755\n--- a/t/t4031-diff-rewrite-binary.sh\n+++ b/t/t4031-diff-rewrite-binary.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='rewrite diff on binary file'\n \n . ./test-lib.sh\ndiff --git a/t/t4035-diff-quiet.sh b/t/t4035-diff-quiet.sh\nindex 2f1737fcef..8353b05934 100755\n--- a/t/t4035-diff-quiet.sh\n+++ b/t/t4035-diff-quiet.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Return value of diffs'\n \n . ./test-lib.sh\ndiff --git a/t/t4041-diff-submodule-option.sh b/t/t4041-diff-submodule-option.sh\nindex 2d9731b52d..48163e8736 100755\n--- a/t/t4041-diff-submodule-option.sh\n+++ b/t/t4041-diff-submodule-option.sh\n@@ -4,6 +4,7 @@\n # Copyright (c) 2011 Alexey Shumkin (+ non-UTF-8 commit encoding tests)\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Support for verbose submodule differences in git diff\n \n This test tries to verify the sanity of the --submodule option of git diff.\ndiff --git a/t/t4059-diff-submodule-not-initialized.sh b/t/t4059-diff-submodule-not-initialized.sh\nindex cd70fd5192..42d846a40f 100755\n--- a/t/t4059-diff-submodule-not-initialized.sh\n+++ b/t/t4059-diff-submodule-not-initialized.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2016 Jacob Keller, based on t4041 by Jens Lehmann\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test for submodule diff on non-checked out submodule\n \n This test tries to verify that add_submodule_odb works when the submodule was\ndiff --git a/t/t4060-diff-submodule-option-diff-format.sh b/t/t4060-diff-submodule-option-diff-format.sh\nindex 7e23b55ea4..dd3a932816 100755\n--- a/t/t4060-diff-submodule-option-diff-format.sh\n+++ b/t/t4060-diff-submodule-option-diff-format.sh\n@@ -5,6 +5,7 @@\n # Copyright (c) 2016 Jacob Keller (copy + convert to --submodule=diff)\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Support for diff format verbose submodule difference in git diff\n \n This test tries to verify the sanity of --submodule=diff option of git diff.\ndiff --git a/t/t4137-apply-submodule.sh b/t/t4137-apply-submodule.sh\nindex a9bd40a6d0..f9943ff9a9 100755\n--- a/t/t4137-apply-submodule.sh\n+++ b/t/t4137-apply-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git apply handling submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh\nindex 0dd8b65d7c..7a7ee7127c 100755\n--- a/t/t4203-mailmap.sh\n+++ b/t/t4203-mailmap.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='.mailmap configurations'\n \n . ./test-lib.sh\ndiff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh\nindex b972296f06..fb504b2c72 100755\n--- a/t/t4207-log-decoration-colors.sh\n+++ b/t/t4207-log-decoration-colors.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Nazri Ramliy\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test for \"git log --decorate\" colors'\n \n . ./test-lib.sh\ndiff --git a/t/t4255-am-submodule.sh b/t/t4255-am-submodule.sh\nindex 0ba8194403..da8c9a7ae5 100755\n--- a/t/t4255-am-submodule.sh\n+++ b/t/t4255-am-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git am handling submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t5000-tar-tree.sh b/t/t5000-tar-tree.sh\nindex 886b6953e4..abe58c54f8 100755\n--- a/t/t5000-tar-tree.sh\n+++ b/t/t5000-tar-tree.sh\n@@ -3,6 +3,7 @@\n # Copyright (C) 2005 Rene Scharfe\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git archive and git get-tar-commit-id test\n \n This test covers the topics of file contents, commit date handling and\ndiff --git a/t/t5001-archive-attr.sh b/t/t5001-archive-attr.sh\nindex b04d955bfa..ba7de4e9b0 100755\n--- a/t/t5001-archive-attr.sh\n+++ b/t/t5001-archive-attr.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git archive attribute tests'\n \n . ./test-lib.sh\ndiff --git a/t/t5002-archive-attr-pattern.sh b/t/t5002-archive-attr-pattern.sh\nindex 6667d159ab..acf6937e0f 100755\n--- a/t/t5002-archive-attr-pattern.sh\n+++ b/t/t5002-archive-attr-pattern.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git archive attribute pattern tests'\n \n . ./test-lib.sh\ndiff --git a/t/t5003-archive-zip.sh b/t/t5003-archive-zip.sh\nindex 55c7870997..19d58df57e 100755\n--- a/t/t5003-archive-zip.sh\n+++ b/t/t5003-archive-zip.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git archive --format=zip test'\n \n . ./test-lib.sh\ndiff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh\nindex 82c33b88e7..581c65dc95 100755\n--- a/t/t5150-request-pull.sh\n+++ b/t/t5150-request-pull.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test workflows involving pull request.'\n \n . ./test-lib.sh\ndiff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh\nindex 43a672c345..9e473489b7 100755\n--- a/t/t5300-pack-object.sh\n+++ b/t/t5300-pack-object.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2005 Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git pack-object\n \n '\ndiff --git a/t/t5304-prune.sh b/t/t5304-prune.sh\nindex 133b5842b1..5b5242977b 100755\n--- a/t/t5304-prune.sh\n+++ b/t/t5304-prune.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Johannes E. Schindelin\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='prune'\n . ./test-lib.sh\n \ndiff --git a/t/t5305-include-tag.sh b/t/t5305-include-tag.sh\nindex a5eca210b8..d4ada345ee 100755\n--- a/t/t5305-include-tag.sh\n+++ b/t/t5305-include-tag.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git pack-object --include-tag'\n . ./test-lib.sh\n \ndiff --git a/t/t5306-pack-nobase.sh b/t/t5306-pack-nobase.sh\nindex f4931c0c2a..6fcb7ab75d 100755\n--- a/t/t5306-pack-nobase.sh\n+++ b/t/t5306-pack-nobase.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Google Inc.\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-pack-object with missing base\n \n '\ndiff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh\nindex 424bec7d77..dca58299e1 100755\n--- a/t/t5310-pack-bitmaps.sh\n+++ b/t/t5310-pack-bitmaps.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='exercise basic bitmap functionality'\n . ./test-lib.sh\n \ndiff --git a/t/t5311-pack-bitmaps-shallow.sh b/t/t5311-pack-bitmaps-shallow.sh\nindex 872a95df33..33d724fd52 100755\n--- a/t/t5311-pack-bitmaps-shallow.sh\n+++ b/t/t5311-pack-bitmaps-shallow.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='check bitmap operation with shallow repositories'\n . ./test-lib.sh\n \ndiff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh\nindex 3331e0f534..12cb482300 100755\n--- a/t/t5400-send-pack.sh\n+++ b/t/t5400-send-pack.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2005 Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='See why rewinding head breaks send-pack\n \n '\ndiff --git a/t/t5401-update-hooks.sh b/t/t5401-update-hooks.sh\nindex 7f278d8ce9..eba223cbfe 100755\n--- a/t/t5401-update-hooks.sh\n+++ b/t/t5401-update-hooks.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Shawn O. Pearce\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test the update hook infrastructure.'\n . ./test-lib.sh\n \ndiff --git a/t/t5402-post-merge-hook.sh b/t/t5402-post-merge-hook.sh\nindex 6eb2ffd6ec..993db78d1f 100755\n--- a/t/t5402-post-merge-hook.sh\n+++ b/t/t5402-post-merge-hook.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Josh England\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test the post-merge hook.'\n . ./test-lib.sh\n \ndiff --git a/t/t5403-post-checkout-hook.sh b/t/t5403-post-checkout-hook.sh\nindex fc898c9eac..e925973651 100755\n--- a/t/t5403-post-checkout-hook.sh\n+++ b/t/t5403-post-checkout-hook.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Josh England\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test the post-checkout hook.'\n . ./test-lib.sh\n \ndiff --git a/t/t5404-tracking-branches.sh b/t/t5404-tracking-branches.sh\nindex 2b8c0bac7d..4174d6d5a3 100755\n--- a/t/t5404-tracking-branches.sh\n+++ b/t/t5404-tracking-branches.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='tracking branch update checks for git push'\n \n . ./test-lib.sh\ndiff --git a/t/t5406-remote-rejects.sh b/t/t5406-remote-rejects.sh\nindex 59e80a5ea2..1ac17e8dad 100755\n--- a/t/t5406-remote-rejects.sh\n+++ b/t/t5406-remote-rejects.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='remote push rejects are reported by client'\n \n . ./test-lib.sh\ndiff --git a/t/t5407-post-rewrite-hook.sh b/t/t5407-post-rewrite-hook.sh\nindex 7a48236e87..9458295279 100755\n--- a/t/t5407-post-rewrite-hook.sh\n+++ b/t/t5407-post-rewrite-hook.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Thomas Rast\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test the post-rewrite hook.'\n . ./test-lib.sh\n \ndiff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh\nindex b5865b385d..29233cae2a 100755\n--- a/t/t5500-fetch-pack.sh\n+++ b/t/t5500-fetch-pack.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2005 Johannes Schindelin\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Testing multi_ack pack fetching'\n \n . ./test-lib.sh\ndiff --git a/t/t5501-fetch-push-alternates.sh b/t/t5501-fetch-push-alternates.sh\nindex 1bc57ac03f..01d121b8d7 100755\n--- a/t/t5501-fetch-push-alternates.sh\n+++ b/t/t5501-fetch-push-alternates.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetch/push involving alternates'\n . ./test-lib.sh\n \ndiff --git a/t/t5502-quickfetch.sh b/t/t5502-quickfetch.sh\nindex 7a46cbdbe6..44ec47cc4a 100755\n--- a/t/t5502-quickfetch.sh\n+++ b/t/t5502-quickfetch.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test quickfetch from local'\n \n . ./test-lib.sh\ndiff --git a/t/t5505-remote.sh b/t/t5505-remote.sh\nindex a6c0178f3a..3019f37519 100755\n--- a/t/t5505-remote.sh\n+++ b/t/t5505-remote.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git remote porcelain-ish'\n \n . ./test-lib.sh\ndiff --git a/t/t5509-fetch-push-namespaces.sh b/t/t5509-fetch-push-namespaces.sh\nindex 75c570adca..556d3f3dc9 100755\n--- a/t/t5509-fetch-push-namespaces.sh\n+++ b/t/t5509-fetch-push-namespaces.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetch/push involving ref namespaces'\n . ./test-lib.sh\n \ndiff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh\nindex 668c54be41..c0d632361e 100755\n--- a/t/t5510-fetch.sh\n+++ b/t/t5510-fetch.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n # Copyright (c) 2006, Junio C Hamano.\n \n+test_fails_on_unusual_directory_names=1\n test_description='Per branch config variables affects \"git fetch\".\n \n '\ndiff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh\nindex 94fc9be9ce..b69c0314c5 100755\n--- a/t/t5512-ls-remote.sh\n+++ b/t/t5512-ls-remote.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git ls-remote'\n \n . ./test-lib.sh\ndiff --git a/t/t5514-fetch-multiple.sh b/t/t5514-fetch-multiple.sh\nindex 4b4b6673b8..6e14245225 100755\n--- a/t/t5514-fetch-multiple.sh\n+++ b/t/t5514-fetch-multiple.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetch --all works correctly'\n \n . ./test-lib.sh\ndiff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh\nindex 36b0dbc01c..c388a08312 100755\n--- a/t/t5515-fetch-merge-logic.sh\n+++ b/t/t5515-fetch-merge-logic.sh\n@@ -4,6 +4,7 @@\n #\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Merge logic in fetch'\n \n . ./test-lib.sh\ndiff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh\nindex 177897ea0b..0c251b8f86 100755\n--- a/t/t5516-fetch-push.sh\n+++ b/t/t5516-fetch-push.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Basic fetch/push functionality.\n \n This test checks the following functionality:\ndiff --git a/t/t5519-push-alternates.sh b/t/t5519-push-alternates.sh\nindex 11fcd37700..6ff22e245b 100755\n--- a/t/t5519-push-alternates.sh\n+++ b/t/t5519-push-alternates.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='push to a repository that borrows from elsewhere'\n \n . ./test-lib.sh\ndiff --git a/t/t5520-pull.sh b/t/t5520-pull.sh\nindex 17f4d0fe4e..04b7c5281d 100755\n--- a/t/t5520-pull.sh\n+++ b/t/t5520-pull.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='pulling into void'\n \n . ./test-lib.sh\ndiff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh\nindex ded8f98dbe..dd6b7675b8 100755\n--- a/t/t5521-pull-options.sh\n+++ b/t/t5521-pull-options.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='pull options'\n \n . ./test-lib.sh\ndiff --git a/t/t5522-pull-symlink.sh b/t/t5522-pull-symlink.sh\nindex bcff460d0a..d84115b081 100755\n--- a/t/t5522-pull-symlink.sh\n+++ b/t/t5522-pull-symlink.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='pulling from symlinked subdir'\n \n . ./test-lib.sh\ndiff --git a/t/t5524-pull-msg.sh b/t/t5524-pull-msg.sh\nindex c278adaa5a..b86b431205 100755\n--- a/t/t5524-pull-msg.sh\n+++ b/t/t5524-pull-msg.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git pull message generation'\n \n . ./test-lib.sh\ndiff --git a/t/t5525-fetch-tagopt.sh b/t/t5525-fetch-tagopt.sh\nindex 45815f7378..85d387a9e5 100755\n--- a/t/t5525-fetch-tagopt.sh\n+++ b/t/t5525-fetch-tagopt.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='tagopt variable affects \"git fetch\" and is overridden by commandline.'\n \n . ./test-lib.sh\ndiff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh\nindex f3b0a8d30a..fe48eee142 100755\n--- a/t/t5526-fetch-submodules.sh\n+++ b/t/t5526-fetch-submodules.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n # Copyright (c) 2010, Jens Lehmann\n \n+test_fails_on_unusual_directory_names=1\n test_description='Recursive \"git fetch\" for submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t5527-fetch-odd-refs.sh b/t/t5527-fetch-odd-refs.sh\nindex 207899a99f..cc61c6e66a 100755\n--- a/t/t5527-fetch-odd-refs.sh\n+++ b/t/t5527-fetch-odd-refs.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test fetching of oddly-named refs'\n . ./test-lib.sh\n \ndiff --git a/t/t5531-deep-submodule-push.sh b/t/t5531-deep-submodule-push.sh\nindex f55137f76f..8a9f17ce6f 100755\n--- a/t/t5531-deep-submodule-push.sh\n+++ b/t/t5531-deep-submodule-push.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='unpack-objects'\n \n . ./test-lib.sh\ndiff --git a/t/t5533-push-cas.sh b/t/t5533-push-cas.sh\nindex a2c9e7439f..9490b77c7d 100755\n--- a/t/t5533-push-cas.sh\n+++ b/t/t5533-push-cas.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='compare & swap push force/delete safety'\n \n . ./test-lib.sh\ndiff --git a/t/t5535-fetch-push-symref.sh b/t/t5535-fetch-push-symref.sh\nindex 8ed58d27f2..2542b20cfd 100755\n--- a/t/t5535-fetch-push-symref.sh\n+++ b/t/t5535-fetch-push-symref.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='avoiding conflicting update thru symref aliasing'\n \n . ./test-lib.sh\ndiff --git a/t/t5536-fetch-conflicts.sh b/t/t5536-fetch-conflicts.sh\nindex 2e42cf3316..806dce27a0 100755\n--- a/t/t5536-fetch-conflicts.sh\n+++ b/t/t5536-fetch-conflicts.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetch handles conflicting refspecs correctly'\n \n . ./test-lib.sh\ndiff --git a/t/t5537-fetch-shallow.sh b/t/t5537-fetch-shallow.sh\nindex df8d2f095a..d7c7110dab 100755\n--- a/t/t5537-fetch-shallow.sh\n+++ b/t/t5537-fetch-shallow.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetch/clone from a shallow clone'\n \n . ./test-lib.sh\ndiff --git a/t/t5538-push-shallow.sh b/t/t5538-push-shallow.sh\nindex ecbf84d21c..452be015b6 100755\n--- a/t/t5538-push-shallow.sh\n+++ b/t/t5538-push-shallow.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='push from/to a shallow clone'\n \n . ./test-lib.sh\ndiff --git a/t/t5539-fetch-http-shallow.sh b/t/t5539-fetch-http-shallow.sh\nindex 5fbf67c446..5d325c1cd9 100755\n--- a/t/t5539-fetch-http-shallow.sh\n+++ b/t/t5539-fetch-http-shallow.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='fetch/clone from a shallow clone over http'\n \n . ./test-lib.sh\ndiff --git a/t/t5540-http-push-webdav.sh b/t/t5540-http-push-webdav.sh\nindex 88ff5a49e4..3815ce69d6 100755\n--- a/t/t5540-http-push-webdav.sh\n+++ b/t/t5540-http-push-webdav.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test WebDAV http-push\n \n This test runs various sanity checks on http-push.'\ndiff --git a/t/t5541-http-push-smart.sh b/t/t5541-http-push-smart.sh\nindex d38bf32470..6420c7aacb 100755\n--- a/t/t5541-http-push-smart.sh\n+++ b/t/t5541-http-push-smart.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test smart pushing over http via http-backend'\n . ./test-lib.sh\n \ndiff --git a/t/t5542-push-http-shallow.sh b/t/t5542-push-http-shallow.sh\nindex 5165833157..9aa0935f2b 100755\n--- a/t/t5542-push-http-shallow.sh\n+++ b/t/t5542-push-http-shallow.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='push from/to a shallow clone over http'\n \n . ./test-lib.sh\ndiff --git a/t/t5544-pack-objects-hook.sh b/t/t5544-pack-objects-hook.sh\nindex 4357af1525..f18b35a15d 100755\n--- a/t/t5544-pack-objects-hook.sh\n+++ b/t/t5544-pack-objects-hook.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test custom script in place of pack-objects'\n . ./test-lib.sh\n \ndiff --git a/t/t5545-push-options.sh b/t/t5545-push-options.sh\nindex 97065e62b8..cd6786b6a8 100755\n--- a/t/t5545-push-options.sh\n+++ b/t/t5545-push-options.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='pushing to a repository using push options'\n \n . ./test-lib.sh\ndiff --git a/t/t5547-push-quarantine.sh b/t/t5547-push-quarantine.sh\nindex af9fcd833a..6acbcac2dc 100755\n--- a/t/t5547-push-quarantine.sh\n+++ b/t/t5547-push-quarantine.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='check quarantine of objects during push'\n . ./test-lib.sh\n \ndiff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh\nindex 87308cdced..94e7ca60bc 100755\n--- a/t/t5550-http-fetch-dumb.sh\n+++ b/t/t5550-http-fetch-dumb.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test dumb fetching over http via static file'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/lib-httpd.sh\ndiff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh\nindex a51b7e20d3..205aa47852 100755\n--- a/t/t5551-http-fetch-smart.sh\n+++ b/t/t5551-http-fetch-smart.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test smart fetching over http via http-backend'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/lib-httpd.sh\ndiff --git a/t/t5560-http-backend-noserver.sh b/t/t5560-http-backend-noserver.sh\nindex 9fafcf1945..8b7f814aa9 100755\n--- a/t/t5560-http-backend-noserver.sh\n+++ b/t/t5560-http-backend-noserver.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git-http-backend-noserver'\n . ./test-lib.sh\n \ndiff --git a/t/t5561-http-backend.sh b/t/t5561-http-backend.sh\nindex 90e0d6f0fe..756ccd604b 100755\n--- a/t/t5561-http-backend.sh\n+++ b/t/t5561-http-backend.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git-http-backend'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/lib-httpd.sh\ndiff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh\nindex 225a022e8a..1827225e93 100755\n--- a/t/t5570-git-daemon.sh\n+++ b/t/t5570-git-daemon.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test fetching over git protocol'\n . ./test-lib.sh\n \ndiff --git a/t/t5572-pull-submodule.sh b/t/t5572-pull-submodule.sh\nindex accfa5cc0c..c7fdce9666 100755\n--- a/t/t5572-pull-submodule.sh\n+++ b/t/t5572-pull-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='pull can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t5600-clone-fail-cleanup.sh b/t/t5600-clone-fail-cleanup.sh\nindex 4435693bb2..e280c1e6bf 100755\n--- a/t/t5600-clone-fail-cleanup.sh\n+++ b/t/t5600-clone-fail-cleanup.sh\n@@ -3,6 +3,7 @@\n # Copyright (C) 2006 Carl D. Worth <cworth@cworth.org>\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git clone to cleanup after failure\n \n This test covers the fact that if git clone fails, it should remove\ndiff --git a/t/t5601-clone.sh b/t/t5601-clone.sh\nindex b52b8acf98..964cb16a5a 100755\n--- a/t/t5601-clone.sh\n+++ b/t/t5601-clone.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description=clone\n \n . ./test-lib.sh\ndiff --git a/t/t5604-clone-reference.sh b/t/t5604-clone-reference.sh\nindex 4320082b1b..46703dea21 100755\n--- a/t/t5604-clone-reference.sh\n+++ b/t/t5604-clone-reference.sh\n@@ -3,6 +3,7 @@\n # Copyright (C) 2006 Martin Waitz <tali@admingilde.org>\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test clone --reference'\n . ./test-lib.sh\n \ndiff --git a/t/t5605-clone-local.sh b/t/t5605-clone-local.sh\nindex 3c087e907c..be9a3e7116 100755\n--- a/t/t5605-clone-local.sh\n+++ b/t/t5605-clone-local.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test local clone'\n . ./test-lib.sh\n \ndiff --git a/t/t5606-clone-options.sh b/t/t5606-clone-options.sh\nindex 9e24ec88e6..f282998797 100755\n--- a/t/t5606-clone-options.sh\n+++ b/t/t5606-clone-options.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='basic clone options'\n . ./test-lib.sh\n \ndiff --git a/t/t5609-clone-branch.sh b/t/t5609-clone-branch.sh\nindex 6e7a7be052..34401ad97e 100755\n--- a/t/t5609-clone-branch.sh\n+++ b/t/t5609-clone-branch.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='clone --branch option'\n . ./test-lib.sh\n \ndiff --git a/t/t5610-clone-detached.sh b/t/t5610-clone-detached.sh\nindex 8b0d607df1..b5a5013375 100755\n--- a/t/t5610-clone-detached.sh\n+++ b/t/t5610-clone-detached.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test cloning a repository with detached HEAD'\n . ./test-lib.sh\n \ndiff --git a/t/t5611-clone-config.sh b/t/t5611-clone-config.sh\nindex e4850b778c..d6a1e34a9a 100755\n--- a/t/t5611-clone-config.sh\n+++ b/t/t5611-clone-config.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='tests for git clone -c key=value'\n . ./test-lib.sh\n \ndiff --git a/t/t5612-clone-refspec.sh b/t/t5612-clone-refspec.sh\nindex 7ace2535c8..ab65f48f72 100755\n--- a/t/t5612-clone-refspec.sh\n+++ b/t/t5612-clone-refspec.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test refspec written by clone-command'\n . ./test-lib.sh\n \ndiff --git a/t/t5613-info-alternate.sh b/t/t5613-info-alternate.sh\nindex 895f46bb91..a2beae244c 100755\n--- a/t/t5613-info-alternate.sh\n+++ b/t/t5613-info-alternate.sh\n@@ -3,6 +3,7 @@\n # Copyright (C) 2006 Martin Waitz <tali@admingilde.org>\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test transitive info/alternate entries'\n . ./test-lib.sh\n \ndiff --git a/t/t5614-clone-submodules.sh b/t/t5614-clone-submodules.sh\nindex a87d329656..2255124518 100755\n--- a/t/t5614-clone-submodules.sh\n+++ b/t/t5614-clone-submodules.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test shallow cloning of repos with submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t5615-alternate-env.sh b/t/t5615-alternate-env.sh\nindex d2d883f3a1..16d5ae8058 100755\n--- a/t/t5615-alternate-env.sh\n+++ b/t/t5615-alternate-env.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='handling of alternates in environment variables'\n . ./test-lib.sh\n \ndiff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh\nindex 362b1581e0..a13e116325 100755\n--- a/t/t5801-remote-helpers.sh\n+++ b/t/t5801-remote-helpers.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Sverre Rabbelier\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test remote-helper import and export commands'\n \n . ./test-lib.sh\ndiff --git a/t/t5802-connect-helper.sh b/t/t5802-connect-helper.sh\nindex c6c2661878..9987253240 100755\n--- a/t/t5802-connect-helper.sh\n+++ b/t/t5802-connect-helper.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='ext::cmd remote \"connect\" helper'\n . ./test-lib.sh\n \ndiff --git a/t/t5810-proto-disable-local.sh b/t/t5810-proto-disable-local.sh\nindex 563592d8a8..7bd038bf1e 100755\n--- a/t/t5810-proto-disable-local.sh\n+++ b/t/t5810-proto-disable-local.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test disabling of local paths in clone/fetch'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY/lib-proto-disable.sh\"\ndiff --git a/t/t5812-proto-disable-http.sh b/t/t5812-proto-disable-http.sh\nindex d911afd24c..83e854627c 100755\n--- a/t/t5812-proto-disable-http.sh\n+++ b/t/t5812-proto-disable-http.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test disabling of git-over-http in clone/fetch'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY/lib-proto-disable.sh\"\ndiff --git a/t/t5813-proto-disable-ssh.sh b/t/t5813-proto-disable-ssh.sh\nindex a954ead8af..f54d817a64 100755\n--- a/t/t5813-proto-disable-ssh.sh\n+++ b/t/t5813-proto-disable-ssh.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test disabling of git-over-ssh in clone/fetch'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY/lib-proto-disable.sh\"\ndiff --git a/t/t5814-proto-disable-ext.sh b/t/t5814-proto-disable-ext.sh\nindex 9d6f7dfa2c..bf3c61a9b4 100755\n--- a/t/t5814-proto-disable-ext.sh\n+++ b/t/t5814-proto-disable-ext.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test disabling of remote-helper paths in clone/fetch'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY/lib-proto-disable.sh\"\ndiff --git a/t/t5815-submodule-protos.sh b/t/t5815-submodule-protos.sh\nindex 06f55a1b8a..b0429d0141 100755\n--- a/t/t5815-submodule-protos.sh\n+++ b/t/t5815-submodule-protos.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test protocol whitelisting with submodules'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/lib-proto-disable.sh\ndiff --git a/t/t5900-repo-selection.sh b/t/t5900-repo-selection.sh\nindex 14e59c5b3e..84bdbdf469 100755\n--- a/t/t5900-repo-selection.sh\n+++ b/t/t5900-repo-selection.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='selecting remote repo in ambiguous cases'\n . ./test-lib.sh\n \ndiff --git a/t/t6008-rev-list-submodule.sh b/t/t6008-rev-list-submodule.sh\nindex c4af9ca0a7..ebf5c70f14 100755\n--- a/t/t6008-rev-list-submodule.sh\n+++ b/t/t6008-rev-list-submodule.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Johannes E. Schindelin\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git rev-list involving submodules that this repo has'\n \n . ./test-lib.sh\ndiff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh\nindex 8c2c6eaef8..8d43131265 100755\n--- a/t/t6030-bisect-porcelain.sh\n+++ b/t/t6030-bisect-porcelain.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2007 Christian Couder\n #\n+test_fails_on_unusual_directory_names=1\n test_description='Tests git bisect functionality'\n \n exec </dev/null\ndiff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh\nindex 97a07655a0..54919d1920 100755\n--- a/t/t6040-tracking-info.sh\n+++ b/t/t6040-tracking-info.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='remote tracking stats'\n \n . ./test-lib.sh\ndiff --git a/t/t6041-bisect-submodule.sh b/t/t6041-bisect-submodule.sh\nindex 62b8a2e7bb..bb3c04bd25 100755\n--- a/t/t6041-bisect-submodule.sh\n+++ b/t/t6041-bisect-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='bisect can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t6050-replace.sh b/t/t6050-replace.sh\nindex c630aba657..561d021080 100755\n--- a/t/t6050-replace.sh\n+++ b/t/t6050-replace.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2008 Christian Couder\n #\n+test_fails_on_unusual_directory_names=1\n test_description='Tests replace refs functionality'\n \n exec </dev/null\ndiff --git a/t/t6060-merge-index.sh b/t/t6060-merge-index.sh\nindex debadbd299..12a646e848 100755\n--- a/t/t6060-merge-index.sh\n+++ b/t/t6060-merge-index.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='basic git merge-index / git-merge-one-file tests'\n . ./test-lib.sh\n \ndiff --git a/t/t6134-pathspec-in-submodule.sh b/t/t6134-pathspec-in-submodule.sh\nindex fd401ca605..4ee5520a31 100755\n--- a/t/t6134-pathspec-in-submodule.sh\n+++ b/t/t6134-pathspec-in-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test case exclude pathspec'\n \n . ./test-lib.sh\ndiff --git a/t/t6200-fmt-merge-msg.sh b/t/t6200-fmt-merge-msg.sh\nindex 2e2fb0e957..5735cdbf3d 100755\n--- a/t/t6200-fmt-merge-msg.sh\n+++ b/t/t6200-fmt-merge-msg.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006, Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='fmt-merge-msg test'\n \n . ./test-lib.sh\ndiff --git a/t/t6500-gc.sh b/t/t6500-gc.sh\nindex 08de2e8ab0..56d3c42bac 100755\n--- a/t/t6500-gc.sh\n+++ b/t/t6500-gc.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='basic git gc tests\n '\n \ndiff --git a/t/t7001-mv.sh b/t/t7001-mv.sh\nindex e365d1ff77..64a08d9966 100755\n--- a/t/t7001-mv.sh\n+++ b/t/t7001-mv.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git mv in subdirs'\n . ./test-lib.sh\n \ndiff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh\nindex 7cb60799be..a1722c3239 100755\n--- a/t/t7003-filter-branch.sh\n+++ b/t/t7003-filter-branch.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git filter-branch'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY/lib-gpg.sh\"\ndiff --git a/t/t7005-editor.sh b/t/t7005-editor.sh\nindex 1b530b5022..75e2f4d0ce 100755\n--- a/t/t7005-editor.sh\n+++ b/t/t7005-editor.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='GIT_EDITOR, core.editor, and stuff'\n \n . ./test-lib.sh\ndiff --git a/t/t7006-pager.sh b/t/t7006-pager.sh\nindex 4f3794d415..69ff4884ef 100755\n--- a/t/t7006-pager.sh\n+++ b/t/t7006-pager.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test automatic use of a pager.'\n \n . ./test-lib.sh\ndiff --git a/t/t7008-grep-binary.sh b/t/t7008-grep-binary.sh\nindex 9c9c378119..c49966f1f1 100755\n--- a/t/t7008-grep-binary.sh\n+++ b/t/t7008-grep-binary.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git grep in binary files'\n \n . ./test-lib.sh\ndiff --git a/t/t7010-setup.sh b/t/t7010-setup.sh\nindex 0335a9a158..2e7bae4667 100755\n--- a/t/t7010-setup.sh\n+++ b/t/t7010-setup.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='setup taking and sanitizing funny paths'\n \n . ./test-lib.sh\ndiff --git a/t/t7064-wtstatus-pv2.sh b/t/t7064-wtstatus-pv2.sh\nindex e319fa2e84..195bfbb519 100755\n--- a/t/t7064-wtstatus-pv2.sh\n+++ b/t/t7064-wtstatus-pv2.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git status --porcelain=v2\n \n This test exercises porcelain V2 output for git status.'\ndiff --git a/t/t7103-reset-bare.sh b/t/t7103-reset-bare.sh\nindex afe36a533c..091c88a572 100755\n--- a/t/t7103-reset-bare.sh\n+++ b/t/t7103-reset-bare.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git reset in a bare repository'\n . ./test-lib.sh\n \ndiff --git a/t/t7112-reset-submodule.sh b/t/t7112-reset-submodule.sh\nindex 2eda6adeb1..478ff8550b 100755\n--- a/t/t7112-reset-submodule.sh\n+++ b/t/t7112-reset-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='reset can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t7300-clean.sh b/t/t7300-clean.sh\nindex b89fd2a6ad..9d662c857d 100755\n--- a/t/t7300-clean.sh\n+++ b/t/t7300-clean.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Michael Spang\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git clean basic tests'\n \n . ./test-lib.sh\ndiff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh\nindex cf77a3a357..1164142b11 100755\n--- a/t/t7400-submodule-basic.sh\n+++ b/t/t7400-submodule-basic.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Lars Hjemli\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Basic porcelain support for submodules\n \n This test tries to verify basic sanity of the init, update and status\ndiff --git a/t/t7402-submodule-rebase.sh b/t/t7402-submodule-rebase.sh\nindex 8e32f19007..ca289daf05 100755\n--- a/t/t7402-submodule-rebase.sh\n+++ b/t/t7402-submodule-rebase.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Johannes Schindelin\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test rebasing, stashing, etc. with submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t7403-submodule-sync.sh b/t/t7403-submodule-sync.sh\nindex 0726799e74..be64ff14c3 100755\n--- a/t/t7403-submodule-sync.sh\n+++ b/t/t7403-submodule-sync.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 David Aguilar\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git submodule sync\n \n These tests exercise the \"git submodule sync\" subcommand.\ndiff --git a/t/t7405-submodule-merge.sh b/t/t7405-submodule-merge.sh\nindex 0d5b42a25b..4b136950f4 100755\n--- a/t/t7405-submodule-merge.sh\n+++ b/t/t7405-submodule-merge.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='merging with submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh\nindex 4ac386d98b..511d2d9c8b 100755\n--- a/t/t7406-submodule-update.sh\n+++ b/t/t7406-submodule-update.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Red Hat, Inc.\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test updating submodules\n \n This test verifies that \"git submodule update\" detaches the HEAD of the\ndiff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh\nindex 6ba5daf42e..d60f4d6078 100755\n--- a/t/t7407-submodule-foreach.sh\n+++ b/t/t7407-submodule-foreach.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Johan Herland\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test \"git submodule foreach\"\n \n This test verifies that \"git submodule foreach\" correctly visits all submodules\ndiff --git a/t/t7408-submodule-reference.sh b/t/t7408-submodule-reference.sh\nindex e159fc5035..f8105ebda1 100755\n--- a/t/t7408-submodule-reference.sh\n+++ b/t/t7408-submodule-reference.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009, Red Hat Inc, Author: Michael S. Tsirkin (mst@redhat.com)\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test clone --reference'\n . ./test-lib.sh\n \ndiff --git a/t/t7409-submodule-detached-work-tree.sh b/t/t7409-submodule-detached-work-tree.sh\nindex c20717181e..df6fc441ce 100755\n--- a/t/t7409-submodule-detached-work-tree.sh\n+++ b/t/t7409-submodule-detached-work-tree.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2012 Daniel Graña\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test submodules on detached working tree\n \n This test verifies that \"git submodule\" initialization, update and addition works\ndiff --git a/t/t7410-submodule-checkout-to.sh b/t/t7410-submodule-checkout-to.sh\nindex 1acef32647..d0f8362477 100755\n--- a/t/t7410-submodule-checkout-to.sh\n+++ b/t/t7410-submodule-checkout-to.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Combination of submodules and multiple workdirs'\n \n . ./test-lib.sh\ndiff --git a/t/t7411-submodule-config.sh b/t/t7411-submodule-config.sh\nindex eea36f1dbe..7befe7748b 100755\n--- a/t/t7411-submodule-config.sh\n+++ b/t/t7411-submodule-config.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2014 Heiko Voigt\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test submodules config cache infrastructure\n \n This test verifies that parsing .gitmodules configurations directly\ndiff --git a/t/t7413-submodule-is-active.sh b/t/t7413-submodule-is-active.sh\nindex 9c785b07ec..e441f5de3c 100755\n--- a/t/t7413-submodule-is-active.sh\n+++ b/t/t7413-submodule-is-active.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test submodule--helper is-active\n \n This test verifies that `git submodue--helper is-active` correclty identifies\ndiff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh\nindex 88d4cda299..2f820804e1 100755\n--- a/t/t7504-commit-msg-hook.sh\n+++ b/t/t7504-commit-msg-hook.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='commit-msg hook'\n \n . ./test-lib.sh\ndiff --git a/t/t7506-status-submodule.sh b/t/t7506-status-submodule.sh\nindex d31b34da83..e8ef49f1ec 100755\n--- a/t/t7506-status-submodule.sh\n+++ b/t/t7506-status-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git status for submodule'\n \n . ./test-lib.sh\ndiff --git a/t/t7507-commit-verbose.sh b/t/t7507-commit-verbose.sh\nindex ed2653d46f..35a31a71fe 100755\n--- a/t/t7507-commit-verbose.sh\n+++ b/t/t7507-commit-verbose.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='verbose commit template'\n . ./test-lib.sh\n \ndiff --git a/t/t7517-per-repo-email.sh b/t/t7517-per-repo-email.sh\nindex 2a22fa7588..5306df95d6 100755\n--- a/t/t7517-per-repo-email.sh\n+++ b/t/t7517-per-repo-email.sh\n@@ -4,6 +4,7 @@\n # Copyright (c) 2016 Jeff King\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='per-repo forced setting of email address'\n \n . ./test-lib.sh\ndiff --git a/t/t7613-merge-submodule.sh b/t/t7613-merge-submodule.sh\nindex d1e9fcc781..35ca51108c 100755\n--- a/t/t7613-merge-submodule.sh\n+++ b/t/t7613-merge-submodule.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='merge can handle submodules'\n \n . ./test-lib.sh\ndiff --git a/t/t7700-repack.sh b/t/t7700-repack.sh\nindex 6061a04147..b4b55d9f3b 100755\n--- a/t/t7700-repack.sh\n+++ b/t/t7700-repack.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git repack works correctly'\n \n . ./test-lib.sh\ndiff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh\nindex 0e7f30db2d..4c07fb8692 100755\n--- a/t/t7800-difftool.sh\n+++ b/t/t7800-difftool.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009, 2010, 2012, 2013 David Aguilar\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-difftool\n \n Testing basic diff tool invocation\ndiff --git a/t/t7810-grep.sh b/t/t7810-grep.sh\nindex cee42097b0..7e6c16ea8c 100755\n--- a/t/t7810-grep.sh\n+++ b/t/t7810-grep.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Junio C Hamano\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git grep various.\n '\n \ndiff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh\nindex 5b6eb3a65e..af092b345e 100755\n--- a/t/t7814-grep-recurse-submodules.sh\n+++ b/t/t7814-grep-recurse-submodules.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='Test grep recurse-submodules feature\n \n This test verifies the recurse-submodules feature correctly greps across\ndiff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh\nindex 60a80f60b2..c1d262bd2f 100755\n--- a/t/t9001-send-email.sh\n+++ b/t/t9001-send-email.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git send-email'\n . ./test-lib.sh\n \ndiff --git a/t/t9020-remote-svn.sh b/t/t9020-remote-svn.sh\nindex 4d81ba1c2c..b853b99ff5 100755\n--- a/t/t9020-remote-svn.sh\n+++ b/t/t9020-remote-svn.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='tests remote-svn'\n \n . ./test-lib.sh\ndiff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh\nindex 8a8ba65a2a..7682c0dc65 100755\n--- a/t/t9100-git-svn-basic.sh\n+++ b/t/t9100-git-svn-basic.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn basic tests'\n GIT_SVN_LC_ALL=${LC_ALL:-$LANG}\n \ndiff --git a/t/t9101-git-svn-props.sh b/t/t9101-git-svn-props.sh\nindex 07bfb63777..9f469b67fd 100755\n--- a/t/t9101-git-svn-props.sh\n+++ b/t/t9101-git-svn-props.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn property tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9102-git-svn-deep-rmdir.sh b/t/t9102-git-svn-deep-rmdir.sh\nindex 66cd51102c..c665b32005 100755\n--- a/t/t9102-git-svn-deep-rmdir.sh\n+++ b/t/t9102-git-svn-deep-rmdir.sh\n@@ -1,4 +1,5 @@\n #!/bin/sh\n+test_fails_on_unusual_directory_names=1\n test_description='git svn rmdir'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9103-git-svn-tracked-directory-removed.sh b/t/t9103-git-svn-tracked-directory-removed.sh\nindex b28271345c..15d7174226 100755\n--- a/t/t9103-git-svn-tracked-directory-removed.sh\n+++ b/t/t9103-git-svn-tracked-directory-removed.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn tracking removed top-level path'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh\nindex cd480edf16..d7eb9c4c5c 100755\n--- a/t/t9104-git-svn-follow-parent.sh\n+++ b/t/t9104-git-svn-follow-parent.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2006 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn fetching'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9105-git-svn-commit-diff.sh b/t/t9105-git-svn-commit-diff.sh\nindex 6ed5f74e25..6e1e4e463c 100755\n--- a/t/t9105-git-svn-commit-diff.sh\n+++ b/t/t9105-git-svn-commit-diff.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n #\n # Copyright (c) 2006 Eric Wong\n+test_fails_on_unusual_directory_names=1\n test_description='git svn commit-diff'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9106-git-svn-commit-diff-clobber.sh b/t/t9106-git-svn-commit-diff-clobber.sh\nindex dbe8deac0d..c72f70119f 100755\n--- a/t/t9106-git-svn-commit-diff-clobber.sh\n+++ b/t/t9106-git-svn-commit-diff-clobber.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n #\n # Copyright (c) 2006 Eric Wong\n+test_fails_on_unusual_directory_names=1\n test_description='git svn commit-diff clobber'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9107-git-svn-migrate.sh b/t/t9107-git-svn-migrate.sh\nindex 9f3ef8f2ef..c911dea1a7 100755\n--- a/t/t9107-git-svn-migrate.sh\n+++ b/t/t9107-git-svn-migrate.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n # Copyright (c) 2006 Eric Wong\n+test_fails_on_unusual_directory_names=1\n test_description='git svn metadata migrations from previous versions'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9108-git-svn-glob.sh b/t/t9108-git-svn-glob.sh\nindex a94286c8ec..190f5c4767 100755\n--- a/t/t9108-git-svn-glob.sh\n+++ b/t/t9108-git-svn-glob.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n # Copyright (c) 2007 Eric Wong\n+test_fails_on_unusual_directory_names=1\n test_description='git svn globbing refspecs'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9109-git-svn-multi-glob.sh b/t/t9109-git-svn-multi-glob.sh\nindex 8d99e848d4..2a3106739b 100755\n--- a/t/t9109-git-svn-multi-glob.sh\n+++ b/t/t9109-git-svn-multi-glob.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n # Copyright (c) 2007 Eric Wong\n+test_fails_on_unusual_directory_names=1\n test_description='git svn globbing refspecs'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9110-git-svn-use-svm-props.sh b/t/t9110-git-svn-use-svm-props.sh\nindex dde0a3c222..86e570289f 100755\n--- a/t/t9110-git-svn-use-svm-props.sh\n+++ b/t/t9110-git-svn-use-svm-props.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn useSvmProps test'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9114-git-svn-dcommit-merge.sh b/t/t9114-git-svn-dcommit-merge.sh\nindex a3d388228a..68f70b70f3 100755\n--- a/t/t9114-git-svn-dcommit-merge.sh\n+++ b/t/t9114-git-svn-dcommit-merge.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n # Based on a script by Joakim Tjernlund <joakim.tjernlund@transmode.se>\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn dcommit handles merges'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9115-git-svn-dcommit-funky-renames.sh b/t/t9115-git-svn-dcommit-funky-renames.sh\nindex 64bb495834..bd6c519e3e 100755\n--- a/t/t9115-git-svn-dcommit-funky-renames.sh\n+++ b/t/t9115-git-svn-dcommit-funky-renames.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n \n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn dcommit can commit renames of files with ugly names'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9116-git-svn-log.sh b/t/t9116-git-svn-log.sh\nindex 45773ee560..d04c9b05d0 100755\n--- a/t/t9116-git-svn-log.sh\n+++ b/t/t9116-git-svn-log.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn log tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9117-git-svn-init-clone.sh b/t/t9117-git-svn-init-clone.sh\nindex 044f65e916..f476f04e0e 100755\n--- a/t/t9117-git-svn-init-clone.sh\n+++ b/t/t9117-git-svn-init-clone.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn init/clone tests'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9118-git-svn-funky-branch-names.sh b/t/t9118-git-svn-funky-branch-names.sh\nindex 41a026637f..1c43a15c67 100755\n--- a/t/t9118-git-svn-funky-branch-names.sh\n+++ b/t/t9118-git-svn-funky-branch-names.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn funky branch names'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9120-git-svn-clone-with-percent-escapes.sh b/t/t9120-git-svn-clone-with-percent-escapes.sh\nindex b28a1741e3..307c4d8811 100755\n--- a/t/t9120-git-svn-clone-with-percent-escapes.sh\n+++ b/t/t9120-git-svn-clone-with-percent-escapes.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Kevin Ballard\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn clone with percent escapes'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9122-git-svn-author.sh b/t/t9122-git-svn-author.sh\nindex 30013b7bb9..260b245cc2 100755\n--- a/t/t9122-git-svn-author.sh\n+++ b/t/t9122-git-svn-author.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn authorship'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9123-git-svn-rebuild-with-rewriteroot.sh b/t/t9123-git-svn-rebuild-with-rewriteroot.sh\nindex ead404589e..d2c21a8d78 100755\n--- a/t/t9123-git-svn-rebuild-with-rewriteroot.sh\n+++ b/t/t9123-git-svn-rebuild-with-rewriteroot.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Jan Krüger\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn respects rewriteRoot during rebuild'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9124-git-svn-dcommit-auto-props.sh b/t/t9124-git-svn-dcommit-auto-props.sh\nindex 9f7231d5b7..3109c579b7 100755\n--- a/t/t9124-git-svn-dcommit-auto-props.sh\n+++ b/t/t9124-git-svn-dcommit-auto-props.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2008 Brad King\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn dcommit honors auto-props'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9125-git-svn-multi-glob-branch-names.sh b/t/t9125-git-svn-multi-glob-branch-names.sh\nindex 0d53fc9014..51bc8f0e6b 100755\n--- a/t/t9125-git-svn-multi-glob-branch-names.sh\n+++ b/t/t9125-git-svn-multi-glob-branch-names.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n # Copyright (c) 2008 Marcus Griep\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn multi-glob branch names'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9127-git-svn-partial-rebuild.sh b/t/t9127-git-svn-partial-rebuild.sh\nindex 2e4789d061..00edd18c06 100755\n--- a/t/t9127-git-svn-partial-rebuild.sh\n+++ b/t/t9127-git-svn-partial-rebuild.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Deskin Miller\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn partial-rebuild tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9128-git-svn-cmd-branch.sh b/t/t9128-git-svn-cmd-branch.sh\nindex 4e95f791db..c887dae35d 100755\n--- a/t/t9128-git-svn-cmd-branch.sh\n+++ b/t/t9128-git-svn-cmd-branch.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Deskin Miller\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn partial-rebuild tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9129-git-svn-i18n-commitencoding.sh b/t/t9129-git-svn-i18n-commitencoding.sh\nindex 8dbd6476fa..8a093590cb 100755\n--- a/t/t9129-git-svn-i18n-commitencoding.sh\n+++ b/t/t9129-git-svn-i18n-commitencoding.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2008 Eric Wong\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn honors i18n.commitEncoding in config'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9131-git-svn-empty-symlink.sh b/t/t9131-git-svn-empty-symlink.sh\nindex f762038f0e..adce5d2adf 100755\n--- a/t/t9131-git-svn-empty-symlink.sh\n+++ b/t/t9131-git-svn-empty-symlink.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test that git handles an svn repository with empty symlinks'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9132-git-svn-broken-symlink.sh b/t/t9132-git-svn-broken-symlink.sh\nindex aeceffaf7b..9d74572cd3 100755\n--- a/t/t9132-git-svn-broken-symlink.sh\n+++ b/t/t9132-git-svn-broken-symlink.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='test that git handles an svn repository with empty symlinks'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9133-git-svn-nested-git-repo.sh b/t/t9133-git-svn-nested-git-repo.sh\nindex f3c30e63b7..bbdf011514 100755\n--- a/t/t9133-git-svn-nested-git-repo.sh\n+++ b/t/t9133-git-svn-nested-git-repo.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn property tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9134-git-svn-ignore-paths.sh b/t/t9134-git-svn-ignore-paths.sh\nindex 09ff10cd9b..cf4240f366 100755\n--- a/t/t9134-git-svn-ignore-paths.sh\n+++ b/t/t9134-git-svn-ignore-paths.sh\n@@ -4,6 +4,7 @@\n # Copyright (c) 2009 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn property tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9137-git-svn-dcommit-clobber-series.sh b/t/t9137-git-svn-dcommit-clobber-series.sh\nindex 5fa07a369f..cc5814b85f 100755\n--- a/t/t9137-git-svn-dcommit-clobber-series.sh\n+++ b/t/t9137-git-svn-dcommit-clobber-series.sh\n@@ -1,6 +1,7 @@\n #!/bin/sh\n #\n # Copyright (c) 2007 Eric Wong\n+test_fails_on_unusual_directory_names=1\n test_description='git svn dcommit clobber series'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9138-git-svn-authors-prog.sh b/t/t9138-git-svn-authors-prog.sh\nindex 7d7e9d46bc..72377845e2 100755\n--- a/t/t9138-git-svn-authors-prog.sh\n+++ b/t/t9138-git-svn-authors-prog.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Eric Wong, Mark Lodato\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn authors prog tests'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9140-git-svn-reset.sh b/t/t9140-git-svn-reset.sh\nindex e855904629..11dad1fa84 100755\n--- a/t/t9140-git-svn-reset.sh\n+++ b/t/t9140-git-svn-reset.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Ben Jackson\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn reset'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9141-git-svn-multiple-branches.sh b/t/t9141-git-svn-multiple-branches.sh\nindex 8e7f7d68b7..76ed3475aa 100755\n--- a/t/t9141-git-svn-multiple-branches.sh\n+++ b/t/t9141-git-svn-multiple-branches.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Marc Branchaud\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn multiple branch and tag paths in the svn repo'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9142-git-svn-shallow-clone.sh b/t/t9142-git-svn-shallow-clone.sh\nindex 9ee23be640..d116d0a9e8 100755\n--- a/t/t9142-git-svn-shallow-clone.sh\n+++ b/t/t9142-git-svn-shallow-clone.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Eric Wong\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn shallow clone'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9143-git-svn-gc.sh b/t/t9143-git-svn-gc.sh\nindex 4594e1ae2f..452c73ba5f 100755\n--- a/t/t9143-git-svn-gc.sh\n+++ b/t/t9143-git-svn-gc.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2009 Robert Allan Zeh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn gc basic tests'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9144-git-svn-old-rev_map.sh b/t/t9144-git-svn-old-rev_map.sh\nindex 7600a35cd4..12351951d6 100755\n--- a/t/t9144-git-svn-old-rev_map.sh\n+++ b/t/t9144-git-svn-old-rev_map.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2009 Eric Wong\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn old rev_map preservd'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9145-git-svn-master-branch.sh b/t/t9145-git-svn-master-branch.sh\nindex 3bbf341f6a..44f40db9bd 100755\n--- a/t/t9145-git-svn-master-branch.sh\n+++ b/t/t9145-git-svn-master-branch.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2009 Eric Wong\n #\n+test_fails_on_unusual_directory_names=1\n test_description='git svn initial master branch is \"trunk\" if possible'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh\nindex 6d3130e618..25aadc3986 100755\n--- a/t/t9146-git-svn-empty-dirs.sh\n+++ b/t/t9146-git-svn-empty-dirs.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2009 Eric Wong\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn creates empty directories'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9147-git-svn-include-paths.sh b/t/t9147-git-svn-include-paths.sh\nindex a90ff58629..8233aca9cd 100755\n--- a/t/t9147-git-svn-include-paths.sh\n+++ b/t/t9147-git-svn-include-paths.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2013 Paul Walmsley - based on t9134 by Vitaly Shukela\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn property tests'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9148-git-svn-propset.sh b/t/t9148-git-svn-propset.sh\nindex 102639090c..92aa6e2427 100755\n--- a/t/t9148-git-svn-propset.sh\n+++ b/t/t9148-git-svn-propset.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2014 Alfred Perlstein\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn propset tests'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9150-svk-mergetickets.sh b/t/t9150-svk-mergetickets.sh\nindex 1bb676bede..ac6678e92c 100755\n--- a/t/t9150-svk-mergetickets.sh\n+++ b/t/t9150-svk-mergetickets.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Sam Vilain\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-svn svk merge tickets'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9151-svn-mergeinfo.sh b/t/t9151-svn-mergeinfo.sh\nindex 4f6c06ecb2..4028619246 100755\n--- a/t/t9151-svn-mergeinfo.sh\n+++ b/t/t9151-svn-mergeinfo.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007, 2009 Sam Vilain\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-svn svn mergeinfo properties'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9153-git-svn-rewrite-uuid.sh b/t/t9153-git-svn-rewrite-uuid.sh\nindex 372ef15685..5895175ce6 100755\n--- a/t/t9153-git-svn-rewrite-uuid.sh\n+++ b/t/t9153-git-svn-rewrite-uuid.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Jay Soffian\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn --rewrite-uuid test'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9154-git-svn-fancy-glob.sh b/t/t9154-git-svn-fancy-glob.sh\nindex a0150f057d..1318b9a865 100755\n--- a/t/t9154-git-svn-fancy-glob.sh\n+++ b/t/t9154-git-svn-fancy-glob.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Jay Soffian\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn fancy glob test'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9155-git-svn-fetch-deleted-tag.sh b/t/t9155-git-svn-fetch-deleted-tag.sh\nindex 184336f346..b36f10f818 100755\n--- a/t/t9155-git-svn-fetch-deleted-tag.sh\n+++ b/t/t9155-git-svn-fetch-deleted-tag.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn fetch deleted tag'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9156-git-svn-fetch-deleted-tag-2.sh b/t/t9156-git-svn-fetch-deleted-tag-2.sh\nindex 7a6e33ba3c..9a7b721809 100755\n--- a/t/t9156-git-svn-fetch-deleted-tag-2.sh\n+++ b/t/t9156-git-svn-fetch-deleted-tag-2.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn fetch deleted tag 2'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9157-git-svn-fetch-merge.sh b/t/t9157-git-svn-fetch-merge.sh\nindex 991d2aa1be..cd0d534deb 100755\n--- a/t/t9157-git-svn-fetch-merge.sh\n+++ b/t/t9157-git-svn-fetch-merge.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Steven Walter\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn merge detection'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9158-git-svn-mergeinfo.sh b/t/t9158-git-svn-mergeinfo.sh\nindex a875b45102..5feb615447 100755\n--- a/t/t9158-git-svn-mergeinfo.sh\n+++ b/t/t9158-git-svn-mergeinfo.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2010 Steven Walter\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn mergeinfo propagation'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9159-git-svn-no-parent-mergeinfo.sh b/t/t9159-git-svn-no-parent-mergeinfo.sh\nindex 69e4815781..ac8a201ff4 100755\n--- a/t/t9159-git-svn-no-parent-mergeinfo.sh\n+++ b/t/t9159-git-svn-no-parent-mergeinfo.sh\n@@ -1,4 +1,5 @@\n #!/bin/sh\n+test_fails_on_unusual_directory_names=1\n test_description='git svn handling of root commits in merge ranges'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9160-git-svn-preserve-empty-dirs.sh b/t/t9160-git-svn-preserve-empty-dirs.sh\nindex 0ede3cfedb..7db7ac485d 100755\n--- a/t/t9160-git-svn-preserve-empty-dirs.sh\n+++ b/t/t9160-git-svn-preserve-empty-dirs.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2011 Ray Chen\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn test (option --preserve-empty-dirs)\n \n This test uses git to clone a Subversion repository that contains empty\ndiff --git a/t/t9161-git-svn-mergeinfo-push.sh b/t/t9161-git-svn-mergeinfo-push.sh\nindex f113acaa6c..c216273eb3 100755\n--- a/t/t9161-git-svn-mergeinfo-push.sh\n+++ b/t/t9161-git-svn-mergeinfo-push.sh\n@@ -4,6 +4,7 @@\n # Portions copyright (c) 2011 Bryan Jacobs\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-svn svn mergeinfo propagation'\n \n . ./lib-git-svn.sh\ndiff --git a/t/t9162-git-svn-dcommit-interactive.sh b/t/t9162-git-svn-dcommit-interactive.sh\nindex e38d9fa37b..5ab85c210a 100755\n--- a/t/t9162-git-svn-dcommit-interactive.sh\n+++ b/t/t9162-git-svn-dcommit-interactive.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) 2011 Frédéric Heitzmann\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn dcommit --interactive series'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9163-git-svn-reset-clears-caches.sh b/t/t9163-git-svn-reset-clears-caches.sh\nindex d6245cee08..54111aa873 100755\n--- a/t/t9163-git-svn-reset-clears-caches.sh\n+++ b/t/t9163-git-svn-reset-clears-caches.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2012 Peter Baumann\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn reset clears memoized caches'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9164-git-svn-dcommit-concurrent.sh b/t/t9164-git-svn-dcommit-concurrent.sh\nindex d8464d4218..af33c9ab92 100755\n--- a/t/t9164-git-svn-dcommit-concurrent.sh\n+++ b/t/t9164-git-svn-dcommit-concurrent.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2012 Robert Luberda\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='concurrent git svn dcommit'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9165-git-svn-fetch-merge-branch-of-branch.sh b/t/t9165-git-svn-fetch-merge-branch-of-branch.sh\nindex fa3ef3b1f7..eae3144c37 100755\n--- a/t/t9165-git-svn-fetch-merge-branch-of-branch.sh\n+++ b/t/t9165-git-svn-fetch-merge-branch-of-branch.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2012 Steven Walter\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn merge detection'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh b/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh\nindex 52f2e46a5b..a48d18ce94 100755\n--- a/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh\n+++ b/t/t9166-git-svn-fetch-merge-branch-of-branch2.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2012 Steven Walter\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn merge detection'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9167-git-svn-cmd-branch-subproject.sh b/t/t9167-git-svn-cmd-branch-subproject.sh\nindex ba35fc06fc..112a8bf51f 100755\n--- a/t/t9167-git-svn-cmd-branch-subproject.sh\n+++ b/t/t9167-git-svn-cmd-branch-subproject.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2013 Tobias Schulte\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git svn branch for subproject clones'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9168-git-svn-partially-globbed-names.sh b/t/t9168-git-svn-partially-globbed-names.sh\nindex 8b22f2272c..7283cb282a 100755\n--- a/t/t9168-git-svn-partially-globbed-names.sh\n+++ b/t/t9168-git-svn-partially-globbed-names.sh\n@@ -1,4 +1,5 @@\n #!/bin/sh\n+test_fails_on_unusual_directory_names=1\n test_description='git svn globbing refspecs with prefixed globs'\n . ./lib-git-svn.sh\n \ndiff --git a/t/t9200-git-cvsexportcommit.sh b/t/t9200-git-cvsexportcommit.sh\nindex 1319415ba8..7efd2c48c9 100755\n--- a/t/t9200-git-cvsexportcommit.sh\n+++ b/t/t9200-git-cvsexportcommit.sh\n@@ -2,6 +2,7 @@\n #\n # Copyright (c) Robin Rosenberg\n #\n+test_fails_on_unusual_directory_names=1\n test_description='Test export of commits to CVS'\n \n . ./test-lib.sh\ndiff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh\nindex 2e0ba3ebd8..c596269e0e 100755\n--- a/t/t9300-fast-import.sh\n+++ b/t/t9300-fast-import.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Shawn Pearce\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test git fast-import utility'\n . ./test-lib.sh\n . \"$TEST_DIRECTORY\"/diff-lib.sh ;# test-lib chdir's into trash\ndiff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh\nindex b5149fde6e..805fecf89d 100755\n--- a/t/t9350-fast-export.sh\n+++ b/t/t9350-fast-export.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Johannes E. Schindelin\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git fast-export'\n . ./test-lib.sh\n \ndiff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh\nindex 432c61d246..3a8109d42d 100755\n--- a/t/t9400-git-cvsserver-server.sh\n+++ b/t/t9400-git-cvsserver-server.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Frank Lichtenheld\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-cvsserver access\n \n tests read access to a git repository with the\ndiff --git a/t/t9401-git-cvsserver-crlf.sh b/t/t9401-git-cvsserver-crlf.sh\nindex 84787eee9a..2771407f74 100755\n--- a/t/t9401-git-cvsserver-crlf.sh\n+++ b/t/t9401-git-cvsserver-crlf.sh\n@@ -4,6 +4,7 @@\n # Parts adapted from other tests.\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-cvsserver -kb modes\n \n tests -kb mode for binary files when accessing a git\ndiff --git a/t/t9402-git-cvsserver-refs.sh b/t/t9402-git-cvsserver-refs.sh\nindex 6d2d3c8739..643fcfbad0 100755\n--- a/t/t9402-git-cvsserver-refs.sh\n+++ b/t/t9402-git-cvsserver-refs.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git-cvsserver and git refspecs\n \n tests ability for git-cvsserver to switch between and compare\ndiff --git a/t/t9500-gitweb-standalone-no-errors.sh b/t/t9500-gitweb-standalone-no-errors.sh\nindex 6d06ed96cb..0845149409 100755\n--- a/t/t9500-gitweb-standalone-no-errors.sh\n+++ b/t/t9500-gitweb-standalone-no-errors.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2007 Jakub Narebski\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='gitweb as standalone script (basic tests).\n \n This test runs gitweb (git web interface) as CGI script from\ndiff --git a/t/t9502-gitweb-standalone-parse-output.sh b/t/t9502-gitweb-standalone-parse-output.sh\nindex 0796a438bc..bf6352b084 100755\n--- a/t/t9502-gitweb-standalone-parse-output.sh\n+++ b/t/t9502-gitweb-standalone-parse-output.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2009 Mark Rada\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='gitweb as standalone script (parsing script output).\n \n This test runs gitweb (git web interface) as a CGI script from the\ndiff --git a/t/t9600-cvsimport.sh b/t/t9600-cvsimport.sh\nindex 804ce3850f..678dd8236a 100755\n--- a/t/t9600-cvsimport.sh\n+++ b/t/t9600-cvsimport.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git cvsimport basic tests'\n . ./lib-cvs.sh\n \ndiff --git a/t/t9601-cvsimport-vendor-branch.sh b/t/t9601-cvsimport-vendor-branch.sh\nindex 827d39f5bf..25f971c7b2 100755\n--- a/t/t9601-cvsimport-vendor-branch.sh\n+++ b/t/t9601-cvsimport-vendor-branch.sh\n@@ -31,6 +31,7 @@\n #       Like imported-twice.txt, but with a vendor branch whose branch\n #       tag has been removed.\n \n+test_fails_on_unusual_directory_names=1\n test_description='git cvsimport handling of vendor branches'\n . ./lib-cvs.sh\n \ndiff --git a/t/t9602-cvsimport-branches-tags.sh b/t/t9602-cvsimport-branches-tags.sh\nindex e1db323f54..6ffcb139e4 100755\n--- a/t/t9602-cvsimport-branches-tags.sh\n+++ b/t/t9602-cvsimport-branches-tags.sh\n@@ -3,6 +3,7 @@\n # A description of the repository used for this test can be found in\n # t9602/README.\n \n+test_fails_on_unusual_directory_names=1\n test_description='git cvsimport handling of branches and tags'\n . ./lib-cvs.sh\n \ndiff --git a/t/t9604-cvsimport-timestamps.sh b/t/t9604-cvsimport-timestamps.sh\nindex a4b3db24bd..32119a5294 100755\n--- a/t/t9604-cvsimport-timestamps.sh\n+++ b/t/t9604-cvsimport-timestamps.sh\n@@ -1,5 +1,6 @@\n #!/bin/sh\n \n+test_fails_on_unusual_directory_names=1\n test_description='git cvsimport timestamps'\n . ./lib-cvs.sh\n \ndiff --git a/t/t9700-perl-git.sh b/t/t9700-perl-git.sh\nindex 102c133112..54ea4990c2 100755\n--- a/t/t9700-perl-git.sh\n+++ b/t/t9700-perl-git.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2008 Lea Wiemann\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='perl interface (Git.pm)'\n . ./test-lib.sh\n \ndiff --git a/t/t9902-completion.sh b/t/t9902-completion.sh\nindex 5ed28135be..0231e9692a 100755\n--- a/t/t9902-completion.sh\n+++ b/t/t9902-completion.sh\n@@ -3,6 +3,7 @@\n # Copyright (c) 2012 Felipe Contreras\n #\n \n+test_fails_on_unusual_directory_names=1\n test_description='test bash completion'\n \n . ./lib-bash.sh\n-- \n2.11.0\n\n"},{"id":"316447","messageId":"20170409191117.25175-3-avarab@gmail.com","threadId":"45642","inReplyTo":"20170409191117.25175-1-avarab@gmail.com","subject":"[PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-09T19:11:17Z","receivedAt":"2017-04-09T19:11:47Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"Change the test library to insert non-alphanumeric ASCII characters\ninto the TRASH_DIRECTORY name, that's the directory the test library\ncreates, chdirs to and runs each individual test from.\n\nUnless test_fails_on_unusual_directory_names=1 is declared before\nimporting test-lib.sh (and if perl isn't available on the system), the\ntrash directory will contain every non-alphanumeric character in\nASCII, in order.\n\nThis includes all the control characters, !, [], {} etc. the \".\"\ncharacter isn't included because it's already in the directory name,\nand nor is \"/\" for obvious reasons, although that would actually work,\nwe'd just create a subdirectory, which would make the tests harder to\ninspect when they fail.i\n\nThis change is inspired by the \"submodule: prevent backslash expantion\nin submodule names\" patch[1]. If we'd had backslashes in the\nTRASH_DIRECTORY all along that bug would have been fixed a long time\nago. This will flag such issues by marking tests that currently fail\nwith \"test_fails_on_unusual_directory_names=1\", ensure that new tests\naren't added unless a discussion is had about why the code can't\nhandle unusual pathnames, and prevent future regressions.\n\n1. <20170407172306.172673-1-bmwill@google.com>\n---\n t/README      | 12 ++++++++++++\n t/test-lib.sh |  4 ++++\n 2 files changed, 16 insertions(+)\n\ndiff --git a/t/README b/t/README\nindex ab386c3681..314dd40221 100644\n--- a/t/README\n+++ b/t/README\n@@ -345,6 +345,18 @@ assignment to variable 'test_description', like this:\n \tThis test registers the following structure in the cache\n \tand tries to run git-ls-files with option --frotz.'\n \n+By default the tests will be run from a directory with a highly\n+unusual filename that includes control characters, a newline, various\n+punctuation etc., this is done to smoke out any bugs related to path\n+handling. If for whatever reason the tests can't deal with such\n+unusual path names, set:\n+\n+    test_fails_on_unusual_directory_names=1\n+\n+Before sourcing 'test-lib.sh' as described below. This option is\n+mainly intended to grandfather in existing broken tests & code, and\n+should usually not be used in new code, instead your tests or code\n+probably need fixing.\n \n Source 'test-lib.sh'\n --------------------\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 13b5696822..089ff5ac7d 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -914,6 +914,10 @@ fi\n \n # Test repository\n TRASH_DIRECTORY=\"trash directory.$(basename \"$0\" .sh)\"\n+if test -z \"$test_fails_on_unusual_directory_names\" -a \"$(perl -e 'print 1+1' 2>/dev/null)\" = \"2\"\n+then\n+   TRASH_DIRECTORY=\"$TRASH_DIRECTORY.$(perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f')\"\n+fi\n test -n \"$root\" && TRASH_DIRECTORY=\"$root/$TRASH_DIRECTORY\"\n case \"$TRASH_DIRECTORY\" in\n /*) ;; # absolute path is good\n-- \n2.11.0\n\n"},{"id":"316452","messageId":"2893d697-735f-537c-241d-910139f2c281@durchholz.org","threadId":"45642","inReplyTo":"20170409191117.25175-1-avarab@gmail.com","subject":"Re: [PATCH 0/2] test: Detect *lots* of bugs by adding non-alnum to trash dir names","fromName":"Joachim Durchholz","fromEmail":"jo@durchholz.org","sentAt":"2017-04-09T20:37:08Z","receivedAt":"2017-04-09T20:37:17Z","isPatch":true,"sender":{"key":"jo@durchholz.org","avatar":null},"body":"Am 09.04.2017 um 21:11 schrieb Ævar Arnfjörð Bjarmason:\n> This series changes the test library so that we interpolate the result\n> of:\n>\n>     perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f'\n>\n> Into the trash directory name we generate. Doing this makes 30% of the\n> test suite fail.\n\nWow.\nI know that I tend to bring out weird errors in systems, but this is \nmuch deeper than I could have ever expected.\n\nYou might want to additionally test directory names like \"asdf\" and \n'asdf' - some shell might try to be smart about such names and \nautomatically unquote them. This would probably mean running the test \nsuite multiple times, which some people find offensive (myself included).\n\nThere's also high-bit characters that might cause oddness. 0x80 and 0xff \nlook like interesting edge cases to me.\nNote that just appending these bytes is going to cause failures with \nfilesystems that expect UTF-8 file names, you'd want to use a Unicode \ncode point that gets encoded using a 0x80 resp. 0xff byte (I suspect \n0xff is actually not a valid UTF-8 encoding at all but I'd have to \ndouble-check that).\n\nIs git supposed to run fine under Windows, or under Linux with an ntfs \nfilesystem driver?\nIf yes, then I'd expect this patch to cause the other 70% of tests to \ncrash, because NTFS forbids several non-alnum printable characters, \namong them <=>\\\n"},{"id":"316454","messageId":"20170410014712.26716-1-szeder.dev@gmail.com","threadId":"45642","inReplyTo":"20170409191117.25175-3-avarab@gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2017-04-10T01:47:12Z","receivedAt":"2017-04-10T01:47:38Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"> Change the test library to insert non-alphanumeric ASCII characters\n> into the TRASH_DIRECTORY name, that's the directory the test library\n> creates, chdirs to and runs each individual test from.\n> \n> Unless test_fails_on_unusual_directory_names=1 is declared before\n> importing test-lib.sh (and if perl isn't available on the system), the\n> trash directory will contain every non-alphanumeric character in\n> ASCII, in order.\n\nAt the very least there must be an easier way to disable this, e.g. a\ncommand line option.\n\nThis change is sure effective in smoking out bugs, but it's a major\nannoyance during development when it comes to debugging a test.  At\nfirst I could not even cd into the trash directory, because TAB\ncompleting the directory name with all those non-printable characters\ndidn't work (this may be a bug in the bash-completion package).  And\nsimply copy-pasting the dirname didn't work either, because 'ls'\ndisplayed it as\n\n  trash directory.t9902-completion.??????????????????????????????? !\"#$%&'()*+,-:;<=>?@[\\]^_`{|}~?\n\nAfter some headscratching, Sunday night may be my excuse, I figured\nout that 'cd tr*' works...  only to be greeted with the ugliest-ever\nthree-line(!) shell prompt.\n\nTherefore I would say that this should not even be enabled by default\nin test-lib.sh, so at least running a test directly from the command\nline as ./t1234-foo.sh would considerately give us an easily\naccessible trash directory even without any command line options.  We\ncould enable it for 'make test' by default via GIT_TEST_OPTS in\nt/Makefile, though.\n\n\n> This includes all the control characters, !, [], {} etc. the \".\"\n> character isn't included because it's already in the directory name,\n> and nor is \"/\" for obvious reasons, although that would actually work,\n> we'd just create a subdirectory, which would make the tests harder to\n> inspect when they fail.i\n\n1. Heh.  How an additional subdirectory would make the tests harder to\n   inspect is nothing compared to the effect of all the other\n   characters.\n\n2. s/i$//\n\n> This change is inspired by the \"submodule: prevent backslash expantion\n> in submodule names\" patch[1]. If we'd had backslashes in the\n> TRASH_DIRECTORY all along that bug would have been fixed a long time\n> ago. This will flag such issues by marking tests that currently fail\n> with \"test_fails_on_unusual_directory_names=1\", ensure that new tests\n> aren't added unless a discussion is had about why the code can't\n> handle unusual pathnames, and prevent future regressions.\n> \n> 1. <20170407172306.172673-1-bmwill@google.com>\n> ---\n>  t/README      | 12 ++++++++++++\n>  t/test-lib.sh |  4 ++++\n>  2 files changed, 16 insertions(+)\n> \n> diff --git a/t/README b/t/README\n> index ab386c3681..314dd40221 100644\n> --- a/t/README\n> +++ b/t/README\n> @@ -345,6 +345,18 @@ assignment to variable 'test_description', like this:\n>  \tThis test registers the following structure in the cache\n>  \tand tries to run git-ls-files with option --frotz.'\n>  \n> +By default the tests will be run from a directory with a highly\n> +unusual filename that includes control characters, a newline, various\n> +punctuation etc., this is done to smoke out any bugs related to path\n> +handling. If for whatever reason the tests can't deal with such\n> +unusual path names, set:\n> +\n> +    test_fails_on_unusual_directory_names=1\n> +\n> +Before sourcing 'test-lib.sh' as described below. This option is\n> +mainly intended to grandfather in existing broken tests & code, and\n> +should usually not be used in new code, instead your tests or code\n> +probably need fixing.\n> \n>  Source 'test-lib.sh'\n>  --------------------\n> diff --git a/t/test-lib.sh b/t/test-lib.sh\n> index 13b5696822..089ff5ac7d 100644\n> --- a/t/test-lib.sh\n> +++ b/t/test-lib.sh\n> @@ -914,6 +914,10 @@ fi\n>  \n>  # Test repository\n>  TRASH_DIRECTORY=\"trash directory.$(basename \"$0\" .sh)\"\n> +if test -z \"$test_fails_on_unusual_directory_names\" -a \"$(perl -e 'print 1+1' 2>/dev/null)\" = \"2\"\n> +then\n> +   TRASH_DIRECTORY=\"$TRASH_DIRECTORY.$(perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f')\"\n> +fi\n>  test -n \"$root\" && TRASH_DIRECTORY=\"$root/$TRASH_DIRECTORY\"\n>  case \"$TRASH_DIRECTORY\" in\n>  /*) ;; # absolute path is good\n> -- \n> 2.11.0\n\n\n"},{"id":"316459","messageId":"CACBZZX6M2YnbOT6btqLf2RacNT0Th3Hx2jf5QR7g+KFS_DKtVQ@mail.gmail.com","threadId":"45642","inReplyTo":"20170410014712.26716-1-szeder.dev@gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-10T08:02:18Z","receivedAt":"2017-04-10T08:02:55Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Mon, Apr 10, 2017 at 3:47 AM, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n>> Change the test library to insert non-alphanumeric ASCII characters\n>> into the TRASH_DIRECTORY name, that's the directory the test library\n>> creates, chdirs to and runs each individual test from.\n>>\n>> Unless test_fails_on_unusual_directory_names=1 is declared before\n>> importing test-lib.sh (and if perl isn't available on the system), the\n>> trash directory will contain every non-alphanumeric character in\n>> ASCII, in order.\n>\n> At the very least there must be an easier way to disable this, e.g. a\n> command line option.\n>\n> This change is sure effective in smoking out bugs, but it's a major\n> annoyance during development when it comes to debugging a test.  At\n> first I could not even cd into the trash directory, because TAB\n> completing the directory name with all those non-printable characters\n> didn't work (this may be a bug in the bash-completion package).  And\n> simply copy-pasting the dirname didn't work either, because 'ls'\n>\n>   trash directory.t9902-completion.??????????????????????????????? !\"#$%&'()*+,-:;<=>?@[\\]^_`{|}~?\n>\n> After some headscratching, Sunday night may be my excuse, I figured\n> out that 'cd tr*' works...  only to be greeted with the ugliest-ever\n> three-line(!) shell prompt.\n>\n> Therefore I would say that this should not even be enabled by default\n> in test-lib.sh, so at least running a test directly from the command\n> line as ./t1234-foo.sh would considerately give us an easily\n> accessible trash directory even without any command line options.  We\n> could enable it for 'make test' by default via GIT_TEST_OPTS in\n> t/Makefile, though.\n\nThis definitely needs some tweaking as you and Joachim point out. E.g.\nsome capabilities check in the test suite to check if we can even\ncreate these sorts of paths on the local filesystem.\n\nA couple of comments on the above though:\n\na) If we have something that's a more strict mode that makes tests\nfail due to buggy code in various scenarios, we gain the most from\nhaving it on by default, and having some optional mode to have devs\ne.g. disable it for manual inspection of the test directories.\n\nMost of the running of the test suite that really matters, i.e. just\nbefore the software is delivered to end users, is going to be running\nin some non-interactive build system preparing a package.\n\nb) I think any sort of magic like using it with 'make test', but not\nwhen the *.sh is manually run, will just lead to frustrating seemingly\nheisenbugs from people trying to debug the test suite when things do\nfail, i.e. you run 'make test' on some obscure platform we haven't\nfixed path bugs on, 10 fail, you manually inspect them and every one\nof them succeeds, because some --use-garbage-dirs option wasn't\npassed.\n\n>> This includes all the control characters, !, [], {} etc. the \".\"\n>> character isn't included because it's already in the directory name,\n>> and nor is \"/\" for obvious reasons, although that would actually work,\n>> we'd just create a subdirectory, which would make the tests harder to\n>> inspect when they fail.i\n>\n> 1. Heh.  How an additional subdirectory would make the tests harder to\n>    inspect is nothing compared to the effect of all the other\n>    characters.\n>\n> 2. s/i$//\n>\n>> This change is inspired by the \"submodule: prevent backslash expantion\n>> in submodule names\" patch[1]. If we'd had backslashes in the\n>> TRASH_DIRECTORY all along that bug would have been fixed a long time\n>> ago. This will flag such issues by marking tests that currently fail\n>> with \"test_fails_on_unusual_directory_names=1\", ensure that new tests\n>> aren't added unless a discussion is had about why the code can't\n>> handle unusual pathnames, and prevent future regressions.\n>>\n>> 1. <20170407172306.172673-1-bmwill@google.com>\n>> ---\n>>  t/README      | 12 ++++++++++++\n>>  t/test-lib.sh |  4 ++++\n>>  2 files changed, 16 insertions(+)\n>>\n>> diff --git a/t/README b/t/README\n>> index ab386c3681..314dd40221 100644\n>> --- a/t/README\n>> +++ b/t/README\n>> @@ -345,6 +345,18 @@ assignment to variable 'test_description', like this:\n>>       This test registers the following structure in the cache\n>>       and tries to run git-ls-files with option --frotz.'\n>>\n>> +By default the tests will be run from a directory with a highly\n>> +unusual filename that includes control characters, a newline, various\n>> +punctuation etc., this is done to smoke out any bugs related to path\n>> +handling. If for whatever reason the tests can't deal with such\n>> +unusual path names, set:\n>> +\n>> +    test_fails_on_unusual_directory_names=1\n>> +\n>> +Before sourcing 'test-lib.sh' as described below. This option is\n>> +mainly intended to grandfather in existing broken tests & code, and\n>> +should usually not be used in new code, instead your tests or code\n>> +probably need fixing.\n>>\n>>  Source 'test-lib.sh'\n>>  --------------------\n>> diff --git a/t/test-lib.sh b/t/test-lib.sh\n>> index 13b5696822..089ff5ac7d 100644\n>> --- a/t/test-lib.sh\n>> +++ b/t/test-lib.sh\n>> @@ -914,6 +914,10 @@ fi\n>>\n>>  # Test repository\n>>  TRASH_DIRECTORY=\"trash directory.$(basename \"$0\" .sh)\"\n>> +if test -z \"$test_fails_on_unusual_directory_names\" -a \"$(perl -e 'print 1+1' 2>/dev/null)\" = \"2\"\n>> +then\n>> +   TRASH_DIRECTORY=\"$TRASH_DIRECTORY.$(perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f')\"\n>> +fi\n>>  test -n \"$root\" && TRASH_DIRECTORY=\"$root/$TRASH_DIRECTORY\"\n>>  case \"$TRASH_DIRECTORY\" in\n>>  /*) ;; # absolute path is good\n>> --\n>> 2.11.0\n>\n>\n"},{"id":"316477","messageId":"CAM0VKjnwbCgCjEBr895068k4veoSGZMf8Cu7neoH=oofgWS2Cw@mail.gmail.com","threadId":"45642","inReplyTo":"CACBZZX6M2YnbOT6btqLf2RacNT0Th3Hx2jf5QR7g+KFS_DKtVQ@mail.gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2017-04-10T11:19:16Z","receivedAt":"2017-04-10T11:19:22Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Mon, Apr 10, 2017 at 10:02 AM, Ævar Arnfjörð Bjarmason\n<avarab@gmail.com> wrote:\n> On Mon, Apr 10, 2017 at 3:47 AM, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n>>> Change the test library to insert non-alphanumeric ASCII characters\n>>> into the TRASH_DIRECTORY name, that's the directory the test library\n>>> creates, chdirs to and runs each individual test from.\n>>>\n>>> Unless test_fails_on_unusual_directory_names=1 is declared before\n>>> importing test-lib.sh (and if perl isn't available on the system), the\n>>> trash directory will contain every non-alphanumeric character in\n>>> ASCII, in order.\n>>\n>> At the very least there must be an easier way to disable this, e.g. a\n>> command line option.\n>>\n>> This change is sure effective in smoking out bugs, but it's a major\n>> annoyance during development when it comes to debugging a test.  At\n>> first I could not even cd into the trash directory, because TAB\n>> completing the directory name with all those non-printable characters\n>> didn't work (this may be a bug in the bash-completion package).  And\n>> simply copy-pasting the dirname didn't work either, because 'ls'\n>>\n>>   trash directory.t9902-completion.??????????????????????????????? !\"#$%&'()*+,-:;<=>?@[\\]^_`{|}~?\n\nBtw, it seems most of the failures in t9902-completion are triggered\nby remote URL parsing.  The trash directory's new name contains '[',\n']' and even \"@[\", all of which are treated special by\nconnect.c:host_end(), a helper function of parse_connect_url(),\nbasically breaking anything trying to e.g.:\n\n  git fetch \"$(pwd)/other\"\n\nWhat puzzles me most is that parse_connect_url() recognizes right at\nits beginning that a remote URL like this is not actually an URL, so\nwhy does it continue parsing it as if it were one?\n\nA few other failures are triggered by the ':' in the trash directory's\nname, breaking the following commonly used pattern:\n\n  export GIT_CEILING_DIRECTORIES=\"$TRASH_DIRECTORY\" &&\n  cd subdir &&\n  test-git-pretending-it's-run-outside-of-a-repository\n\nI think ':' should therefore be excluded from the trash directory, too.\n\n>> After some headscratching, Sunday night may be my excuse, I figured\n>> out that 'cd tr*' works...  only to be greeted with the ugliest-ever\n>> three-line(!) shell prompt.\n>>\n>> Therefore I would say that this should not even be enabled by default\n>> in test-lib.sh, so at least running a test directly from the command\n>> line as ./t1234-foo.sh would considerately give us an easily\n>> accessible trash directory even without any command line options.  We\n>> could enable it for 'make test' by default via GIT_TEST_OPTS in\n>> t/Makefile, though.\n>\n> This definitely needs some tweaking as you and Joachim point out. E.g.\n> some capabilities check in the test suite to check if we can even\n> create these sorts of paths on the local filesystem.\n>\n> A couple of comments on the above though:\n>\n> a) If we have something that's a more strict mode that makes tests\n> fail due to buggy code in various scenarios, we gain the most from\n> having it on by default\n\nI know, and I basically agree...\n\n> and having some optional mode to have devs\n> e.g. disable it for manual inspection of the test directories.\n\n... but this is just too gross to live as default outside of a CI\nenvironment.\n\n> Most of the running of the test suite that really matters, i.e. just\n> before the software is delivered to end users, is going to be running\n> in some non-interactive build system preparing a package.\n>\n> b) I think any sort of magic like using it with 'make test', but not\n> when the *.sh is manually run, will just lead to frustrating seemingly\n> heisenbugs from people trying to debug the test suite when things do\n> fail, i.e. you run 'make test' on some obscure platform we haven't\n> fixed path bugs on, 10 fail, you manually inspect them and every one\n> of them succeeds, because some --use-garbage-dirs option wasn't\n> passed.\n\nThat's not really an issue.  When a test fails during 'make test' with\ngarbage in trash dir names, the dev comes and attempts to cd into the\ntrash dir, and will be instantly reminded that non-printable\ncharacters might play a role in the failure when he can't do so with\nordinary means.\n\n>>> This includes all the control characters, !, [], {} etc. the \".\"\n>>> character isn't included because it's already in the directory name,\n>>> and nor is \"/\" for obvious reasons, although that would actually work,\n>>> we'd just create a subdirectory, which would make the tests harder to\n>>> inspect when they fail.i\n>>\n>> 1. Heh.  How an additional subdirectory would make the tests harder to\n>>    inspect is nothing compared to the effect of all the other\n>>    characters.\n>>\n>> 2. s/i$//\n>>\n>>> This change is inspired by the \"submodule: prevent backslash expantion\n>>> in submodule names\" patch[1]. If we'd had backslashes in the\n>>> TRASH_DIRECTORY all along that bug would have been fixed a long time\n>>> ago. This will flag such issues by marking tests that currently fail\n>>> with \"test_fails_on_unusual_directory_names=1\", ensure that new tests\n>>> aren't added unless a discussion is had about why the code can't\n>>> handle unusual pathnames, and prevent future regressions.\n>>>\n>>> 1. <20170407172306.172673-1-bmwill@google.com>\n>>> ---\n>>>  t/README      | 12 ++++++++++++\n>>>  t/test-lib.sh |  4 ++++\n>>>  2 files changed, 16 insertions(+)\n>>>\n>>> diff --git a/t/README b/t/README\n>>> index ab386c3681..314dd40221 100644\n>>> --- a/t/README\n>>> +++ b/t/README\n>>> @@ -345,6 +345,18 @@ assignment to variable 'test_description', like this:\n>>>       This test registers the following structure in the cache\n>>>       and tries to run git-ls-files with option --frotz.'\n>>>\n>>> +By default the tests will be run from a directory with a highly\n>>> +unusual filename that includes control characters, a newline, various\n>>> +punctuation etc., this is done to smoke out any bugs related to path\n>>> +handling. If for whatever reason the tests can't deal with such\n>>> +unusual path names, set:\n>>> +\n>>> +    test_fails_on_unusual_directory_names=1\n>>> +\n>>> +Before sourcing 'test-lib.sh' as described below. This option is\n>>> +mainly intended to grandfather in existing broken tests & code, and\n>>> +should usually not be used in new code, instead your tests or code\n>>> +probably need fixing.\n>>>\n>>>  Source 'test-lib.sh'\n>>>  --------------------\n>>> diff --git a/t/test-lib.sh b/t/test-lib.sh\n>>> index 13b5696822..089ff5ac7d 100644\n>>> --- a/t/test-lib.sh\n>>> +++ b/t/test-lib.sh\n>>> @@ -914,6 +914,10 @@ fi\n>>>\n>>>  # Test repository\n>>>  TRASH_DIRECTORY=\"trash directory.$(basename \"$0\" .sh)\"\n>>> +if test -z \"$test_fails_on_unusual_directory_names\" -a \"$(perl -e 'print 1+1' 2>/dev/null)\" = \"2\"\n>>> +then\n>>> +   TRASH_DIRECTORY=\"$TRASH_DIRECTORY.$(perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f')\"\n>>> +fi\n>>>  test -n \"$root\" && TRASH_DIRECTORY=\"$root/$TRASH_DIRECTORY\"\n>>>  case \"$TRASH_DIRECTORY\" in\n>>>  /*) ;; # absolute path is good\n>>> --\n>>> 2.11.0\n>>\n>>\n"},{"id":"316479","messageId":"CACBZZX7kMcTgKFkFN3OvVKVHU693PYhRFe6gyO4AirihNsUYmg@mail.gmail.com","threadId":"45642","inReplyTo":"CAM0VKjnwbCgCjEBr895068k4veoSGZMf8Cu7neoH=oofgWS2Cw@mail.gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-10T11:40:13Z","receivedAt":"2017-04-10T11:40:40Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Mon, Apr 10, 2017 at 1:19 PM, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n> On Mon, Apr 10, 2017 at 10:02 AM, Ævar Arnfjörð Bjarmason\n> <avarab@gmail.com> wrote:\n>> On Mon, Apr 10, 2017 at 3:47 AM, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n>>>> Change the test library to insert non-alphanumeric ASCII characters\n>>>> into the TRASH_DIRECTORY name, that's the directory the test library\n>>>> creates, chdirs to and runs each individual test from.\n>>>>\n>>>> Unless test_fails_on_unusual_directory_names=1 is declared before\n>>>> importing test-lib.sh (and if perl isn't available on the system), the\n>>>> trash directory will contain every non-alphanumeric character in\n>>>> ASCII, in order.\n>>>\n>>> At the very least there must be an easier way to disable this, e.g. a\n>>> command line option.\n>>>\n>>> This change is sure effective in smoking out bugs, but it's a major\n>>> annoyance during development when it comes to debugging a test.  At\n>>> first I could not even cd into the trash directory, because TAB\n>>> completing the directory name with all those non-printable characters\n>>> didn't work (this may be a bug in the bash-completion package).  And\n>>> simply copy-pasting the dirname didn't work either, because 'ls'\n>>>\n>>>   trash directory.t9902-completion.??????????????????????????????? !\"#$%&'()*+,-:;<=>?@[\\]^_`{|}~?\n>\n> Btw, it seems most of the failures in t9902-completion are triggered\n> by remote URL parsing.  The trash directory's new name contains '[',\n> ']' and even \"@[\", all of which are treated special by\n> connect.c:host_end(), a helper function of parse_connect_url(),\n> basically breaking anything trying to e.g.:\n>\n>   git fetch \"$(pwd)/other\"\n\nI'm going to work on this patch so that I can report on tests by type\nof character that triggers a failure.\n\n> What puzzles me most is that parse_connect_url() recognizes right at\n> its beginning that a remote URL like this is not actually an URL, so\n> why does it continue parsing it as if it were one?\n>\n> A few other failures are triggered by the ':' in the trash directory's\n> name, breaking the following commonly used pattern:\n>\n>   export GIT_CEILING_DIRECTORIES=\"$TRASH_DIRECTORY\" &&\n>   cd subdir &&\n>   test-git-pretending-it's-run-outside-of-a-repository\n\nDoes GIT_CEILING_DIRECTORIES support escaping somehow? E.g.\n\"foo\\:bar\". If so maybe we could use a wrapper to set it, if not\nthat's a bug in the ceiling dir feature, surely.\n\n> I think ':' should therefore be excluded from the trash directory, too.\n\nI think it's preferable to have some mode to use : in dirnames for\nthose tests that don't fail already, to protect them against future\nregressions. Disabling the use of a tricky character like \":\" invites\nfuture bugs & regressions.\n\n>>> After some headscratching, Sunday night may be my excuse, I figured\n>>> out that 'cd tr*' works...  only to be greeted with the ugliest-ever\n>>> three-line(!) shell prompt.\n>>>\n>>> Therefore I would say that this should not even be enabled by default\n>>> in test-lib.sh, so at least running a test directly from the command\n>>> line as ./t1234-foo.sh would considerately give us an easily\n>>> accessible trash directory even without any command line options.  We\n>>> could enable it for 'make test' by default via GIT_TEST_OPTS in\n>>> t/Makefile, though.\n>>\n>> This definitely needs some tweaking as you and Joachim point out. E.g.\n>> some capabilities check in the test suite to check if we can even\n>> create these sorts of paths on the local filesystem.\n>>\n>> A couple of comments on the above though:\n>>\n>> a) If we have something that's a more strict mode that makes tests\n>> fail due to buggy code in various scenarios, we gain the most from\n>> having it on by default\n>\n> I know, and I basically agree...\n>\n>> and having some optional mode to have devs\n>> e.g. disable it for manual inspection of the test directories.\n>\n> ... but this is just too gross to live as default outside of a CI\n> environment.\n>\n>> Most of the running of the test suite that really matters, i.e. just\n>> before the software is delivered to end users, is going to be running\n>> in some non-interactive build system preparing a package.\n>>\n>> b) I think any sort of magic like using it with 'make test', but not\n>> when the *.sh is manually run, will just lead to frustrating seemingly\n>> heisenbugs from people trying to debug the test suite when things do\n>> fail, i.e. you run 'make test' on some obscure platform we haven't\n>> fixed path bugs on, 10 fail, you manually inspect them and every one\n>> of them succeeds, because some --use-garbage-dirs option wasn't\n>> passed.\n>\n> That's not really an issue.  When a test fails during 'make test' with\n> garbage in trash dir names, the dev comes and attempts to cd into the\n> trash dir, and will be instantly reminded that non-printable\n> characters might play a role in the failure when he can't do so with\n> ordinary means.\n\nWhen a test fails for me I cd to t/ and re-run the test *.sh manually.\nI don't go straight to inspecting the existing trash.\n\nIf those manual invocations were running in some different mode &\nsucceeded that would be very confusing.\n\nIn any case, I'll try to come up with something more granular, e.g. to\ncategorize tests by failure type.\n\n\n\n>>>> This includes all the control characters, !, [], {} etc. the \".\"\n>>>> character isn't included because it's already in the directory name,\n>>>> and nor is \"/\" for obvious reasons, although that would actually work,\n>>>> we'd just create a subdirectory, which would make the tests harder to\n>>>> inspect when they fail.i\n>>>\n>>> 1. Heh.  How an additional subdirectory would make the tests harder to\n>>>    inspect is nothing compared to the effect of all the other\n>>>    characters.\n>>>\n>>> 2. s/i$//\n>>>\n>>>> This change is inspired by the \"submodule: prevent backslash expantion\n>>>> in submodule names\" patch[1]. If we'd had backslashes in the\n>>>> TRASH_DIRECTORY all along that bug would have been fixed a long time\n>>>> ago. This will flag such issues by marking tests that currently fail\n>>>> with \"test_fails_on_unusual_directory_names=1\", ensure that new tests\n>>>> aren't added unless a discussion is had about why the code can't\n>>>> handle unusual pathnames, and prevent future regressions.\n>>>>\n>>>> 1. <20170407172306.172673-1-bmwill@google.com>\n>>>> ---\n>>>>  t/README      | 12 ++++++++++++\n>>>>  t/test-lib.sh |  4 ++++\n>>>>  2 files changed, 16 insertions(+)\n>>>>\n>>>> diff --git a/t/README b/t/README\n>>>> index ab386c3681..314dd40221 100644\n>>>> --- a/t/README\n>>>> +++ b/t/README\n>>>> @@ -345,6 +345,18 @@ assignment to variable 'test_description', like this:\n>>>>       This test registers the following structure in the cache\n>>>>       and tries to run git-ls-files with option --frotz.'\n>>>>\n>>>> +By default the tests will be run from a directory with a highly\n>>>> +unusual filename that includes control characters, a newline, various\n>>>> +punctuation etc., this is done to smoke out any bugs related to path\n>>>> +handling. If for whatever reason the tests can't deal with such\n>>>> +unusual path names, set:\n>>>> +\n>>>> +    test_fails_on_unusual_directory_names=1\n>>>> +\n>>>> +Before sourcing 'test-lib.sh' as described below. This option is\n>>>> +mainly intended to grandfather in existing broken tests & code, and\n>>>> +should usually not be used in new code, instead your tests or code\n>>>> +probably need fixing.\n>>>>\n>>>>  Source 'test-lib.sh'\n>>>>  --------------------\n>>>> diff --git a/t/test-lib.sh b/t/test-lib.sh\n>>>> index 13b5696822..089ff5ac7d 100644\n>>>> --- a/t/test-lib.sh\n>>>> +++ b/t/test-lib.sh\n>>>> @@ -914,6 +914,10 @@ fi\n>>>>\n>>>>  # Test repository\n>>>>  TRASH_DIRECTORY=\"trash directory.$(basename \"$0\" .sh)\"\n>>>> +if test -z \"$test_fails_on_unusual_directory_names\" -a \"$(perl -e 'print 1+1' 2>/dev/null)\" = \"2\"\n>>>> +then\n>>>> +   TRASH_DIRECTORY=\"$TRASH_DIRECTORY.$(perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f')\"\n>>>> +fi\n>>>>  test -n \"$root\" && TRASH_DIRECTORY=\"$root/$TRASH_DIRECTORY\"\n>>>>  case \"$TRASH_DIRECTORY\" in\n>>>>  /*) ;; # absolute path is good\n>>>> --\n>>>> 2.11.0\n>>>\n>>>\n"},{"id":"316488","messageId":"20170410133856.qbmcif2it2gc6kdw@sigill.intra.peff.net","threadId":"45642","inReplyTo":"CACBZZX7kMcTgKFkFN3OvVKVHU693PYhRFe6gyO4AirihNsUYmg@mail.gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-10T13:38:57Z","receivedAt":"2017-04-10T13:39:04Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Apr 10, 2017 at 01:40:13PM +0200, Ævar Arnfjörð Bjarmason wrote:\n\n> > A few other failures are triggered by the ':' in the trash directory's\n> > name, breaking the following commonly used pattern:\n> >\n> >   export GIT_CEILING_DIRECTORIES=\"$TRASH_DIRECTORY\" &&\n> >   cd subdir &&\n> >   test-git-pretending-it's-run-outside-of-a-repository\n> \n> Does GIT_CEILING_DIRECTORIES support escaping somehow? E.g.\n> \"foo\\:bar\". If so maybe we could use a wrapper to set it, if not\n> that's a bug in the ceiling dir feature, surely.\n\nI don't think it does. But nor does $PATH (which is almost certainly\nanother source of breakage). And neither does info/alternates allow\npathnames with newline in them (that is the likely cause of a large\nnumber of failures, as it hits anywhere we use \"clone -s\").\n\nAre those bugs? Maybe. Certainly they are limitations. But are they ones\nanybody _cares_ about?  I think this may fall under \"if it hurts, don't\ndo it\". If there are security bugs where a malicious input can cause us\nto do something bad, that's something to care about. But that's very\ndifferent than asking \"do these tests run to completion with a funny\ninput\".\n\n  As an aside, I'd also question whether your patch might actually\n  _hide_ bugs. It's applying a blanket change to the on-disk state that\n  is obviously breaking some features. How many of those breakages are\n  things that show up as a test failure, and how many of them quietly\n  cause a test to do something else entirely, like failing its setup in\n  a way that makes the rest of the test a noop?\n\nSo given the pain this will cause to people actually looking at tests,\nand given that it's not clear to me if it has or will find any actual\nbugs, it seems premature to flip it on by default. If somebody wants to\nactually dig into these cases and look for actual bugs, I'm all for it.\n\nBut flipping the default and marking a bunch of tests blindly as \"well,\nthis fails\" hasn't made the world a better place. It's made it slightly\nworse.\n\n-Peff\n\nPS If you want to test various characters, I think the simplest way is\n   just:\n\n     make GIT_TEST_OPTS=--root=/tmp/look-a-col:on test\n"},{"id":"316489","messageId":"CAM0VKjmzwQJ4eYboP5BX1qm4tnsjfxsRPN7Asw1-=LAfWgTO-w@mail.gmail.com","threadId":"45642","inReplyTo":"CACBZZX7kMcTgKFkFN3OvVKVHU693PYhRFe6gyO4AirihNsUYmg@mail.gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2017-04-10T13:43:56Z","receivedAt":"2017-04-10T13:44:03Z","isPatch":true,"sender":{"key":"szeder.dev@gmail.com","avatar":"https://avatars.githubusercontent.com/u/116324?v=4"},"body":"On Mon, Apr 10, 2017 at 1:40 PM, Ævar Arnfjörð Bjarmason\n<avarab@gmail.com> wrote:\n> On Mon, Apr 10, 2017 at 1:19 PM, SZEDER Gábor <szeder.dev@gmail.com> wrote:\n\n>> A few other failures are triggered by the ':' in the trash directory's\n>> name, breaking the following commonly used pattern:\n>>\n>>   export GIT_CEILING_DIRECTORIES=\"$TRASH_DIRECTORY\" &&\n>>   cd subdir &&\n>>   test-git-pretending-it's-run-outside-of-a-repository\n>\n> Does GIT_CEILING_DIRECTORIES support escaping somehow? E.g.\n> \"foo\\:bar\". If so maybe we could use a wrapper to set it, if not\n> that's a bug in the ceiling dir feature, surely.\n\nIt doesn't, these $PATH-style variables in git, in the shell or\nelsewhere tend not to.\n\n\n>>> b) I think any sort of magic like using it with 'make test', but not\n>>> when the *.sh is manually run, will just lead to frustrating seemingly\n>>> heisenbugs from people trying to debug the test suite when things do\n>>> fail, i.e. you run 'make test' on some obscure platform we haven't\n>>> fixed path bugs on, 10 fail, you manually inspect them and every one\n>>> of them succeeds, because some --use-garbage-dirs option wasn't\n>>> passed.\n>>\n>> That's not really an issue.  When a test fails during 'make test' with\n>> garbage in trash dir names, the dev comes and attempts to cd into the\n>> trash dir, and will be instantly reminded that non-printable\n>> characters might play a role in the failure when he can't do so with\n>> ordinary means.\n>\n> When a test fails for me I cd to t/ and re-run the test *.sh manually.\n> I don't go straight to inspecting the existing trash.\n>\n> If those manual invocations were running in some different mode &\n> succeeded that would be very confusing.\n\nOn the contrary, that's a clue to where you might want to look.\nBesides, this is already the case when someone sets some options in\nGIT_TEST_OPTS in his config.mak.\n"},{"id":"316494","messageId":"64121361-6f91-5988-b5e2-9278cc84067f@durchholz.org","threadId":"45642","inReplyTo":"20170410133856.qbmcif2it2gc6kdw@sigill.intra.peff.net","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Joachim Durchholz","fromEmail":"jo@durchholz.org","sentAt":"2017-04-10T14:59:57Z","receivedAt":"2017-04-10T15:01:47Z","isPatch":true,"sender":{"key":"jo@durchholz.org","avatar":null},"body":"Am 10.04.2017 um 15:38 schrieb Jeff King:\n> Are those bugs? Maybe. Certainly they are limitations. But are they ones\n> anybody _cares_ about?  I think this may fall under \"if it hurts, don't\n> do it\".\n\nIt's not always possible to avoid that.\n\nURLs, for example, may contain \"funny characters\", including multi-byte \ncharacters of which the second byte is 0x0a. If they are guaranteed to \nalways be URL-encoded this isn't a problem, but then we still need to \nmake sure that URL-encoding does happen.\n\nNext source of funny characters that comes to my mind is submodules. \nThey derive their name from the URL by default, and the subdirectory \nname as well. Again, consider the multibyte name where the second \ncharacter is 0x0a. Or 0x80: À (uppercase A with accent grave) happens to \nhave that byte in UTF-8 encoding, Ẁ is U+1E80 which would be encoded as \n0x80 0x1e on an NTFS filesystem (barring additional coding steps in APIs \nor webservices, which further complicate the situation but don't usually \neliminate the problem, they just shift it around).\n\n > If there are security bugs where a malicious input can cause us\n> to do something bad, that's something to care about. But that's very\n> different than asking \"do these tests run to completion with a funny\n> input\".\n\nIf the tests do not complete, git is doing something unexpected.\nThat in itself is not a security hole, but there's a pretty good chance \nthat at least one of these ~230 unexpected things can be turned into \none, given enough time and motivation. The risk multiplies as this is \nshell scripting, where the path from \"string is misinterpreted\" to \n\"string is run as a command\" is considerably shorter than in other \nlanguages.\n"},{"id":"316500","messageId":"20170410165727.4lqtit5hkcxh32ew@sigill.intra.peff.net","threadId":"45642","inReplyTo":"64121361-6f91-5988-b5e2-9278cc84067f@durchholz.org","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-10T16:57:27Z","receivedAt":"2017-04-10T16:57:36Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Apr 10, 2017 at 04:59:57PM +0200, Joachim Durchholz wrote:\n\n> Am 10.04.2017 um 15:38 schrieb Jeff King:\n> > Are those bugs? Maybe. Certainly they are limitations. But are they ones\n> > anybody _cares_ about?  I think this may fall under \"if it hurts, don't\n> > do it\".\n> \n> It's not always possible to avoid that.\n\nSort of. I don't find anything wrong with saying \"your local filesystem\npath for a repository cannot contain newlines; if it does, some features\nmay be unavailable\".\n\n> URLs, for example, may contain \"funny characters\", including multi-byte\n> characters of which the second byte is 0x0a. If they are guaranteed to\n> always be URL-encoded this isn't a problem, but then we still need to make\n> sure that URL-encoding does happen.\n\nSure, but URLs have a way of encoding. And if we're not encoding when we\nshould, then that's a bug. But the arguments that are fed to things like\ngit-clone _aren't_ URLs. They're a specifier that uses some heuristics\nto decide between the various cases (URLs, host:path specifiers, local\npaths). If you feed syntactic garbage, aborting the operation (and\nfailing the test!) may be the right thing for git to do.\n\n> > If there are security bugs where a malicious input can cause us\n> > to do something bad, that's something to care about. But that's very\n> > different than asking \"do these tests run to completion with a funny\n> > input\".\n> \n> If the tests do not complete, git is doing something unexpected.\n\nI very much disagree with that. Git's test operate under a set of\nassumptions, and if you violate those assumptions, then the failures are\nnot meaningful.\n\nTake alternates, for instance. The on-disk storage format cannot\nrepresent paths with newlines in them. If a test does:\n\n  git clone -s \"$(pwd)\" parent.git child &&\n  test -d child\n\nthen that test is going to fail if the test directory has a newline in\nit. But that doesn't tell us anything meaningful. Maybe there is a bug\nand maybe there isn't, but we cannot know because the thing being tested\ncannot possibly work under the test environment given.\n\nYou can rewrite all the tests to say \"skip this test if there's a\nnewline in the test directory\". But to what end? It's work to write and\nto maintain, and we haven't gained new information.\n\n> That in itself is not a security hole, but there's a pretty good chance that\n> at least one of these ~230 unexpected things can be turned into one, given\n> enough time and motivation. The risk multiplies as this is shell scripting,\n> where the path from \"string is misinterpreted\" to \"string is run as a\n> command\" is considerably shorter than in other languages.\n\nSure, and I'd encourage people who are interested to dig through the\nresults and see if they can find a real problem. I looked at several and\ndidn't find anything that wasn't an example of the \"test assumptions\"\nthing above.\n\nI'll actually be surprised if there are shell injection problems in Git,\nbecause our scripts are usually pretty meticulous about quoting\nvariables and not doing crazy things with eval. I think the issues are\nmuch more likely to be like the \"submodule--helper --list\" thing I\npointed out, where we get phantom records in lists.\n\nBut again, I'm happy to be proven wrong. If there's a shell injection in\nGit it's clearly a bug and should be fixed. I just don't think\nplastering control characters into the test directory names all the time\nis a good way of finding those problems (and doesn't balance out the\ncost). Fuzzing the directory names and digging into specific cases _is_\na reasonable way to do it.\n\n-Peff\n"},{"id":"316504","messageId":"d1a71326-06bc-4133-de2b-7d42f525f7a4@durchholz.org","threadId":"45642","inReplyTo":"20170410165727.4lqtit5hkcxh32ew@sigill.intra.peff.net","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Joachim Durchholz","fromEmail":"jo@durchholz.org","sentAt":"2017-04-10T18:19:40Z","receivedAt":"2017-04-10T18:19:47Z","isPatch":true,"sender":{"key":"jo@durchholz.org","avatar":null},"body":"Am 10.04.2017 um 18:57 schrieb Jeff King:\n>>> If there are security bugs where a malicious input can cause us\n>>> to do something bad, that's something to care about. But that's very\n>>> different than asking \"do these tests run to completion with a funny\n>>> input\".\n>>\n>> If the tests do not complete, git is doing something unexpected.\n>\n> I very much disagree with that. Git's test operate under a set of\n> assumptions, and if you violate those assumptions, then the failures are\n> not meaningful.\n\nIn that case the tests do not validate that git can properly work with \nspecial characters.\nThat's a pretty big coverage gap.\n\n> Take alternates, for instance. The on-disk storage format cannot\n> represent paths with newlines in them. If a test does:\n>\n>   git clone -s \"$(pwd)\" parent.git child &&\n>   test -d child\n>\n> then that test is going to fail if the test directory has a newline in\n> it. But that doesn't tell us anything meaningful. Maybe there is a bug\n> and maybe there isn't, but we cannot know because the thing being tested\n> cannot possibly work under the test environment given.\n\nSure. Not all tests are meaningful in all environments.\nThat doesn't mean that the tests are generally meaningless.\n\nAlso, we're talking about two pretty different things here: gits \ninteraction with the file system, and git's interaction with whatever \nshell its scripts are using.\nIn an ideal world, these two aspects would be orthogonal and could be \ntested independently of each other. Since in practice we do have \ncorrelations and dependencies, this isn't always possible, but it's what \nwe should aim for.\n\n> You can rewrite all the tests to say \"skip this test if there's a\n> newline in the test directory\". But to what end? It's work to write and\n> to maintain, and we haven't gained new information.\n\nNot on that \"alternates\" thing (whatever that is), but we have a test \nthat will work and provide information on systems that do allow newlines.\n\n>> That in itself is not a security hole, but there's a pretty good chance that\n>> at least one of these ~230 unexpected things can be turned into one, given\n>> enough time and motivation. The risk multiplies as this is shell scripting,\n>> where the path from \"string is misinterpreted\" to \"string is run as a\n>> command\" is considerably shorter than in other languages.\n>\n> Sure, and I'd encourage people who are interested to dig through the\n> results and see if they can find a real problem. I looked at several and\n> didn't find anything that wasn't an example of the \"test assumptions\"\n> thing above.\n\nDon't assume that there's no risk just because you didn't find anything.\n\nAlso, git might not be the actual hole, but other software that relies \non git not doing anything awkward might fail that assumption and expose \nthe actual breach of security.\nYou could argue that it's not a problem in git, but it is. Unless and \nuntil the git docs clearly state that things may break if \"funny \ncharacters\" are being used, and where.\n\n> But again, I'm happy to be proven wrong.\n\nWith security, you need to be confident about the absence of /any/ type \nof hole, not the absence of a /specific/ type of hole such as a shell \ninjection.\nSo the way forward isn't proving you wrong by providing a specific \nexploit, it's making sure that no exploit with URLs and file names can \npossibly exist.\n\nNow if I'm reading things like \"heuristics\" and \"git uses URL-specific \ncode even after it has determined it's not a URL\"... well, that's the \nexact opposite of reassuring messages.\n\n > I just don't think\n> plastering control characters into the test directory names all the time\n> is a good way of finding those problems (and doesn't balance out the\n> cost).\n\nFair enough.\n"},{"id":"316509","messageId":"20170410192223.dbcysbbq5ei3wglj@sigill.intra.peff.net","threadId":"45642","inReplyTo":"d1a71326-06bc-4133-de2b-7d42f525f7a4@durchholz.org","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-10T19:22:24Z","receivedAt":"2017-04-10T19:22:37Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Apr 10, 2017 at 08:19:40PM +0200, Joachim Durchholz wrote:\n\n> > I very much disagree with that. Git's test operate under a set of\n> > assumptions, and if you violate those assumptions, then the failures are\n> > not meaningful.\n> \n> In that case the tests do not validate that git can properly work with\n> special characters.\n> That's a pretty big coverage gap.\n\nThat's not necessarily true either; there may be specific tests that\ncreate exotic paths and check them. My point is that the outcome depends\non that paths. So you cannot just take a test which runs \"git clone -s\"\nand expect it to work both with and without paths with newlines. You\nneed two tests, because there are two different outcomes, depending on\nthe test environment.\n\nSo if you're proposing to write a bunch of new tests that check the\nproper behavior under various conditions, go for it. But I don't think\nrunning the entire existing test suite with exotic paths tells you much.\nA failure might be a bug, or it might be that the thing is untestable\ngiven the environment.\n\n> > Sure, and I'd encourage people who are interested to dig through the\n> > results and see if they can find a real problem. I looked at several and\n> > didn't find anything that wasn't an example of the \"test assumptions\"\n> > thing above.\n> \n> Don't assume that there's no risk just because you didn't find anything.\n\nI'm not assuming that at all. Didn't I say somebody would need to dig\ninto all of these to find out the real answer? I'm only arguing that\nblindly adding this feature to the test suite has no value. It's the\ndigging that has value, and you do not even need to modify the test\nsuite to do it (you can just use --root).\n\nI've been trying to invite you to do that digging, if it's something you\ncare about.\n\n-Peff\n"},{"id":"316533","messageId":"CACBZZX7OfM-zivJAQMXdNarHDjAhzQhqGNZNs2QqDUyOo3AA0g@mail.gmail.com","threadId":"45642","inReplyTo":"20170409191117.25175-3-avarab@gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-10T23:23:32Z","receivedAt":"2017-04-10T23:23:59Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Sun, Apr 9, 2017 at 9:11 PM, Ævar Arnfjörð Bjarmason\n<avarab@gmail.com> wrote:\n> Change the test library to insert non-alphanumeric ASCII characters\n> into the TRASH_DIRECTORY name, that's the directory the test library\n> creates, chdirs to and runs each individual test from.\n\nI did a bit more work on getting more granularity on why things were\nfailing. I wrote a script[1] that runs each of the failing tests once\nwith each individual character in the non-alphanumeric ASCII range to\nnarrow down issues.\n\nI skipped the svn tests, and something went wrong in the middle of my\nrun to make the http tests fail on everything, but the gist of it is:\n\n* Most of the tests fail because git clone can't deal with cloning a\nrepo with a \\r in the path. The error we produce when we try is quite\nbad and doesn't indicate what went wrong:\n\n$ rm -rf /tmp/git.*; mkdir /tmp/git.$(perl -e 'print chr 13') && cd\n/tmp/git.* && git init --bare b && file b && git clone b c\n/b/tialized empty Git repository in /tmp/git.\nb: directory\nCloning into 'c'...\nfatal: '/tmp/git. /b' does not appear to be a git repository\nfatal: Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.\n\nSo file(1) shows it exists, a strace shows that git knows it exists at\nsome point, but something gets lost along the way.\n\n* Much of it fails due to GIT_CEILING_DIRECTORIES not working with\ndirs with \":\" in the name.\n\n* That leaves the rest at:\n\n$ grep FAIL results | grep -v -e svn -e svk  | awk '{print $1 \" \"\n$2}'|perl -nE 'chomp;my ($f, $c) = split / /, $_; push @{$f{$f}} =>\n$c; END { for my $k (sort keys %f) { say \"$k = \" . join \", \", map { $_\n< 32 ? $_ : \"$_(\" . chr($_) . \")\" } @{$f{$k}} } }'|grep -E -v\n'^.{150,}$'|grep -E -v -e '= 13$' -e '= 58\\(:\\)$' -e '= 13, 58\\(:\\)$'\nt0021-conversion.sh = 37(%), 58(:)\nt0060-path-utils.sh = 39(')\nt0302-credential-store.sh = 9, 32( ), 34(\"), 40((), 39('), 38(&),\n41()), 59(;), 60(<), 62(>), 96(`), 124(|)\nt1305-config-include.sh = 9, 13, 34(\"), 35(#), 59(;), 92(\\), 91([)\nt1500-rev-parse.sh = 9, 13\nt1510-repo-setup.sh = 13, 92(\\)\nt3900-i18n-commit.sh = 9, 32( ), 40((), 41()), 38(&), 59(;), 60(<),\n62(>), 124(|)\nt4030-diff-textconv.sh = 13, 34(\"), 96(`)\nt4031-diff-rewrite-binary.sh = 13, 34(\"), 96(`)\nt5150-request-pull.sh = 13, 92(\\)\nt5310-pack-bitmaps.sh = 9, 13\nt5407-post-rewrite-hook.sh = 34(\"), 96(`)\nt5505-remote.sh = 13, 35(#)\nt5516-fetch-push.sh = 13, 39(')\nt5601-clone.sh = 13, 34(\"), 39('), 96(`)\nt7003-filter-branch.sh = 34(\"), 96(`)\nt7008-grep-binary.sh = 13, 34(\"), 96(`)\nt7402-submodule-rebase.sh = 13, 34(\"), 96(`)\nt7405-submodule-merge.sh = 34(\"), 92(\\)\nt7406-submodule-update.sh = 13, 9, 34(\"), 35(#), 38(&), 59(;), 92(\\)\nt7407-submodule-foreach.sh = 13, 9, 42(*)\nt7504-commit-msg-hook.sh = 34(\"), 96(`)\nt7700-repack.sh = 9, 42(*)\nt9001-send-email.sh = 13, 34(\"), 96(`)\nt9200-git-cvsexportcommit.sh = 42(*), 63(?)\nt9300-fast-import.sh = 34(\"), 92(\\)\nt9400-git-cvsserver-server.sh = 13, 59(;)\nt9401-git-cvsserver-crlf.sh = 13, 59(;)\nt9402-git-cvsserver-refs.sh = 13, 59(;)\nt9600-cvsimport.sh = 42(*), 58(:), 63(?)\nt9601-cvsimport-vendor-branch.sh = 42(*), 58(:), 63(?)\nt9602-cvsimport-branches-tags.sh = 42(*), 63(?), 58(:)\nt9604-cvsimport-timestamps.sh = 42(*), 58(:), 63(?)\nt9700-perl-git.sh = 13, 92(\\)\n\nI've fixed a few in https://github.com/avar/git/commit/55395613fe\n\nThere's one segfault in there:\n\n$ ./t5601-clone.sh --root=\"xtmp.$(perl -e 'print chr 39')\" -v -i -d\n[...]\nCloning into 'ssh-bracket-clone-plink-4'...\nSegmentation fault\nnot ok 45 - single quoted plink.exe in GIT_SSH_COMMAND\n\n1. https://github.com/avar/git/commit/edc439c462\n"},{"id":"316542","messageId":"20170411003023.ynzc76yzdmomxthp@sigill.intra.peff.net","threadId":"45642","inReplyTo":"CACBZZX7OfM-zivJAQMXdNarHDjAhzQhqGNZNs2QqDUyOo3AA0g@mail.gmail.com","subject":"[PATCH] connect.c: handle errors from split_cmdline","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-11T00:30:23Z","receivedAt":"2017-04-11T00:30:33Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Apr 11, 2017 at 01:23:32AM +0200, Ævar Arnfjörð Bjarmason wrote:\n\n> There's one segfault in there:\n> \n> $ ./t5601-clone.sh --root=\"xtmp.$(perl -e 'print chr 39')\" -v -i -d\n> [...]\n> Cloning into 'ssh-bracket-clone-plink-4'...\n> Segmentation fault\n> not ok 45 - single quoted plink.exe in GIT_SSH_COMMAND\n\nHere's a fix for that one. I think there are a few other memory\nirregularities in that function, too. I'll send another patch in a\nminute, but I wanted to get this out in case you were working on it,\ntoo.\n\n-- >8 --\nSubject: [PATCH] connect.c: handle errors from split_cmdline\n\nCommit e9d9a8a4d (connect: handle putty/plink also in\nGIT_SSH_COMMAND, 2017-01-02) added a call to\nsplit_cmdline(), but checks only for a non-zero return to\nsee if we got any output. Since the function returns\nnegative values (and a NULL argv) on error, we end up\ndereferencing NULL and segfaulting.\n\nArguably we could report on the parsing error here, but it's\nprobably not worth it. This is a best-effort attempt to see\nif we are using plink. So we can simply return here with\n\"no, it wasn't plink\" and let the shell actually complain\nabout the bogus quoting.\n\nReported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\nSigned-off-by: Jeff King <peff@peff.net>\n---\n connect.c        | 2 +-\n t/t5601-clone.sh | 6 ++++++\n 2 files changed, 7 insertions(+), 1 deletion(-)\n\ndiff --git a/connect.c b/connect.c\nindex 7d65c1c73..6f2281ab0 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -730,7 +730,7 @@ static void handle_ssh_variant(const char *ssh_command, int is_cmdline,\n \t\tconst char **ssh_argv;\n \n \t\tp = xstrdup(ssh_command);\n-\t\tif (split_cmdline(p, &ssh_argv)) {\n+\t\tif (split_cmdline(p, &ssh_argv) > 0) {\n \t\t\tvariant = basename((char *)ssh_argv[0]);\n \t\t\t/*\n \t\t\t * At this point, variant points into the buffer\ndiff --git a/t/t5601-clone.sh b/t/t5601-clone.sh\nindex b52b8acf9..9c56f771b 100755\n--- a/t/t5601-clone.sh\n+++ b/t/t5601-clone.sh\n@@ -427,6 +427,12 @@ test_expect_success 'GIT_SSH_VARIANT overrides plink to tortoiseplink' '\n \texpect_ssh \"-batch -P 123\" myhost src\n '\n \n+test_expect_success 'clean failure on broken quoting' '\n+\ttest_must_fail \\\n+\t\tenv GIT_SSH_COMMAND=\"${SQ}plink.exe -v\" \\\n+\t\tgit clone \"[myhost:123]:src\" sq-failure\n+'\n+\n # Reset the GIT_SSH environment variable for clone tests.\n setup_ssh_wrapper\n \n-- \n2.12.2.952.g759391acc\n\n"},{"id":"316543","messageId":"20170411003554.2tjnn65vfco376kj@sigill.intra.peff.net","threadId":"45642","inReplyTo":"20170411003023.ynzc76yzdmomxthp@sigill.intra.peff.net","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-11T00:35:54Z","receivedAt":"2017-04-11T00:36:02Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Apr 10, 2017 at 08:30:23PM -0400, Jeff King wrote:\n\n> On Tue, Apr 11, 2017 at 01:23:32AM +0200, Ævar Arnfjörð Bjarmason wrote:\n> \n> > There's one segfault in there:\n> > \n> > $ ./t5601-clone.sh --root=\"xtmp.$(perl -e 'print chr 39')\" -v -i -d\n> > [...]\n> > Cloning into 'ssh-bracket-clone-plink-4'...\n> > Segmentation fault\n> > not ok 45 - single quoted plink.exe in GIT_SSH_COMMAND\n> \n> Here's a fix for that one. I think there are a few other memory\n> irregularities in that function, too. I'll send another patch in a\n> minute, but I wanted to get this out in case you were working on it,\n> too.\n\nActually, nevermind. I thought there was an issue with freeing via the\nresults of basename(), but there isn't. There is a minor memory leak,\nbut it's best squashed into my original patch, like so:\n\n-- >8 --\nSubject: [PATCH] connect.c: handle errors from split_cmdline\n\nCommit e9d9a8a4d (connect: handle putty/plink also in\nGIT_SSH_COMMAND, 2017-01-02) added a call to\nsplit_cmdline(), but checks only for a non-zero return to\nsee if we got any output. Since the function returns\nnegative values (and a NULL argv) on error, we end up\ndereferencing NULL and segfaulting.\n\nArguably we could report on the parsing error here, but it's\nprobably not worth it. This is a best-effort attempt to see\nif we are using plink. So we can simply return here with\n\"no, it wasn't plink\" and let the shell actually complain\nabout the bogus quoting.\n\nWhile we're here, let's also fix the leak when our split\nfails (as it turns out, split_cmdline can never return 0, so\nthis leak wasn't actually triggerable before).\n\nReported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\nSigned-off-by: Jeff King <peff@peff.net>\n---\n connect.c        | 6 ++++--\n t/t5601-clone.sh | 6 ++++++\n 2 files changed, 10 insertions(+), 2 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex 7d65c1c73..380997afd 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -729,18 +729,20 @@ static void handle_ssh_variant(const char *ssh_command, int is_cmdline,\n \t} else {\n \t\tconst char **ssh_argv;\n \n \t\tp = xstrdup(ssh_command);\n-\t\tif (split_cmdline(p, &ssh_argv)) {\n+\t\tif (split_cmdline(p, &ssh_argv) > 0) {\n \t\t\tvariant = basename((char *)ssh_argv[0]);\n \t\t\t/*\n \t\t\t * At this point, variant points into the buffer\n \t\t\t * referenced by p, hence we do not need ssh_argv\n \t\t\t * any longer.\n \t\t\t */\n \t\t\tfree(ssh_argv);\n-\t\t} else\n+\t\t} else {\n+\t\t\tfree(p);\n \t\t\treturn;\n+\t\t}\n \t}\n \n \tif (!strcasecmp(variant, \"plink\") ||\n \t    !strcasecmp(variant, \"plink.exe\"))\ndiff --git a/t/t5601-clone.sh b/t/t5601-clone.sh\nindex b52b8acf9..9c56f771b 100755\n--- a/t/t5601-clone.sh\n+++ b/t/t5601-clone.sh\n@@ -426,8 +426,14 @@ test_expect_success 'GIT_SSH_VARIANT overrides plink to tortoiseplink' '\n \tgit clone \"[myhost:123]:src\" ssh-bracket-clone-variant-4 &&\n \texpect_ssh \"-batch -P 123\" myhost src\n '\n \n+test_expect_success 'clean failure on broken quoting' '\n+\ttest_must_fail \\\n+\t\tenv GIT_SSH_COMMAND=\"${SQ}plink.exe -v\" \\\n+\t\tgit clone \"[myhost:123]:src\" sq-failure\n+'\n+\n # Reset the GIT_SSH environment variable for clone tests.\n setup_ssh_wrapper\n \n counter=0\n-- \n2.12.2.952.g759391acc\n\n"},{"id":"316546","messageId":"20170411011454.oteysryg4t44gebj@sigill.intra.peff.net","threadId":"45642","inReplyTo":"CACBZZX7OfM-zivJAQMXdNarHDjAhzQhqGNZNs2QqDUyOo3AA0g@mail.gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-11T01:14:54Z","receivedAt":"2017-04-11T01:15:05Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Apr 11, 2017 at 01:23:32AM +0200, Ævar Arnfjörð Bjarmason wrote:\n\n> * Most of the tests fail because git clone can't deal with cloning a\n> repo with a \\r in the path. The error we produce when we try is quite\n> bad and doesn't indicate what went wrong:\n> \n> $ rm -rf /tmp/git.*; mkdir /tmp/git.$(perl -e 'print chr 13') && cd\n> /tmp/git.* && git init --bare b && file b && git clone b c\n> /b/tialized empty Git repository in /tmp/git.\n> b: directory\n> Cloning into 'c'...\n> fatal: '/tmp/git. /b' does not appear to be a git repository\n> fatal: Could not read from remote repository.\n> \n> Please make sure you have the correct access rights\n> and the repository exists.\n> \n> So file(1) shows it exists, a strace shows that git knows it exists at\n> some point, but something gets lost along the way.\n\nIt's the round-trip through the config. It writes:\n\n  [remote \"origin\"]\n  url = /tmp/git.^M/b\n\ninto the config (where ^M is a literal CR). And then on reading it back,\nunquoted whitespace in config values is converted to spaces, which is\nwhy you see \"git. /b\" in the error message (the other ones are ugly\nbecause it's writing the raw CR in via printf, and your terminal\nrespects it. Try \"2>&1 | cat -A\" when debugging this sort of thing (our\nerror and warning messages clean up cruft like this already, but\ninformational messages don't always go through vreportf()).\n\nAnyway, something like this would fix it (it actually adds \"\\r\" to the\nconfig format, which is how we handle \\n and \\t; we could do it without\ntouching the parsing side if we taught store_write_pair() to recognize\nthat \\r needs to go in double-quotes).\n\ndiff --git a/config.c b/config.c\nindex 1a4d85537..4a36a37ba 100644\n--- a/config.c\n+++ b/config.c\n@@ -526,6 +526,9 @@ static char *parse_value(void)\n \t\t\tcase 'n':\n \t\t\t\tc = '\\n';\n \t\t\t\tbreak;\n+\t\t\tcase 'r':\n+\t\t\t\tc = '\\r';\n+\t\t\t\tbreak;\n \t\t\t/* Some characters escape as themselves */\n \t\t\tcase '\\\\': case '\"':\n \t\t\t\tbreak;\n@@ -2172,6 +2175,9 @@ static int store_write_pair(int fd, const char *key, const char *value)\n \t\tcase '\\t':\n \t\t\tstrbuf_addstr(&sb, \"\\\\t\");\n \t\t\tbreak;\n+\t\tcase '\\r':\n+\t\t\tstrbuf_addstr(&sb, \"\\\\r\");\n+\t\t\tbreak;\n \t\tcase '\"':\n \t\tcase '\\\\':\n \t\t\tstrbuf_addch(&sb, '\\\\');\n\n-Peff\n"},{"id":"316548","messageId":"5f6815f7-fd47-c690-9fe2-ad7077b7b670@durchholz.org","threadId":"45642","inReplyTo":"CACBZZX7OfM-zivJAQMXdNarHDjAhzQhqGNZNs2QqDUyOo3AA0g@mail.gmail.com","subject":"Re: [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name","fromName":"Joachim Durchholz","fromEmail":"jo@durchholz.org","sentAt":"2017-04-11T06:28:35Z","receivedAt":"2017-04-11T06:28:45Z","isPatch":true,"sender":{"key":"jo@durchholz.org","avatar":null},"body":"Am 11.04.2017 um 01:23 schrieb Ævar Arnfjörð Bjarmason:\n > * Much of it fails due to GIT_CEILING_DIRECTORIES not working with\n > dirs with \":\" in the name.\n\nOh. That might hit me: I'm using URLs for parent directory names in a \ncache directory.\n\nurlencode may or may not work:\n\n > t0021-conversion.sh = 37(%), 58(:)\n\nEven if it works, I'll have a cache directory with pretty unreadable \nnames. I had hoped I could avoid this kind of ugliness.\n"},{"id":"316562","messageId":"CACBZZX4LxL_ZBnFwkwXSMfBPGcKvOtHe3LeMtG9n2xRqWVZBkA@mail.gmail.com","threadId":"45642","inReplyTo":"20170411003554.2tjnn65vfco376kj@sigill.intra.peff.net","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-11T09:27:57Z","receivedAt":"2017-04-11T09:28:24Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Tue, Apr 11, 2017 at 2:35 AM, Jeff King <peff@peff.net> wrote:\n> On Mon, Apr 10, 2017 at 08:30:23PM -0400, Jeff King wrote:\n>\n>> On Tue, Apr 11, 2017 at 01:23:32AM +0200, Ævar Arnfjörð Bjarmason wrote:\n>>\n>> > There's one segfault in there:\n>> >\n>> > $ ./t5601-clone.sh --root=\"xtmp.$(perl -e 'print chr 39')\" -v -i -d\n>> > [...]\n>> > Cloning into 'ssh-bracket-clone-plink-4'...\n>> > Segmentation fault\n>> > not ok 45 - single quoted plink.exe in GIT_SSH_COMMAND\n>>\n>> Here's a fix for that one. I think there are a few other memory\n>> irregularities in that function, too. I'll send another patch in a\n>> minute, but I wanted to get this out in case you were working on it,\n>> too.\n>\n> Actually, nevermind. I thought there was an issue with freeing via the\n> results of basename(), but there isn't. There is a minor memory leak,\n> but it's best squashed into my original patch, like so:\n>\n> -- >8 --\n> Subject: [PATCH] connect.c: handle errors from split_cmdline\n>\n> Commit e9d9a8a4d (connect: handle putty/plink also in\n> GIT_SSH_COMMAND, 2017-01-02) added a call to\n> split_cmdline(), but checks only for a non-zero return to\n> see if we got any output. Since the function returns\n> negative values (and a NULL argv) on error, we end up\n> dereferencing NULL and segfaulting.\n>\n> Arguably we could report on the parsing error here, but it's\n> probably not worth it. This is a best-effort attempt to see\n> if we are using plink. So we can simply return here with\n> \"no, it wasn't plink\" and let the shell actually complain\n> about the bogus quoting.\n>\n> While we're here, let's also fix the leak when our split\n> fails (as it turns out, split_cmdline can never return 0, so\n> this leak wasn't actually triggerable before).\n>\n> Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n>  connect.c        | 6 ++++--\n>  t/t5601-clone.sh | 6 ++++++\n>  2 files changed, 10 insertions(+), 2 deletions(-)\n>\n> diff --git a/connect.c b/connect.c\n> index 7d65c1c73..380997afd 100644\n> --- a/connect.c\n> +++ b/connect.c\n> @@ -729,18 +729,20 @@ static void handle_ssh_variant(const char *ssh_command, int is_cmdline,\n>         } else {\n>                 const char **ssh_argv;\n>\n>                 p = xstrdup(ssh_command);\n> -               if (split_cmdline(p, &ssh_argv)) {\n> +               if (split_cmdline(p, &ssh_argv) > 0) {\n>                         variant = basename((char *)ssh_argv[0]);\n>                         /*\n>                          * At this point, variant points into the buffer\n>                          * referenced by p, hence we do not need ssh_argv\n>                          * any longer.\n>                          */\n>                         free(ssh_argv);\n> -               } else\n> +               } else {\n> +                       free(p);\n>                         return;\n> +               }\n>         }\n>\n>         if (!strcasecmp(variant, \"plink\") ||\n>             !strcasecmp(variant, \"plink.exe\"))\n> diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh\n> index b52b8acf9..9c56f771b 100755\n> --- a/t/t5601-clone.sh\n> +++ b/t/t5601-clone.sh\n> @@ -426,8 +426,14 @@ test_expect_success 'GIT_SSH_VARIANT overrides plink to tortoiseplink' '\n>         git clone \"[myhost:123]:src\" ssh-bracket-clone-variant-4 &&\n>         expect_ssh \"-batch -P 123\" myhost src\n>  '\n>\n> +test_expect_success 'clean failure on broken quoting' '\n> +       test_must_fail \\\n> +               env GIT_SSH_COMMAND=\"${SQ}plink.exe -v\" \\\n> +               git clone \"[myhost:123]:src\" sq-failure\n> +'\n> +\n>  # Reset the GIT_SSH environment variable for clone tests.\n>  setup_ssh_wrapper\n\nThanks. That makes it work.\n\nJunio: If you're not in some rush to pick this up I'll take this, fix\nup a bunch of other bugs & tests failures on odd --root directories\nand submit this and Jeff's \\r patch (after adding tests etc) along\nwith it.\n"},{"id":"316583","messageId":"20170411105408.332krulfrbqqi42k@sigill.intra.peff.net","threadId":"45642","inReplyTo":"CACBZZX4LxL_ZBnFwkwXSMfBPGcKvOtHe3LeMtG9n2xRqWVZBkA@mail.gmail.com","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2017-04-11T10:54:08Z","receivedAt":"2017-04-11T10:55:36Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Apr 11, 2017 at 11:27:57AM +0200, Ævar Arnfjörð Bjarmason wrote:\n\n> Junio: If you're not in some rush to pick this up I'll take this, fix\n> up a bunch of other bugs & tests failures on odd --root directories\n> and submit this and Jeff's \\r patch (after adding tests etc) along\n> with it.\n\nThat's fine by me. We may want to pick up the segfault one separately\n(though I don't think it's security-interesting).\n\n-Peff\n"},{"id":"316585","messageId":"CACBZZX5SooaEjLSy-dTRF-Aa2EnH8S2hS+w40mPTUOvonBNPDg@mail.gmail.com","threadId":"45642","inReplyTo":"20170411105408.332krulfrbqqi42k@sigill.intra.peff.net","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-11T11:06:10Z","receivedAt":"2017-04-11T11:06:35Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Tue, Apr 11, 2017 at 12:54 PM, Jeff King <peff@peff.net> wrote:\n> On Tue, Apr 11, 2017 at 11:27:57AM +0200, Ævar Arnfjörð Bjarmason wrote:\n>\n>> Junio: If you're not in some rush to pick this up I'll take this, fix\n>> up a bunch of other bugs & tests failures on odd --root directories\n>> and submit this and Jeff's \\r patch (after adding tests etc) along\n>> with it.\n>\n> That's fine by me. We may want to pick up the segfault one separately\n> (though I don't think it's security-interesting).\n\nUp to you, but in case it's less work for you & Junio I already have\nit in my branch of fallout from this series/discussion, so if it's\neasier for you/Junio I can submit it, and it would save my a tiny bit\nof work since I could just base on master instead of some other\nin-flight patch.\n"},{"id":"316973","messageId":"xmqqefwrluug.fsf@gitster.mtv.corp.google.com","threadId":"45642","inReplyTo":"CACBZZX5SooaEjLSy-dTRF-Aa2EnH8S2hS+w40mPTUOvonBNPDg@mail.gmail.com","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2017-04-17T00:51:35Z","receivedAt":"2017-04-17T00:51:43Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n>> That's fine by me. We may want to pick up the segfault one separately\n>> (though I don't think it's security-interesting).\n>\n> Up to you, but in case it's less work for you & Junio I already have\n> it in my branch of fallout from this series/discussion, so if it's\n> easier for you/Junio I can submit it, and it would save my a tiny bit\n> of work since I could just base on master instead of some other\n> in-flight patch.\n\nSure, with existing backlog I probably won't get around to it before\nyou have a clean series anyway.  It may not be a bad idea to base\nthe patches on 'maint', though, if possible.\n\nThanks.\n"},{"id":"316974","messageId":"xmqqa87fluqd.fsf@gitster.mtv.corp.google.com","threadId":"45642","inReplyTo":"CACBZZX5SooaEjLSy-dTRF-Aa2EnH8S2hS+w40mPTUOvonBNPDg@mail.gmail.com","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2017-04-17T00:54:02Z","receivedAt":"2017-04-17T00:54:16Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n> On Tue, Apr 11, 2017 at 12:54 PM, Jeff King <peff@peff.net> wrote:\n>> On Tue, Apr 11, 2017 at 11:27:57AM +0200, Ævar Arnfjörð Bjarmason wrote:\n>>\n>>> Junio: If you're not in some rush to pick this up I'll take this, fix\n>>> up a bunch of other bugs & tests failures on odd --root directories\n>>> and submit this and Jeff's \\r patch (after adding tests etc) along\n>>> with it.\n>>\n>> That's fine by me. We may want to pick up the segfault one separately\n>> (though I don't think it's security-interesting).\n\nThis one cleanly applied on top of sf/putty-w-args, so I'll queue it\nthere without introducing a new \"jk/fix-something\" topic.  That way,\neven when sf/putty-w-args were to be merged to older maintenance\ntrack, this fix will also be there as well.\n\nThanks.\n"},{"id":"317211","messageId":"CACBZZX6BefyW3iYHYq8FJ_ZzGDghF_V7mSGpC_RxB-V4NfQnEw@mail.gmail.com","threadId":"45642","inReplyTo":"xmqqa87fluqd.fsf@gitster.mtv.corp.google.com","subject":"Re: [PATCH] connect.c: handle errors from split_cmdline","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2017-04-19T10:59:12Z","receivedAt":"2017-04-19T10:59:38Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Mon, Apr 17, 2017 at 2:54 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n>\n>> On Tue, Apr 11, 2017 at 12:54 PM, Jeff King <peff@peff.net> wrote:\n>>> On Tue, Apr 11, 2017 at 11:27:57AM +0200, Ævar Arnfjörð Bjarmason wrote:\n>>>\n>>>> Junio: If you're not in some rush to pick this up I'll take this, fix\n>>>> up a bunch of other bugs & tests failures on odd --root directories\n>>>> and submit this and Jeff's \\r patch (after adding tests etc) along\n>>>> with it.\n>>>\n>>> That's fine by me. We may want to pick up the segfault one separately\n>>> (though I don't think it's security-interesting).\n>\n> This one cleanly applied on top of sf/putty-w-args, so I'll queue it\n> there without introducing a new \"jk/fix-something\" topic.  That way,\n> even when sf/putty-w-args were to be merged to older maintenance\n> track, this fix will also be there as well.\n\nThanks. That resubmission is going to take me longer than I expected,\nso it makes sense to have that branch applied independently.\n"}]}