# HG changeset patch # User Martin Geisler # Date 1242465169 -7200 # Node ID c5b3d3e30de7a6238c151a182441f74aa9ecb1cc # Parent eb7be0e752d92b100e9dfe7cb728039c2e6c91d5 changelog: refuse to add revisions with empty usernames An empty username or a username with a "\n" will make the revision text contain two "\n\n" sequences -> corrupt repository. The problem is that changelog.read expects to find exactly one "\n\n" separator and thus cannot unpack the revision. diff -r eb7be0e752d9 -r c5b3d3e30de7 mercurial/changelog.py --- a/mercurial/changelog.py Fri May 15 16:12:09 2009 +0200 +++ b/mercurial/changelog.py Sat May 16 11:12:49 2009 +0200 @@ -202,6 +202,11 @@ 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 -r eb7be0e752d9 -r c5b3d3e30de7 tests/test-committer --- a/tests/test-committer Fri May 15 16:12:09 2009 +0200 +++ b/tests/test-committer Sat May 16 11:12:49 2009 +0200 @@ -29,3 +29,8 @@ 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 -r eb7be0e752d9 -r c5b3d3e30de7 tests/test-committer.out --- a/tests/test-committer.out Fri May 15 16:12:09 2009 +0200 +++ b/tests/test-committer.out Sat May 16 11:12:49 2009 +0200 @@ -24,3 +24,6 @@ abort: Please specify a username. No username found, using user@host instead +transaction abort! +rollback completed +abort: empty username!