DimensionDev / DimensionDev/Flare

[Bug/Feature] Readability/Full-text extraction fails on legacy HTTP feeds (TLS Error -1200 / 301 loop) with no fallback

Open
#2,545 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Kotlin
Stars
1.5k
Forks
67
Avg merge
11h 8m
Merged PRs (30d)
84

Description

⚠️ Note / NSFW Warning: The test feed referenced below is an adult news feed (NSFW). Please take care when opening links in a public/work environment.


Summary

When enabling full-text extraction (Readability) on feeds pointing to legacy HTTP sites with expired/misconfigured SSL certificates or HTTP-to-HTTPS redirect loops, the detail view fails completely with a low-level iOS network error (NSURLErrorDomain Code=-1200) or renders a bare 301 Moved Permanently page, rather than gracefully falling back to the RSS item's embedded content.

Environment

• Device: iPhone Air
• OS Version: iOS 26.7
• App Version: Flare 1.7.5 (1750)

Reproduction Steps
  1. Subscribe to the following test feed:
    • Feed URL: https://feeds.feedburner.com/avnoone (⚠️ NSFW)
  2. In Flare feed/article settings, ensure Full-content mode is enabled.
  3. Tap on any article (e.g., article link with http://www.playno1.com/article-44942-1.html).
  4. Observe the error displayed in the article detail view.
Observed Behavior

Depending on the request state:

  1. TLS Failure: iOS CFNetwork throws a raw system error:
    Exception in http request: Error Domain=NSURLErrorDomain Code=-1200 
    "TLS 错误导致安全连接失败。"
    UserInfo={
      NSErrorPeerCertificateChainKey=(
        "<cert s: www.playno1.com i: E6>", ...
      ),
      _kCFStreamErrorCodeKey=-9802
    }
    
Image
  1. 301 Page Display: If it follows/receives a redirect, it displays the raw 301 Moved Permanently (nginx) HTML page as the final article content.
Root Cause Analysis
  1. Forced HTTPS upgrade & Expired Cert: The target site's port 443 has an expired certificate (expired Nov 2024), and its server configuration redirects all HTTPS traffic back to plain HTTP (http://). Flare appears to automatically upgrade http:// links to https://, triggering Apple's strict ATS handshake failure (-1200).
  2. Insecure Redirect Drop: When attempting to follow the redirect from https to http (downgrade redirect), iOS URLSession blocks/drops it by default due to ATS security policies.
  3. Missing Fallback Mechanism: This RSS feed already embeds full article HTML (text and images) within the field. When full-text extraction/Readability fails (due to SSL errors, timeouts, or non-200 responses), Flare does not fall back to the feed item's local content, leaving users with an unusable error screen.
    Proposed Suggestions
  4. Graceful Fallback (High Priority): If external webpage extraction fails (TLS error, network failure, or non-200 status), please automatically fall back to rendering the item's embedded or content:encoded content rather than throwing a system exception screen.
  5. Respect Original Protocol: Avoid force-upgrading http:// to https:// if the link in the RSS is explicitly plain HTTP, or provide a per-feed toggle to disable forced HTTPS.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No source file or test is named. Start by locating the full-text/Readability request path and the article detail renderer, then reproduce the issue with the supplied feed and HTTP article URL. Done means extraction failures show the RSS item's embedded description or content instead of a raw network error or 301 page.

Written by the indexing model from the issue text.

Assessment

Tech stack
kotlin
Domain
content, mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.