diff -pruN 0.4.0-1/.cargo_vcs_info.json 0.4.2-1/.cargo_vcs_info.json
--- 0.4.0-1/.cargo_vcs_info.json	1970-01-01 00:00:01.000000000 +0000
+++ 0.4.2-1/.cargo_vcs_info.json	1970-01-01 00:00:01.000000000 +0000
@@ -1,6 +1,6 @@
 {
   "git": {
-    "sha1": "194fad909405c8cba9b1f1e69b90760186cc727c"
+    "sha1": "0aa53aa14bbb7e292134414716fdafb20ac10977"
   },
   "path_in_vcs": ""
 }
\ No newline at end of file
diff -pruN 0.4.0-1/Cargo.toml 0.4.2-1/Cargo.toml
--- 0.4.0-1/Cargo.toml	1970-01-01 00:00:01.000000000 +0000
+++ 0.4.2-1/Cargo.toml	1970-01-01 00:00:01.000000000 +0000
@@ -12,14 +12,19 @@
 [package]
 edition = "2018"
 name = "http-range-header"
-version = "0.4.0"
+version = "0.4.2"
+build = false
 exclude = [
     "/.github",
     "CONTRIBUTING.md",
 ]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
 description = "No-dep range header parser"
 homepage = "https://github.com/MarcusGrass/parse-range-headers"
