4 Commits
Author SHA1 Message Date
hyugogirubato 871716971a release v3.4.5 2025-10-19 19:48:27 +02:00
hyugogirubato 597cb41b00 more flexible suffix check 2025-10-19 19:48:13 +02:00
hyugogirubato a489ae17fb check invalid file content 2025-10-19 19:47:52 +02:00
hyugogirubato abc69d4673 Linking content check 2025-10-19 19:47:27 +02:00
4 changed files with 29 additions and 13 deletions
+8
View File
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.4.5] - 2025-10-19
### Changed
- More flexible suffix checking to support complex archive paths.
- Improved validation in `PageInfo.load()` to handle empty or invalid data correctly.
## [3.4.4] - 2025-09-21 ## [3.4.4] - 2025-09-21
### Added ### Added
@@ -225,6 +232,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Initial release. - Initial release.
[3.4.5]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.5
[3.4.4]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.4 [3.4.4]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.4
[3.4.3]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.3 [3.4.3]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.3
[3.4.2]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.2 [3.4.2]: https://github.com/hyugogirubato/cbz/releases/tag/v3.4.2
+17 -11
View File
@@ -1,5 +1,6 @@
from __future__ import annotations from __future__ import annotations
import logging
import zipfile import zipfile
from datetime import datetime, timezone from datetime import datetime, timezone
@@ -172,17 +173,22 @@ class ComicInfo(ComicModel):
pages_info = comic_info.get('Pages', {}).get('Page', []) pages_info = comic_info.get('Pages', {}).get('Page', [])
for i, name in enumerate(names): for i, name in enumerate(names):
suffix = Path(name).suffix suffix = Path(name).suffix
if suffix:
assert suffix in IMAGE_FORMAT, f'Unsupported image format: {suffix}' # Some archives may contain folders or hidden files (e.g., ".extra/" or "__MACOSX/.DS_Store")
with archive_file.open(name, 'r') as f: # that could corrupt the suffix detection and cause invalid image handling.
page_info = {} if not suffix or suffix not in IMAGE_FORMAT:
if i < len(pages_info): logging.warning(f'Skipping unsupported or invalid file: {name!r} (suffix={suffix!r})')
page_info = ComicInfo.__extract_info( continue
items=pages_info[i],
fields=PAGE_FIELDS with archive_file.open(name, 'r') as f:
) page_info = {}
page_info['name'] = Path(name).name if i < len(pages_info):
pages.append(PageInfo.loads(data=f.read(), **page_info)) page_info = ComicInfo.__extract_info(
items=pages_info[i],
fields=PAGE_FIELDS
)
page_info['name'] = Path(name).name
pages.append(PageInfo.loads(data=f.read(), **page_info))
return ComicInfo.from_pages(pages=pages, **comic) return ComicInfo.from_pages(pages=pages, **comic)
+3 -1
View File
@@ -75,6 +75,8 @@ class PageInfo(PageModel):
data = base64.b64decode(data) data = base64.b64decode(data)
if not isinstance(data, bytes): if not isinstance(data, bytes):
raise ValueError(f'Expecting Bytes or Base64 input, got {data!r}') raise ValueError(f'Expecting Bytes or Base64 input, got {data!r}')
if not data.strip():
raise ValueError(f'Empty or null data provided (length={len(data)})')
return cls(data, **kwargs) return cls(data, **kwargs)
@classmethod @classmethod
@@ -98,7 +100,7 @@ class PageInfo(PageModel):
path = Path(path) path = Path(path)
with path.open(mode='rb') as f: with path.open(mode='rb') as f:
kwargs.setdefault('name', path.name) kwargs.setdefault('name', path.name)
return cls(f.read(), **kwargs) return cls.loads(f.read(), **kwargs)
def show(self) -> None: def show(self) -> None:
""" """
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry] [tool.poetry]
name = "cbz" name = "cbz"
version = "3.4.4" version = "3.4.5"
description = "CBZ simplifies creating, managing, and viewing comic book files in CBZ, CBR, and PDF formats, offering seamless packaging, metadata handling and built-in viewing capabilities." description = "CBZ simplifies creating, managing, and viewing comic book files in CBZ, CBR, and PDF formats, offering seamless packaging, metadata handling and built-in viewing capabilities."
license = "MIT" license = "MIT"
authors = ["hyugogirubato <65763543+hyugogirubato@users.noreply.github.com>"] authors = ["hyugogirubato <65763543+hyugogirubato@users.noreply.github.com>"]