diff --git a/mercurial/changelog.py b/mercurial/changelog.py --- a/mercurial/changelog.py +++ b/mercurial/changelog.py @@ -202,6 +202,11 @@ class changelog(revlog.revlog): user=None, date=None, extra={}): user = user.strip() + # An empty username or a username with a "\n" will make the + # revision text contain two "\n\n" sequences -> corrupt + # repository since read cannot unpack the revision. + if not user: + raise error.RevlogError(_("empty username")) if "\n" in user: raise error.RevlogError(_("username %s contains a newline") % repr(user)) diff --git a/tests/test-committer b/tests/test-committer --- a/tests/test-committer +++ b/tests/test-committer @@ -29,3 +29,8 @@ echo "username = " >> .hg/hgrc hg commit -d '1000000 0' -m commit-1 rm .hg/hgrc hg commit -d '1000000 0' -m commit-1 2>&1 | sed -e "s/'[^']*'/user@host/" + +echo space > asdf +hg commit -d '1000000 0' -u ' ' -m commit-1 + +true diff --git a/tests/test-committer.out b/tests/test-committer.out --- a/tests/test-committer.out +++ b/tests/test-committer.out @@ -24,3 +24,6 @@ summary: commit-1 abort: Please specify a username. No username found, using user@host instead +transaction abort! +rollback completed +abort: empty username!