-readme = "./README.md"
+readme = "README.md"
 keywords = [
     "http",
     "parser",
@@ -38,8 +43,13 @@ repository = "https://github.com/MarcusG
 [package.metadata]
 msrv = "1.60.0"
 
+[lib]
+name = "http_range_header"
+path = "src/lib.rs"
+
 [[bench]]
 name = "benchmark"
+path = "benches/benchmark.rs"
 harness = false
 
 [dependencies]
diff -pruN 0.4.0-1/Cargo.toml.orig 0.4.2-1/Cargo.toml.orig
--- 0.4.0-1/Cargo.toml.orig	2006-07-24 01:21:28.000000000 +0000
+++ 0.4.2-1/Cargo.toml.orig	2006-07-24 01:21:28.000000000 +0000
@@ -1,6 +1,6 @@
 [package]
 name = "http-range-header"
-version = "0.4.0"
+version = "0.4.2"
 edition = "2018"
 license = "MIT"
 readme = "./README.md"
diff -pruN 0.4.0-1/Changelog.md 0.4.2-1/Changelog.md
--- 0.4.0-1/Changelog.md	2006-07-24 01:21:28.000000000 +0000
+++ 0.4.2-1/Changelog.md	2006-07-24 01:21:28.000000000 +0000
@@ -8,12 +8,27 @@ The format is based on [Keep a Changelog
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 <!-- next-header -->
-## [Unreleased] - ReleaseDate
+## [TBD] - Release date
+
 ### Added
 ### Changed
 ### Fixed
 
-## [0.4.0] - ReleaseDate
+## [0.4.2] - 2024-11-28
+
+### Changed
+
+- Relaxed visibility of some intermediate-structs on from 
+parsing internals to public, see https://github.com/MarcusGrass/http-range-header/issues/9
+
+## [0.4.1] - 2024-05-03
+
+### Fixed
+
+- Panic at validation step if file-size doesn't make sense with the range, 
+should have been an Error, thanks @cholcombe973
+
+## [0.4.0] - 2023-07-21
 ### Added
 - Bench error performance
 
diff -pruN 0.4.0-1/README.md 0.4.2-1/README.md
--- 0.4.0-1/README.md	2006-07-24 01:21:28.000000000 +0000
+++ 0.4.2-1/README.md	2006-07-24 01:21:28.000000000 +0000
@@ -17,3 +17,15 @@ Secondary goals are:
 
 The parser is strict. Any range where all parts are not syntactically correct and makes sense in the context of the underlying 
 resource will be rejected.
+
+## Dev release checklist
+
+1. Make sure CI passes
+2. Run [cargo fuzz](https://rust-fuzz.github.io/book/cargo-fuzz.html) 
+`cargo +nightly fuzz run random_string_input`, at least a minute should be good enough. If it doesn't 
+error out it has passed.
+3. Check msrv with for example [cargo msrv](https://github.com/foresterre/cargo-msrv),
+   if a higher msrv is wanted/needed, bump it so that it's less than or equal to [tower-http's](https://github.com/tower-rs/tower-http)
+4. Update changelog
+5. Update version
+6. Publish
\ No newline at end of file
diff -pruN 0.4.0-1/debian/cargo-checksum.json 0.4.2-1/debian/cargo-checksum.json
--- 0.4.0-1/debian/cargo-checksum.json	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/cargo-checksum.json	2025-09-25 11:36:44.000000000 +0000
@@ -1 +1 @@
-{"package":"Could not get crate checksum","files":{}}
+{"package":"9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c","files":{}}
diff -pruN 0.4.0-1/debian/changelog 0.4.2-1/debian/changelog
--- 0.4.0-1/debian/changelog	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/changelog	2025-09-25 11:36:44.000000000 +0000
@@ -1,3 +1,11 @@
+rust-http-range-header (0.4.2-1) unstable; urgency=medium
+
+  * Team upload
+  * Package http-range-header 0.4.2 from crates.io using debcargo 2.7.10
+  * Remove remaining patch
+
+ -- Jeremy Bícha <jbicha@ubuntu.com>  Thu, 25 Sep 2025 07:36:44 -0400
+
 rust-http-range-header (0.4.0-1) unstable; urgency=medium
 
   * Package http-range-header 0.4.0 from crates.io using debcargo 2.6.0
diff -pruN 0.4.0-1/debian/compat 0.4.2-1/debian/compat
--- 0.4.0-1/debian/compat	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/compat	1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-12
diff -pruN 0.4.0-1/debian/control 0.4.2-1/debian/control
--- 0.4.0-1/debian/control	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/control	2025-09-25 11:36:44.000000000 +0000
@@ -1,15 +1,15 @@
 Source: rust-http-range-header
 Section: rust
 Priority: optional
-Build-Depends: debhelper (>= 12),
- dh-cargo (>= 25),
- cargo:native <!nocheck>,
+Build-Depends: debhelper-compat (= 13),
+ dh-sequence-cargo
+Build-Depends-Arch: cargo:native <!nocheck>,
  rustc:native <!nocheck>,
  libstd-rust-dev <!nocheck>
 Maintainer: Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
 Uploaders:
  Alexander Kjäll <alexander.kjall@gmail.com>
-Standards-Version: 4.6.1
+Standards-Version: 4.7.2
 Vcs-Git: https://salsa.debian.org/rust-team/debcargo-conf.git [src/http-range-header]
 Vcs-Browser: https://salsa.debian.org/rust-team/debcargo-conf/tree/master/src/http-range-header
 Homepage: https://github.com/MarcusGrass/parse-range-headers
@@ -27,8 +27,7 @@ Provides:
  librust-http-range-header-0+default-dev (= ${binary:Version}),
  librust-http-range-header-0.4-dev (= ${binary:Version}),
  librust-http-range-header-0.4+default-dev (= ${binary:Version}),
- librust-http-range-header-0.4.0-dev (= ${binary:Version}),
- librust-http-range-header-0.4.0+default-dev (= ${binary:Version})
+ librust-http-range-header-0.4.2-dev (= ${binary:Version}),
+ librust-http-range-header-0.4.2+default-dev (= ${binary:Version})
 Description: No-dep range header parser - Rust source code
- This package contains the source for the Rust http-range-header crate, packaged
- by debcargo for use with cargo and dh-cargo.
+ Source code for Debianized Rust crate "http-range-header"
diff -pruN 0.4.0-1/debian/copyright 0.4.2-1/debian/copyright
--- 0.4.0-1/debian/copyright	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/copyright	2025-09-25 11:36:44.000000000 +0000
@@ -11,8 +11,8 @@ License: MIT
 
 Files: debian/*
 Copyright:
- 2023 Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
- 2023 Alexander Kjäll <alexander.kjall@gmail.com>
+ 2023-2025 Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
+ 2023-2025 Alexander Kjäll <alexander.kjall@gmail.com>
 License: MIT
 
 License: MIT
diff -pruN 0.4.0-1/debian/copyright.debcargo.hint 0.4.2-1/debian/copyright.debcargo.hint
--- 0.4.0-1/debian/copyright.debcargo.hint	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/copyright.debcargo.hint	2025-09-25 11:36:44.000000000 +0000
@@ -21,8 +21,8 @@ Comment:
 
 Files: debian/*
 Copyright:
- 2023 Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
- 2023 Alexander Kjäll <alexander.kjall@gmail.com>
+ 2023-2025 Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
+ 2023-2025 Alexander Kjäll <alexander.kjall@gmail.com>
 License: MIT
 
 License: MIT
diff -pruN 0.4.0-1/debian/patches/relax-deps.patch 0.4.2-1/debian/patches/relax-deps.patch
--- 0.4.0-1/debian/patches/relax-deps.patch	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/patches/relax-deps.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
-diff --git a/Cargo.toml b/Cargo.toml
-index 09f6942..2ea0c6e 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -45,7 +45,7 @@ harness = false
- [dependencies]
- 
- [dev-dependencies.criterion]
--version = "0.5.1"
-+version = "0.5"
- 
- [dev-dependencies.quickcheck]
- version = "1.0.3"
-@@ -54,4 +54,4 @@ version = "1.0.3"
- version = "1.0.0"
- 
- [dev-dependencies.regex]
--version = "1.8.3"
-+version = "1"
diff -pruN 0.4.0-1/debian/patches/series 0.4.2-1/debian/patches/series
--- 0.4.0-1/debian/patches/series	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/patches/series	1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-relax-deps.patch
diff -pruN 0.4.0-1/debian/tests/control 0.4.2-1/debian/tests/control
--- 0.4.0-1/debian/tests/control	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/tests/control	2025-09-25 11:36:44.000000000 +0000
@@ -1,14 +1,14 @@
-Test-Command: /usr/share/cargo/bin/cargo-auto-test http-range-header 0.4.0 --all-targets --all-features
+Test-Command: /usr/share/cargo/bin/cargo-auto-test http-range-header 0.4.2 --all-targets --all-features
 Features: test-name=rust-http-range-header:@
-Depends: dh-cargo (>= 18), librust-criterion-0.5+default-dev, librust-quickcheck-1+default-dev (>= 1.0.3-~~), librust-quickcheck-macros-1+default-dev, librust-regex-1+default-dev, @
+Depends: dh-cargo (>= 31), rustc, librust-criterion-0.5+default-dev (>= 0.5.1-~~), librust-quickcheck-1+default-dev (>= 1.0.3-~~), librust-quickcheck-macros-1+default-dev, librust-regex-1+default-dev (>= 1.8.3-~~), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test http-range-header 0.4.0 --all-targets
+Test-Command: /usr/share/cargo/bin/cargo-auto-test http-range-header 0.4.2 --all-targets
 Features: test-name=librust-http-range-header-dev:default
-Depends: dh-cargo (>= 18), librust-criterion-0.5+default-dev, librust-quickcheck-1+default-dev (>= 1.0.3-~~), librust-quickcheck-macros-1+default-dev, librust-regex-1+default-dev, @
+Depends: dh-cargo (>= 31), rustc, librust-criterion-0.5+default-dev (>= 0.5.1-~~), librust-quickcheck-1+default-dev (>= 1.0.3-~~), librust-quickcheck-macros-1+default-dev, librust-regex-1+default-dev (>= 1.8.3-~~), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test http-range-header 0.4.0 --all-targets --no-default-features
+Test-Command: /usr/share/cargo/bin/cargo-auto-test http-range-header 0.4.2 --all-targets --no-default-features
 Features: test-name=librust-http-range-header-dev:
-Depends: dh-cargo (>= 18), librust-criterion-0.5+default-dev, librust-quickcheck-1+default-dev (>= 1.0.3-~~), librust-quickcheck-macros-1+default-dev, librust-regex-1+default-dev, @
+Depends: dh-cargo (>= 31), rustc, librust-criterion-0.5+default-dev (>= 0.5.1-~~), librust-quickcheck-1+default-dev (>= 1.0.3-~~), librust-quickcheck-macros-1+default-dev, librust-regex-1+default-dev (>= 1.8.3-~~), @
 Restrictions: allow-stderr, skip-not-installable
diff -pruN 0.4.0-1/debian/watch 0.4.2-1/debian/watch
--- 0.4.0-1/debian/watch	2023-09-21 20:02:43.000000000 +0000
+++ 0.4.2-1/debian/watch	2025-09-25 11:36:44.000000000 +0000
@@ -1,4 +1,4 @@
 version=4
 opts=filenamemangle=s/.*\/(.*)\/download/http-range-header-$1\.tar\.gz/g,\
-uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/ \
+uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\.?\d*)$/$1~$2/ \
 https://qa.debian.org/cgi-bin/fakeupstream.cgi?upstream=crates.io/http-range-header .*/crates/http-range-header/@ANY_VERSION@/download
diff -pruN 0.4.0-1/src/lib.rs 0.4.2-1/src/lib.rs
--- 0.4.0-1/src/lib.rs	2006-07-24 01:21:28.000000000 +0000
+++ 0.4.2-1/src/lib.rs	2006-07-24 01:21:28.000000000 +0000
@@ -1,4 +1,5 @@
 #![warn(clippy::pedantic)]
+#![allow(clippy::uninlined_format_args)]
 use core::fmt::{Debug, Display, Formatter};
 use core::ops::RangeInclusive;
 
@@ -210,7 +211,7 @@ fn strict_parse_u64(s: &str) -> Option<u
 
 #[derive(Debug, Clone, Eq, PartialEq)]
 pub struct ParsedRanges {
-    ranges: Vec<SyntacticallyCorrectRange>,
+    pub ranges: Vec<SyntacticallyCorrectRange>,
 }
 
 impl ParsedRanges {
@@ -234,12 +235,12 @@ impl ParsedRanges {
                     if i > file_size_bytes {
                         return Err(RangeUnsatisfiableError::FileSuffixOutOfBounds);
                     }
-                    file_size_bytes - i
+                    file_size_bytes.saturating_sub(i)
                 }
             };
             let end = match parsed.end {
-                EndPosition::Index(i) => core::cmp::min(i, file_size_bytes - 1),
-                EndPosition::LastByte => file_size_bytes - 1,
+                EndPosition::Index(i) => core::cmp::min(i, file_size_bytes.saturating_sub(1)),
+                EndPosition::LastByte => file_size_bytes.saturating_sub(1),
             };
 
             let valid = RangeInclusive::new(start, end);
@@ -341,9 +342,9 @@ fn validate_ranges(ranges: &[RangeInclus
 }
 
 #[derive(Debug, Copy, Clone, Eq, PartialEq)]
-struct SyntacticallyCorrectRange {
-    start: StartPosition,
-    end: EndPosition,
+pub struct SyntacticallyCorrectRange {
+    pub start: StartPosition,
+    pub end: EndPosition,
 }
 
 impl SyntacticallyCorrectRange {
@@ -353,13 +354,13 @@ impl SyntacticallyCorrectRange {
 }
 
 #[derive(Debug, Copy, Clone, Eq, PartialEq)]
-enum StartPosition {
+pub enum StartPosition {
     Index(u64),
     FromLast(u64),
 }
 
 #[derive(Debug, Copy, Clone, Eq, PartialEq)]
-enum EndPosition {
+pub enum EndPosition {
     Index(u64),
     LastByte,
 }
@@ -373,7 +374,7 @@ mod tests {
     use core::ops::RangeInclusive;
 
     const TEST_FILE_LENGTH: u64 = 10_000;
-    /// Testing standard range compliance against https://datatracker.ietf.org/doc/html/rfc7233
+    /// Testing standard range compliance against <https://datatracker.ietf.org/doc/html/rfc7233>
     #[test]
     fn rfc_7233_standard_test1() {
         let input = "bytes=0-499";
@@ -383,7 +384,7 @@ mod tests {
         assert_eq!(single_range(expect), actual);
         let expect = RangeInclusive::new(0, 499);
         let actual = actual.validate(TEST_FILE_LENGTH).unwrap()[0].clone();
-        assert_eq!(expect, actual)
+        assert_eq!(expect, actual);
     }
 
     #[test]
@@ -395,10 +396,10 @@ mod tests {
         assert_eq!(single_range(expect), actual);
         let expect = RangeInclusive::new(500, 999);
         let actual = actual.validate(TEST_FILE_LENGTH).unwrap()[0].clone();
-        assert_eq!(expect, actual)
+        assert_eq!(expect, actual);
     }
 
-    /// Testing suffix compliance against https://datatracker.ietf.org/doc/html/rfc7233
+    /// Testing suffix compliance against <https://datatracker.ietf.org/doc/html/rfc7233>
     #[test]
     fn rfc_7233_suffixed_test() {
         let input = "bytes=-500";
@@ -408,10 +409,10 @@ mod tests {
         assert_eq!(single_range(expect), actual);
         let expect = RangeInclusive::new(9500, 9999);
         let actual = actual.validate(10_000).unwrap()[0].clone();
-        assert_eq!(expect, actual)
+        assert_eq!(expect, actual);
     }
 
-    /// Testing open range compliance against https://datatracker.ietf.org/doc/html/rfc7233
+    /// Testing open range compliance against <https://datatracker.ietf.org/doc/html/rfc7233>
     #[test]
     fn rfc_7233_open_range_test() {
         let input = "bytes=9500-";
@@ -421,10 +422,10 @@ mod tests {
         assert_eq!(single_range(expect), actual);
         let expect = RangeInclusive::new(9500, 9999);
         let actual = actual.validate(10_000).unwrap()[0].clone();
-        assert_eq!(expect, actual)
+        assert_eq!(expect, actual);
     }
 
-    /// Testing first and last bytes compliance against https://datatracker.ietf.org/doc/html/rfc7233
+    /// Testing first and last bytes compliance against <https://datatracker.ietf.org/doc/html/rfc7233>
     #[test]
     fn rfc_7233_first_and_last() {
         let input = "bytes=0-0, -1";
@@ -436,7 +437,7 @@ mod tests {
         assert_eq!(expect, actual.ranges);
         let expect = vec![0..=0, 9999..=9999];
         let actual = actual.validate(10_000).unwrap();
-        assert_eq!(expect, actual)
+        assert_eq!(expect, actual);
     }
 
     #[test]
@@ -448,7 +449,7 @@ mod tests {
         assert_eq!(single_range(expect), actual);
         let expect = RangeInclusive::new(0, 1023);
         let actual = actual.validate(TEST_FILE_LENGTH).unwrap()[0].clone();
-        assert_eq!(expect, actual)
+        assert_eq!(expect, actual);
     }
 
     #[test]
@@ -577,14 +578,14 @@ mod tests {
 
     #[test]
     fn parse_zero_length_suffix_as_unsatisfiable() {
-        let input = &format!("bytes=-0");
+        let input = "bytes=-0";
         let parsed = parse_range_header(input);
         assert_eq!(parsed, Err(RangeUnsatisfiableError::ZeroSuffix));
     }
 
     #[test]
     fn parse_single_reversed_as_invalid() {
-        let input = &format!("bytes=15-0");
+        let input = "bytes=15-0";
         let parsed = parse_range_header(input).unwrap();
         assert_eq!(
             parsed.validate(TEST_FILE_LENGTH),
@@ -593,6 +594,32 @@ mod tests {
     }
 
     #[test]
+    fn parse_zero_range_as_invalid() {
+        let input = "bytes=15-";
+        let parsed = parse_range_header(input).unwrap();
+        assert_eq!(
+            parsed.validate(0),
+            Err(RangeUnsatisfiableError::RangeReversed)
+        );
+    }
+
+    #[test]
+    fn parse_zero_range_last_byte_valid_if_file_size_0() {
+        let input = "bytes=0-";
+        let expect = SyntacticallyCorrectRange::new(StartPosition::Index(0), EndPosition::LastByte);
+        let actual = parse_range_header(input).unwrap().ranges[0];
+        assert_eq!(actual, expect);
+    }
+
+    #[test]
+    fn parse_zero_range_closed_valid_if_file_size_0() {
+        let input = "bytes=0-0";
+        let expect = SyntacticallyCorrectRange::new(StartPosition::Index(0), EndPosition::Index(0));
+        let actual = parse_range_header(input).unwrap().ranges[0];
+        assert_eq!(actual, expect);
+    }
+
+    #[test]
     fn parse_multi_range() {
         let input = "bytes=0-1023, 2015-3000, 4000-4500, 8000-9999";
         let expected_ranges = vec![
@@ -607,7 +634,7 @@ mod tests {
         assert_eq!(
             vec![0..=1023, 2015..=3000, 4000..=4500, 8000..=9999],
             validated
-        )
+        );
     }
 
     #[test]
@@ -690,10 +717,11 @@ mod tests {
     fn parse_multi_range_rejects_invalid() {
         let input = "bytes=0-15, 25, 9, ";
         let parsed = parse_range_header(input);
-        assert!(parsed.is_err())
+        assert!(parsed.is_err());
     }
 
     #[quickcheck_macros::quickcheck]
+    #[allow(clippy::needless_pass_by_value)]
     fn always_errs_on_random_input(input: String) -> quickcheck::TestResult {
         // Basic regex matching most valid range headers
         let acceptable = regex::Regex::new(
@@ -702,12 +730,10 @@ mod tests {
         .unwrap();
         if acceptable.is_match(&input) {
             quickcheck::TestResult::discard()
+        } else if let Ok(passed_first_pass) = parse_range_header(&input) {
+            quickcheck::TestResult::from_bool(passed_first_pass.validate(u64::MAX).is_err())
         } else {
-            if let Ok(passed_first_pass) = parse_range_header(&input) {
-                quickcheck::TestResult::from_bool(passed_first_pass.validate(u64::MAX).is_err())
-            } else {
-                quickcheck::TestResult::passed()
-            }
+            quickcheck::TestResult::passed()
         }
     }
 
