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.
--- 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))
--- 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
--- 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!