Skip to content

Commit 002a681

Browse files
committed
fix: rfc7231 date format in http headers
1 parent 9a7747c commit 002a681

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

stackslib/src/net/http/response.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,11 +346,11 @@ impl HttpResponsePreamble {
346346
}
347347

348348
/// Get an RFC 7231 date that represents the current time
349-
fn rfc7231_now() -> String {
349+
fn rfc7231_now() -> Result<String, CodecError> {
350350
time::OffsetDateTime::now_utc()
351351
.format(&time::format_description::well_known::Rfc2822)
352-
.unwrap()
353-
.replace("+0000", "GMT")
352+
.map(|date| date.replace("+0000", "GMT"))
353+
.map_err(|e| CodecError::GenericError(format!("Failed to format RFC 7231 date: {:?}", e)))
354354
}
355355

356356
/// Read from a stream until we see '\r\n\r\n', with the purpose of reading an HTTP preamble.
@@ -388,7 +388,7 @@ impl StacksMessageCodec for HttpResponsePreamble {
388388
if !self.headers.contains_key("date") {
389389
fd.write_all("Date: ".as_bytes())
390390
.map_err(CodecError::WriteError)?;
391-
fd.write_all(rfc7231_now().as_bytes())
391+
fd.write_all(rfc7231_now()?.as_bytes())
392392
.map_err(CodecError::WriteError)?;
393393
fd.write_all("\r\n".as_bytes())
394394
.map_err(CodecError::WriteError)?;

stackslib/src/net/http/tests.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -393,16 +393,13 @@ fn test_http_response_preamble_headers() {
393393
);
394394
assert!(txt.find("Date: ").is_some(), "Date header is missing");
395395

396-
// old format
397-
// let date_regex = regex::Regex::new(
398-
// r"Date: [A-Za-z]{3}, [A-Za-z]{3} \d{1,2} \d{4} \d{2}:\d{2}:\d{2} GMT\r\n",
399-
// )
400-
// .unwrap();
401-
// new format rfc7231
402-
let date_regex =
396+
let rfc7231_date_regex =
403397
regex::Regex::new(r"Date: [A-Za-z]{3}, \d{2} [A-Za-z]{3} \d{4} \d{2}:\d{2}:\d{2} GMT\r\n")
404398
.unwrap();
405-
assert!(date_regex.is_match(&txt), "Date header format is incorrect");
399+
assert!(
400+
rfc7231_date_regex.is_match(&txt),
401+
"Date header format is incorrect"
402+
);
406403
assert!(txt.find("foo: bar\r\n").is_some(), "foo header is missing");
407404
assert!(
408405
txt.find("Access-Control-Allow-Origin: *\r\n").is_some(),

0 commit comments

Comments
 (0)