Skip to content

Fix FormatException cause by empty json file#487

Open
bothyculture wants to merge 4 commits intoBaseflow:developfrom
bothyculture:fix/check-for-empty-json-file
Open

Fix FormatException cause by empty json file#487
bothyculture wants to merge 4 commits intoBaseflow:developfrom
bothyculture:fix/check-for-empty-json-file

Conversation

@bothyculture
Copy link
Copy Markdown

@bothyculture bothyculture commented May 4, 2025

✨ What kind of change does this PR introduce? (Bug fix, feature, docs update...)

Fixes an exception caused by empty json files

⤵️ What is the current behavior?

Throws FormatException: Unexpected end of input (at character 1)

🆕 What is the new behavior (if this is a feature change)?

No error logged

💥 Does this PR introduce a breaking change?

No

🐛 Recommendations for testing

Added a test for this

📝 Links to relevant issues/docs

#450

🤔 Checklist before submitting

  • All projects build
  • Follows style guide lines (code style guide)
  • Relevant documentation was updated
  • Rebased onto current develop

@bothyculture bothyculture reopened this Jun 5, 2025
@bothyculture bothyculture marked this pull request as ready for review June 5, 2025 18:00
centy pushed a commit to centy/flutter_cache_manager that referenced this pull request Apr 11, 2026
…nc errors

- Atomic file writes: Modified putFile, putFileStream (in cache_manager.dart) and _saveFileAndPostUpdates (in web_helper.dart) to write data into a .tmp file first. The file is only atomically renamed to its final path upon successful completion. This prevents partially written or 0-byte files from lingering if the app is killed, crashes, or runs out of disk space during a write.

- Zero-byte cache protection: Updated _manageResponse (in web_helper.dart) to detect successful downloads that yield 0 bytes (e.g. backend error returning empty body with 200 OK) and delete the file without registering it in the SQLite cache DB.

- FileSystemIO directory optimization: Fixed createFile in ile_system_io.dart to reuse the existing Directory reference instead of creating a new Directory object which was immediately discarded.

- Integrated PR Baseflow#499: Added a catchError block to _getCacheDataFromDatabase(key).then(...) in cache_store.dart. This ensures the Completer resolves properly (with an error) and cleans up _futureCache, preventing a memory leak and a hung Future when DB or FileSystem exceptions occur during data retrieval.

- Integrated PR Baseflow#487: Added an empty file check (length > 0) in json_cache_info_repository.dart before decoding JSON to prevent FormatException crashes when the JSON metadata file is empty (e.g. after a disk full interruption).

- Added comprehensive tests: Covered atomic file operation errors and 0-byte download handling in cache_manager_test.dart and web_helper_test.dart.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant