Commit Graph

54872 Commits

Author SHA1 Message Date
Johannes Schindelin
0060fd1511 clone --recurse-submodules: prevent name squatting on Windows
In addition to preventing `.git` from being tracked by Git, on Windows
we also have to prevent `git~1` from being tracked, as the default NTFS
short name (also known as the "8.3 filename") for the file name `.git`
is `git~1`, otherwise it would be possible for malicious repositories to
write directly into the `.git/` directory, e.g. a `post-checkout` hook
that would then be executed _during_ a recursive clone.

When we implemented appropriate protections in 2b4c6efc82 (read-cache:
optionally disallow NTFS .git variants, 2014-12-16), we had analyzed
carefully that the `.git` directory or file would be guaranteed to be
the first directory entry to be written. Otherwise it would be possible
e.g. for a file named `..git` to be assigned the short name `git~1` and
subsequently, the short name generated for `.git` would be `git~2`. Or
`git~3`. Or even `~9999999` (for a detailed explanation of the lengths
we have to go to protect `.gitmodules`, see the commit message of
e7cb0b4455 (is_ntfs_dotgit: match other .git files, 2018-05-11)).

However, by exploiting two issues (that will be addressed in a related
patch series close by), it is currently possible to clone a submodule
into a non-empty directory:

- On Windows, file names cannot end in a space or a period (for
  historical reasons: the period separating the base name from the file
  extension was not actually written to disk, and the base name/file
  extension was space-padded to the full 8/3 characters, respectively).
  Helpfully, when creating a directory under the name, say, `sub.`, that
  trailing period is trimmed automatically and the actual name on disk
  is `sub`.

  This means that while Git thinks that the submodule names `sub` and
  `sub.` are different, they both access `.git/modules/sub/`.

- While the backslash character is a valid file name character on Linux,
  it is not so on Windows. As Git tries to be cross-platform, it
  therefore allows backslash characters in the file names stored in tree
  objects.

  Which means that it is totally possible that a submodule `c` sits next
  to a file `c\..git`, and on Windows, during recursive clone a file
  called `..git` will be written into `c/`, of course _before_ the
  submodule is cloned.

Note that the actual exploit is not quite as simple as having a
submodule `c` next to a file `c\..git`, as we have to make sure that the
directory `.git/modules/b` already exists when the submodule is checked
out, otherwise a different code path is taken in `module_clone()` that
does _not_ allow a non-empty submodule directory to exist already.

Even if we will address both issues nearby (the next commit will
disallow backslash characters in tree entries' file names on Windows,
and another patch will disallow creating directories/files with trailing
spaces or periods), it is a wise idea to defend in depth against this
sort of attack vector: when submodules are cloned recursively, we now
_require_ the directory to be empty, addressing CVE-2019-1349.

Note: the code path we patch is shared with the code path of `git
submodule update --init`, which must not expect, in general, that the
directory is empty. Hence we have to introduce the new option
`--force-init` and hand it all the way down from `git submodule` to the
actual `git submodule--helper` process that performs the initial clone.

Reported-by: Nicolas Joly <Nicolas.Joly@microsoft.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-12-04 13:20:05 +01:00
Jeff King
a52ed76142 fast-import: disallow "feature import-marks" by default
As with export-marks in the previous commit, import-marks can access the
filesystem. This is significantly less dangerous than export-marks
because it only involves reading from arbitrary paths, rather than
writing them. However, it could still be surprising and have security
implications (e.g., exfiltrating data from a service that accepts
fast-import streams).

Let's lump it (and its "if-exists" counterpart) in with export-marks,
and enable the in-stream version only if --allow-unsafe-features is set.

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:04 +01:00
Jeff King
68061e3470 fast-import: disallow "feature export-marks" by default
The fast-import stream command "feature export-marks=<path>" lets the
stream write marks to an arbitrary path. This may be surprising if you
are running fast-import against an untrusted input (which otherwise
cannot do anything except update Git objects and refs).

Let's disallow the use of this feature by default, and provide a
command-line option to re-enable it (you can always just use the
command-line --export-marks as well, but the in-stream version provides
an easy way for exporters to control the process).

