Skip to content

fix: correctly handle suffix and unsatisfiable range requests#3

Open
Amahdip wants to merge 1 commit into
mysamimi:mainfrom
Amahdip:fix-range-requests
Open

fix: correctly handle suffix and unsatisfiable range requests#3
Amahdip wants to merge 1 commit into
mysamimi:mainfrom
Amahdip:fix-range-requests

Conversation

@Amahdip

@Amahdip Amahdip commented Jun 9, 2026

Copy link
Copy Markdown

Description

This PR refactors how FerroS3 parses and responds to HTTP Range requests, bringing it in line with standard HTTP semantics and resolving multiple edge cases.

Changes Made:

  • Introduced a RangeRequest enum (Satisfiable, Unsatisfiable, Invalid) to explicitly model range parsing outcomes.
  • Properly implemented suffix range requests (e.g., bytes=-500 will correctly fetch the last 500 bytes).
  • Distinguished between syntactically malformed headers (which fallback to full 200 OK downloads) and structurally valid but unsatisfiable ranges (e.g., requesting byte 1000- from a 500 byte file).
  • Unsatisfiable ranges now correctly return 416 Range Not Satisfiable along with the Content-Range: bytes */<file_size> header.
  • Handled 0-byte file edge cases to prevent integer underflows in math bounds.
  • Added comprehensive unit tests covering relative ranges, suffixes, zero-length bounds, and invalid formats.

توضیحات فارسی

این PR نحوه پردازش درخواست‌های بازه‌ای (Range Requests) را کاملاً بازنویسی می‌کند تا رفتار سرور با استانداردهای HTTP کاملاً منطبق شود و باگ‌های مربوط به آن برطرف گردد.

تغییرات اعمال شده:

  • یک ساختار enum جدید به نام RangeRequest برای تفکیک دقیق ۳ حالت Satisfiable، Unsatisfiable و Invalid اضافه شد.
  • از این به بعد درخواست‌های Suffix (مانند bytes=-500 برای دانلود ۵۰۰ بایت آخر فایل) به درستی پردازش می‌شوند.
  • بین درخواست‌هایی که فرمت اشتباه دارند (که نادیده گرفته شده و کد ۲۰۰ برمی‌گردانند) و درخواست‌هایی که معتبرند اما خارج از ظرفیت فایل هستند (مثلاً درخواست بایت ۱۰۰۰ از فایلی که ۵۰۰ بایت است) تفاوت قائل شدیم.
  • درخواست‌های خارج از ظرفیت (Unsatisfiable) حالا ارور استاندارد 416 Range Not Satisfiable را به همراه هدر Content-Range برمی‌گردانند.
  • باگ‌های ریاضی مربوط به فایل‌های صفر بایتی (که باعث خطای Underflow می‌شد) حل شد.
  • مجموعه‌ای کامل از Unit Testها برای انواع درخواست‌های بازه‌ای نوشته شد تا از عملکرد صحیح این بخش اطمینان حاصل شود.

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