Skip to content

Commit 82e1322

Browse files
committed
Fix history page crash for malformed user and added test case moinwiki#1886
1 parent b815152 commit 82e1322

File tree

2 files changed

+62
-19
lines changed

2 files changed

+62
-19
lines changed

src/moin/themes/__init__.py

+26-19
Original file line numberDiff line numberDiff line change
@@ -610,26 +610,33 @@ def get_editor_info(meta, external=False):
610610

611611
userid = meta.get(USERID)
612612
if userid:
613-
u = user.User(userid)
614-
name = u.name0
615-
text = u.display_name or name
616-
display_name = u.display_name or name
617-
if title:
618-
# we already have some address info
619-
title = f"{display_name} @ {title}"
620-
else:
621-
title = display_name
622-
if u.mailto_author and u.email:
623-
email = u.email
624-
css = "editor mail"
625-
else:
626-
homewiki = app.cfg.user_homewiki
627-
if is_local_wiki(homewiki):
628-
css = "editor homepage local"
613+
try:
614+
u = user.User(userid)
615+
name = u.name0
616+
text = u.display_name or name
617+
display_name = u.display_name or name
618+
if title:
619+
# we already have some address info
620+
title = f"{display_name} @ {title}"
629621
else:
630-
css = "editor homepage interwiki"
631-
uri = url_for_item(name, wiki_name=homewiki, _external=external, namespace=NAMESPACE_USERS)
632-
622+
title = display_name
623+
if u.mailto_author and u.email:
624+
email = u.email
625+
css = "editor mail"
626+
else:
627+
homewiki = app.cfg.user_homewiki
628+
if is_local_wiki(homewiki):
629+
css = "editor homepage local"
630+
else:
631+
css = "editor homepage interwiki"
632+
uri = url_for_item(name, wiki_name=homewiki, _external=external, namespace=NAMESPACE_USERS)
633+
except Exception:
634+
# Fall back to default values if user profile loading fails
635+
name = "Unknown"
636+
text = "anonymous"
637+
title = "Unknown User"
638+
css = "editor unknown"
639+
633640
result = dict(name=name, text=text, css=css, title=title)
634641
if uri:
635642
result["uri"] = uri
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import pytest
2+
from moin.themes import get_editor_info
3+
4+
def test_get_editor_info_anonymous():
5+
meta = {} # Simulate revision with no USERID or ADDRESS
6+
result = get_editor_info(meta)
7+
assert result["text"] == "anonymous"
8+
assert result["title"] == ""
9+
assert result["css"] == "editor"
10+
assert result["name"] is None
11+
12+
def test_get_editor_info_with_address():
13+
meta = {"address": "192.168.1.1"}
14+
result = get_editor_info(meta)
15+
assert result["text"] == "192.168.1.1"
16+
assert result["title"] == "[192.168.1.1]"
17+
assert result["css"] == "editor ip"
18+
19+
def test_get_editor_info_invalid_user(monkeypatch):
20+
# Simulate a USERID but make user.User(userid) raise an Exception
21+
class DummyUser:
22+
def __init__(self, userid):
23+
raise ValueError("Simulated broken profile")
24+
25+
from moin import themes
26+
from moin import user as real_user_module
27+
28+
monkeypatch.setattr(themes.user, "User", DummyUser)
29+
30+
meta = {"userid": "fake-id"}
31+
result = get_editor_info(meta)
32+
33+
assert result["text"] == "anonymous"
34+
assert result["title"] == "Unknown User"
35+
assert result["css"] == "editor unknown"
36+
assert result["name"] == "Unknown"

0 commit comments

Comments
 (0)