This is a backwards-incompatible change, since the default is flipping
to the new, safer behavior. However, since the main users of the
in-stream versions would be import/export-based remote helpers, and
since we trust remote helpers already (which are already running
arbitrary code), we'll pass the new option by default when reading a
remote helper's stream. This should minimize the impact.

Note that the implementation isn't totally simple, as we have to work
around the fact that fast-import doesn't parse its command-line options
until after it has read any "feature" lines from the stream. This is how
it lets command-line options override in-stream. But in our case, it's
important to parse the new --allow-unsafe-features first.

There are three options for resolving this:

  1. Do a separate "early" pass over the options. This is easy for us to
     do because there are no command-line options that allow the
     "unstuck" form (so there's no chance of us mistaking an argument
     for an option), though it does introduce a risk of incorrect
     parsing later (e.g,. if we convert to parse-options).

  2. Move the option parsing phase back to the start of the program, but
     teach the stream-reading code never to override an existing value.
     This is tricky, because stream "feature" lines override each other
     (meaning we'd have to start tracking the source for every option).

  3. Accept that we might parse a "feature export-marks" line that is
     forbidden, as long we don't _act_ on it until after we've parsed
     the command line options.

     This would, in fact, work with the current code, but only because
     the previous patch fixed the export-marks parser to avoid touching
     the filesystem.

     So while it works, it does carry risk of somebody getting it wrong
     in the future in a rather subtle and unsafe way.

I've gone with option (1) here as simple, safe, and unlikely to cause
regressions.

This fixes CVE-2019-1348.

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:04 +01:00
Jeff King
019683025f fast-import: delay creating leading directories for export-marks
When we parse the --export-marks option, we don't immediately open the
file, but we do create any leading directories. This can be especially
confusing when a command-line option overrides an in-stream one, in
which case we'd create the leading directory for the in-stream file,
even though we never actually write the file.

Let's instead create the directories just before opening the file, which
means we'll create only useful directories. Note that this could change
the handling of relative paths if we chdir() in between, but we don't
actually do so; the only permanent chdir is from setup_git_directory()
which runs before either code path (potentially we should take the
pre-setup dir into account to avoid surprising the user, but that's an
orthogonal change).

The test just adapts the existing "override" test to use paths with
leading directories. This checks both that the correct directory is
created (which worked before but was not tested), and that the
overridden one is not (our new fix here).

While we're here, let's also check the error result of
safe_create_leading_directories(). We'd presumably notice any failure
immediately after when we try to open the file itself, but we can give a
more specific error message in this case.

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:04 +01:00
Jeff King
e075dba372 fast-import: stop creating leading directories for import-marks
When asked to import marks from "subdir/file.marks", we create the
leading directory "subdir" if it doesn't exist. This makes no sense for
importing marks, where we only ever open the path for reading.

Most of the time this would be a noop, since if the marks file exists,
then the leading directories exist, too. But if it doesn't (e.g.,
because --import-marks-if-exists was used), then we'd create the useless
directory.

This dates back to 580d5f83e7 (fast-import: always create marks_file
directories, 2010-03-29). Even then it was useless, so it seems to have
been added in error alongside the --export-marks case (which _is_
helpful).

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:04 +01:00
Jeff King
11e934d56e fast-import: tighten parsing of boolean command line options
We parse options like "--max-pack-size=" using skip_prefix(), which
makes sense to get at the bytes after the "=". However, we also parse
"--quiet" and "--stats" with skip_prefix(), which allows things like
"--quiet-nonsense" to behave like "--quiet".

This was a mistaken conversion in 0f6927c229 (fast-import: put option
parsing code in separate functions, 2009-12-04). Let's tighten this to
an exact match, which was the original intent.

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:04 +01:00
Jeff King
816f806786 t9300: create marks files for double-import-marks test
Our tests confirm that providing two "import-marks" options in a
fast-import stream is an error. However, the invoked command would fail
even without covering this case, because the marks files themselves do
not actually exist.  Let's create the files to make sure we fail for the
right reason (we actually do, because the option parsing happens before
we open anything, but this future-proofs our test).

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:03 +01:00
Jeff King
f94804c1f2 t9300: drop some useless uses of cat
These waste a process, and make the line longer than it needs to be.

