Skip to content

Commit c7206a3

Browse files
EstrellaXDclaude
andcommitted
fix(parser): prevent crash on titles starting with numbers (#990)
Titles like "29 岁单身冒险家的日常" cause the regex to match the leading number as episode, leaving title_raw as None. This cascades into storing null aliases and crashing match_torrent with TypeError. - Fall back to title_jp when title_en and title_zh are both None - Return None from raw_parser when no title can be extracted - Reject None/empty aliases in add_title_alias - Filter null values from parsed title_aliases JSON - Skip None title_raw in get_all_title_patterns Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b57d3c4 commit c7206a3

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

backend/src/module/database/bangumi.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ def _get_aliases_list(bangumi: Bangumi) -> list[str]:
4747
return []
4848
try:
4949
aliases = json.loads(bangumi.title_aliases)
50-
return aliases if isinstance(aliases, list) else []
50+
if not isinstance(aliases, list):
51+
return []
52+
return [a for a in aliases if a]
5153
except (json.JSONDecodeError, TypeError):
5254
return []
5355

@@ -141,6 +143,10 @@ def add_title_alias(
141143
)
142144
return False
143145

146+
# Don't add None or empty aliases
147+
if not new_title_raw:
148+
return False
149+
144150
# Don't add if it's the same as the main title_raw
145151
if bangumi.title_raw == new_title_raw:
146152
return False
@@ -165,7 +171,9 @@ def add_title_alias(
165171

166172
def get_all_title_patterns(self, bangumi: Bangumi) -> list[str]:
167173
"""Get all title patterns for matching (title_raw + all aliases)."""
168-
patterns = [bangumi.title_raw]
174+
patterns = []
175+
if bangumi.title_raw:
176+
patterns.append(bangumi.title_raw)
169177
patterns.extend(_get_aliases_list(bangumi))
170178
return patterns
171179

backend/src/module/parser/title_parser.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def raw_parser(raw: str) -> Bangumi | None:
7474
"en": episode.title_en,
7575
"jp": episode.title_jp,
7676
}
77-
title_raw = episode.title_en if episode.title_en else episode.title_zh
77+
title_raw = episode.title_en or episode.title_zh or episode.title_jp
7878
if titles[language]:
7979
official_title = titles[language]
8080
elif titles["zh"]:
@@ -85,6 +85,9 @@ def raw_parser(raw: str) -> Bangumi | None:
8585
official_title = titles["jp"]
8686
else:
8787
official_title = title_raw
88+
if not title_raw:
89+
logger.warning("Cannot extract title_raw from '%s', skipping", raw)
90+
return None
8891
_season = episode.season
8992
logger.debug("RAW:%s >> %s", raw, title_raw)
9093
return Bangumi(

0 commit comments

Comments
 (0)