Signed-off-by: Jeff King <peff@peff.net>
2019-12-04 13:20:03 +01:00
Junio C Hamano
8104ec994e Git 2.21
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-24 07:55:19 -08:00
Junio C Hamano
572e460b7a Merge branch 'yn/checkout-doc-fix'
Doc fix.

* yn/checkout-doc-fix:
  checkout doc: fix an unmatched double-quote pair
2019-02-24 07:18:00 -08:00
Junio C Hamano
a1997dad1f l10n-2.21.0-rnd2
-----BEGIN PGP SIGNATURE-----
 
 iQJNBAABCgA3FiEET/4dIHc7EQTOoGRdx6TpG3VEeigFAlxyJB8ZHHdvcmxkaGVs
 bG8ubmV0QGdtYWlsLmNvbQAKCRDHpOkbdUR6KHP0D/98LexaqaOuXJJcJ6rqNtje
 PEzWoxz90XgbJxkRbV8bOxvWXW62YXSXICNhuAyN8o9DmdyXImRtJmYJMobHeliP
 L8+h0bS2jhak1+VEshUs7PR8K2y8UBGHeQGKyNMccsqCKUBTeZo4xlA7NW+VOC5j
 MzYcdSMG9MCV/eMgmT0KKle26IUM9JakZOSr/pfgSTtOsBQQUcI1RO/U4vobYtkc
 ExBWHh/+yl/Ear9FwyJEGfUJLfbfvDdbzeekoiGV7wR+syDb3ozbwgwOIH+RkT+k
 lRXtbHSwhH2wa2JlcOhieM2Z2cka50UkkI6ZqRXS3Tzczc5uUpOAdX4Ixs7gRLuX
 WPIWAxYyFRgVSBLbwUDcGYztrYpPIOF7BSxE1TlG9KplmjRa+w8FSarsdkKPD0hM
 ajRDmDjcaMNxbqi4t+TkBmK2Fgy162T/mRDA2nimyoPChE1DGuXoeFNrg0gNZ7tv
 u5q7mK4jljR2BCUWmCqSrG+pVFXjSEcoalt6Fhhq4AwU+njULpF/8zgIV+BNqLJi
 GrPiSEzrF+V1+UUof+rbyjFK7L24We0Hk9YREbuy2CMeqx+OCyCR1kBTYsmw+2IG
 AsEJRmcqOgdtv2wjWUicBlWd+a6Q4bxIfcTXVMBKtkCsmzj7ZHxTpQurfpu9yqt7
 obTGWSRTPvI8M3U1fB14hg==
 =2TXi
 -----END PGP SIGNATURE-----

Merge tag 'l10n-2.21.0-rnd2' of git://github.com/git-l10n/git-po

l10n-2.21.0-rnd2

* tag 'l10n-2.21.0-rnd2' of git://github.com/git-l10n/git-po:
  l10n: bg.po: Updated Bulgarian translation (4363t)
  l10n: update German translation
  l10n: zh_CN: Revision for git v2.21.0 l10n
  l10n: zh_CN: for git v2.21.0 l10n round 1~2
  l10n: bg.po: correct typo
  l10n: Update Swedish translation (4363t0f0u)
  l10n: de.po: fix grammar in message for tag.c
  l10n: de.po: fix a message for index-pack.c
  l10n: de.po: consistent translation of 'root commit'
  l10n: it: update the Italian translation
  l10n: es: 2.21.0 round 2
  l10n: el: add Greek l10n team and essential translations
  l10n: fr.po v2.21.0 rnd 2
  l10n: fr.po Fix some typos from round3
  l10n: fr.po Fix some typos
  l10n: Fixes to Catalan translation
  l10n: git.pot: v2.21.0 round 2 (3 new, 3 removed)
  l10n: git.pot: v2.21.0 round 1 (214 new, 38 removed)
  l10n: zh_CN: fix typo of submodule init message
  l10n: Update Catalan translation
2019-02-24 07:03:39 -08:00
Johannes Schindelin
39ffebd23b README: adjust for final Azure Pipeline ID
During the six months of development of the Azure Pipelines support, the
patches went through quite a few iterations of changes, and to test
those iterations, a temporary build definition was used.

In the meantime, Azure Pipelines support made it to `master`, and we now
have a regular Azure Pipeline, installed via the common GitHub App
workflow. This new pipeline has a different name (git.git instead of
test-git.git), and a new ID (11 instead of 2).

Let's adjust the badge in our README to reflect that final shape of the
Azure Pipeline.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-23 21:27:04 -08:00
Yoichi Nakayama
c5c0a5ff1d checkout doc: fix an unmatched double-quote pair
Signed-off-by: Yoichi Nakayama <yoichi.nakayama@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-23 21:24:25 -08:00
Alexander Shopov
ab8f4f5d73 l10n: bg.po: Updated Bulgarian translation (4363t)
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
2019-02-23 23:29:23 +02:00
Junio C Hamano
c65a2884ea Merge branch 'ab/bsd-fixes'
Test portability fix.

* ab/bsd-fixes:
  commit-graph tests: fix unportable "dd" invocation
  tests: fix unportable "\?" and "\+" regex syntax
2019-02-22 21:20:19 -08:00
Junio C Hamano
60a3fbf500 Merge branch 'ab/workaround-dash-bug-in-test'
* ab/workaround-dash-bug-in-test:
  tests: avoid syntax triggering old dash bug
2019-02-22 21:20:19 -08:00
Ævar Arnfjörð Bjarmason
b9cc405612 commit-graph tests: fix unportable "dd" invocation
Change an unportable invocation of "dd" with count=0, that wanted to
truncate the commit-graph file.  In POSIX it is unspecified what
happens when count=0 is provided[1]. The NetBSD "dd" behavior
differs from GNU (and seemingly other BSDs), which has left this test
broken since d2b86fbaa1 ("commit-graph: fix buffer read-overflow",
2019-01-15).

Copying from /dev/null would seek/truncate to seek=$zero_pos and
stop immediately after that (without being able to copy anything),
which is the right way to truncate the file.

1. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/dd.html

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Helped-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-22 11:20:56 -08:00
Jiang Xin
e7bc80b7ea Merge branch 'master' of https://github.com/ralfth/git-po-de 2019-02-22 22:18:12 +08:00
Ralf Thielow
e5a5d5c2c8 l10n: update German translation
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Reviewed-by: Matthias Rüster <matthias.ruester@gmail.com>
2019-02-22 08:47:26 +01:00
Ævar Arnfjörð Bjarmason
4abf20f004 tests: fix unportable "\?" and "\+" regex syntax
Fix widely supported but non-POSIX basic regex syntax introduced in
[1] and [2]. On GNU, NetBSD and FreeBSD the following works:

    $ echo xy >f
    $ grep 'xy\?' f; echo $?
    xy
    0

The same goes for "\+". The "?" and "+" syntax is not in the BRE
syntax, just in ERE, but on some implementations it can be invoked by
prefixing the meta-operator with "\", but not on OpenBSD:

    $ uname -a
    OpenBSD obsd.my.domain 6.2 GENERIC#132 amd64
    $ grep --version
    grep version 0.9
    $ grep 'xy\?' f; echo $?
    1

Let's fix this by moving to ERE syntax instead, where "?" and "+" are
universally supported:

    $ grep -E 'xy?' f; echo $?
    xy
    0

1. 2ed5c8e174 ("describe: setup working tree for --dirty", 2019-02-03)
2. c801170b0c ("t6120: test for describe with a bare repository",
   2019-02-03)

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-21 20:58:19 -08:00
Jiang Xin
54fca18313 Merge branch 'bg-submodule-helper-typo' of github.com:pclouds/git-po 2019-02-20 21:40:54 +08:00
Fangyi Zhou
8e4e0555f2 l10n: zh_CN: Revision for git v2.21.0 l10n
Signed-off-by: Fangyi Zhou <fangyi.zhou@yuriko.moe>
2019-02-20 21:33:56 +08:00
Jiang Xin
069917778f l10n: zh_CN: for git v2.21.0 l10n round 1~2
Translate 214 new messages (4363t0f0u) for git 2.21.0.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2019-02-20 21:33:56 +08:00
Nguyễn Thái Ngọc Duy
c2d8f4c73a l10n: bg.po: correct typo
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
2019-02-20 20:32:40 +07:00
Peter Krefting
34692d22fa l10n: Update Swedish translation (4363t0f0u)
Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2019-02-20 08:56:20 +01:00
Junio C Hamano
35ee755a8c Git 2.21-rc2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-19 13:20:23 -08:00
Junio C Hamano
c5b456b4b8 Merge branch 'js/test-tool-gen-nuls'
* js/test-tool-gen-nuls:
  tests: teach the test-tool to generate NUL bytes and use it
2019-02-19 13:18:08 -08:00
Junio C Hamano
2c804ffe77 Merge branch 'mk/t5562-no-input-to-too-large-an-input-test'
* mk/t5562-no-input-to-too-large-an-input-test:
  t5562: do not depend on /dev/zero
  Revert "t5562: replace /dev/zero with a pipe from generate_zero_bytes"
2019-02-19 13:18:08 -08:00
Junio C Hamano
455d0beb13 Merge branch 'mk/t5562-do-not-reuse-output-files'
* mk/t5562-do-not-reuse-output-files:
  t5562: do not reuse output files
2019-02-19 13:18:08 -08:00
Max Kirillov
0539071b1e t5562: do not reuse output files
Some expected failures of git-http-backend leaves running its children
(receive-pack or upload-pack) which still hold opened descriptors
to act.err and with some probability they live long enough to write
there their failure messages after next test has already truncated
the files. This causes occasional failures of the test script.

Avoid the issue by using separated output and error file for each test,
apprending the test number to their name.

Reported-by: Carlo Arenas <carenas@gmail.com>
Helped-by: Carlo Arenas <carenas@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-19 13:04:37 -08:00
Johannes Schindelin
d5cfd142ec tests: teach the test-tool to generate NUL bytes and use it
In cc95bc2025 (t5562: replace /dev/zero with a pipe from
generate_zero_bytes, 2019-02-09), we replaced usage of /dev/zero (which
is not available on NonStop, apparently) by a Perl script snippet to
generate NUL bytes.

Sadly, it does not seem to work on NonStop, as t5562 reportedly hangs.

Worse, this also hangs in the Ubuntu 16.04 agents of the CI builds on
Azure Pipelines: for some reason, the Perl script snippet that is run
via `generate_zero_bytes` in t5562's 'CONTENT_LENGTH overflow ssite_t'
test case tries to write out an infinite amount of NUL bytes unless a
broken pipe is encountered, that snippet never encounters the broken
pipe, and keeps going until the build times out.

Oddly enough, this does not reproduce on the Windows and macOS agents,
nor in a local Ubuntu 18.04.

This developer tried for a day to figure out the exact circumstances
under which this hang happens, to no avail, the details remain a
mystery.

In the end, though, what counts is that this here change incidentally
fixes that hang (maybe also on NonStop?). Even more positively, it gets
rid of yet another unnecessary Perl invocation.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-19 10:22:21 -08:00
Max Kirillov
7094175075 t5562: do not depend on /dev/zero
It was reported [1] that NonStop platform does not have /dev/zero.

The test uses /dev/zero as a dummy input. Passing case (http-backed
failed because of too big input size) should not be reading anything
from it. If http-backend would erroneously try to read any data
returning EOF probably would be even safer than providing some
meaningless data.

Replace /dev/zero with /dev/null to avoid issues with platforms which do
not have /dev/zero.

[1] https://public-inbox.org/git/20190209185930.5256-4-randall.s.becker@rogers.com/

Reported-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-19 10:19:32 -08:00
Junio C Hamano
d99194822b Revert "t5562: replace /dev/zero with a pipe from generate_zero_bytes"
Revert cc95bc20 ("t5562: replace /dev/zero with a pipe from
generate_zero_bytes", 2019-02-09), as not feeding anything to the
command is a better way to test it.
2019-02-19 10:19:22 -08:00
Sebastian Staudt
a8a6b15c01 l10n: de.po: fix grammar in message for tag.c
Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
2019-02-19 13:53:29 +01:00
Sebastian Staudt
40cbe8ad14 l10n: de.po: fix a message for index-pack.c
Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
2019-02-19 13:53:29 +01:00
Sebastian Staudt
567349f54e l10n: de.po: consistent translation of 'root commit'
'root commit' is usually translated as 'Root-Commit'. But in one
occasion it‘s translated as 'Basis-Commit' which is the translation
for 'base commit'.

Signed-off-by: Sebastian Staudt <koraktor@gmail.com>
2019-02-19 13:53:29 +01:00
Alessandro Menti
bb236fb44a l10n: it: update the Italian translation
Signed-off-by: Alessandro Menti <alessandro.menti@alessandromenti.it>
2019-02-19 10:07:24 +08:00
Jiang Xin
10e6e9fdea Merge branch 'master' of https://github.com/Softcatala/git-po 2019-02-17 15:28:15 +08:00
Christopher Diaz Riveros
cf69bcadee l10n: es: 2.21.0 round 2
Signed-off-by: Christopher Diaz Riveros <chrisadr@gentoo.org>
2019-02-16 15:22:07 -05:00
Jiang Xin
9922d5c357 Merge branch 'fr_2.21.0_rnd2' of git://github.com/jnavila/git 2019-02-16 09:54:53 +08:00
Jimmy Angelakos
4953cf69a3 l10n: el: add Greek l10n team and essential translations
Signed-off-by: Jimmy Angelakos <vyruss@hellug.gr>
2019-02-16 09:49:53 +08:00
Jean-Noël Avila
b3225a4183 l10n: fr.po v2.21.0 rnd 2
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
2019-02-15 22:19:50 +01:00
Fabien Villepinte
02705d38d4 l10n: fr.po Fix some typos from round3
Signed-off-by: Fabien Villepinte <fabien.villepinte@gmail.com>
2019-02-15 22:14:23 +01:00
Fabien Villepinte
5a05494049 l10n: fr.po Fix some typos
Signed-off-by: Fabien Villepinte <fabien.villepinte@gmail.com>
2019-02-15 22:14:23 +01:00
Johannes Schindelin
ca1b411648 mingw: safe-guard a bit more against getenv() problems
Running up to v2.21.0, we fixed two bugs that were made prominent by the
Windows-specific change to retain copies of only the 30 latest getenv()
calls' returned strings, invalidating any copies of previous getenv()
calls' return values.

While this really shines a light onto bugs of the form where we hold
onto getenv()'s return values without copying them, it is also a real
problem for users.

And even if Jeff King's patches merged via 773e408881 (Merge branch
'jk/save-getenv-result', 2019-01-29) provide further work on that front,
we are far from done. Just one example: on Windows, we unset environment
variables when spawning new processes, which potentially invalidates
strings that were previously obtained via getenv(), and therefore we
have to duplicate environment values that are somehow involved in
spawning new processes (e.g. GIT_MAN_VIEWER in show_man_page()).

We do not have a chance to investigate, let address, all of those issues
in time for v2.21.0, so let's at least help Windows users by increasing
the number of getenv() calls' return values that are kept valid. The
number 64 was determined by looking at the average number of getenv()
calls per process in the entire test suite run on Windows (which is
around 40) and then adding a bit for good measure. And it is a power of
two (which would have hit yesterday's theme perfectly).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-02-15 10:25:28 -08:00
Jordi Mas
bdc017d268 l10n: Fixes to Catalan translation
Signed-off-by: Jordi Mas <jmas@softcatala.org>
2019-02-15 16:43:59 +01:00
Jiang Xin
7f95bc7a20 l10n: git.pot: v2.21.0 round 2 (3 new, 3 removed)
Introduce 3 update messages for v2.21.0 l10n round 2 from commit
32ceace39f (Fix typos in translatable strings for v2.21.0, 2019-02-11).

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2019-02-15 10:21:59 +08:00
Jiang Xin
a603d9406e Merge branch 'master' of git://git.kernel.org/pub/scm/git/git 2019-02-15 10:09:07 +08:00
Junio C Hamano
2d08f3deb9 Merge branch 'ea/rebase-compat-doc-fix'
* ea/rebase-compat-doc-fix:
  docs/git-rebase: remove redundant entry in incompatible options list
2019-02-14 14:28:22 -08:00
Junio C Hamano
4e09a7b540 Merge branch 'jc/no-grepping-for-strerror-in-tests'
* jc/no-grepping-for-strerror-in-tests:
  t1404: do not rely on the exact phrasing of strerror()
2019-02-14 14:28:21 -08:00