From 955ae6dc3126ca0e75eaabb6e92349a0667f0c6d Mon Sep 17 00:00:00 2001 From: Yash Shinde Date: Fri, 10 Oct 2025 17:04:43 +0530 Subject: [PATCH] Fixed Cache-Control Header Parsing & added the test case for parsing --- .../io/vertx/httpproxy/impl/CacheControl.java | 3 +- .../io/vertx/tests/parsing/ParseTest.java | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/vertx/httpproxy/impl/CacheControl.java b/src/main/java/io/vertx/httpproxy/impl/CacheControl.java index a89b94c..8e54fe7 100644 --- a/src/main/java/io/vertx/httpproxy/impl/CacheControl.java +++ b/src/main/java/io/vertx/httpproxy/impl/CacheControl.java @@ -21,7 +21,7 @@ public class CacheControl { public CacheControl parse(String header) { maxAge = -1; _public = false; - String[] parts = header.split(","); // No regex + String[] parts = header.split(",\\s*|\\s+"); for (String part : parts) { part = part.trim().toLowerCase(); switch (part) { @@ -31,7 +31,6 @@ public CacheControl parse(String header) { default: if (part.startsWith("max-age=")) { maxAge = Integer.parseInt(part.substring(8)); - } break; } diff --git a/src/test/java/io/vertx/tests/parsing/ParseTest.java b/src/test/java/io/vertx/tests/parsing/ParseTest.java index 3ced65d..e1b89b7 100644 --- a/src/test/java/io/vertx/tests/parsing/ParseTest.java +++ b/src/test/java/io/vertx/tests/parsing/ParseTest.java @@ -33,6 +33,48 @@ public void testParseCacheControlPublic() { Assert.assertTrue(control.parse("public").isPublic()); } + + @Test + public void testCommaSplit(){ + CacheControl control = new CacheControl(); + Assert.assertTrue(control.parse("max-age=123,public,no-cache").isPublic()); + Assert.assertEquals(control.parse("max-age=123,public,no-cache").maxAge(), 123); + Assert.assertEquals(control.parse("max-age=12121212").maxAge(), 12121212); + } + + @Test + public void testSpaceSplit(){ + CacheControl control = new CacheControl(); + Assert.assertTrue(control.parse("max-age=123 public no-cache").isPublic()); + Assert.assertEquals(control.parse("max-age=123 public no-cache").maxAge(), 123); + Assert.assertEquals(control.parse("max-age=12121212").maxAge(), 12121212); + } + + @Test + public void testCommaAndSpaceSplit(){ + CacheControl control = new CacheControl(); + Assert.assertTrue(control.parse("max-age=123, public, no-cache").isPublic()); + Assert.assertEquals(control.parse("max-age=123, public, no-cache").maxAge(), 123); + Assert.assertEquals(control.parse("max-age=12121212").maxAge(), 12121212); + } + + @Test + public void testCaseInsensitiveParsing() { + CacheControl control = new CacheControl(); + CacheControl parsed = control.parse("MaX-AgE=999, PuBLic"); + Assert.assertTrue(parsed.isPublic()); + Assert.assertEquals(999, parsed.maxAge()); + } + + @Test + public void testExtraSpacesAndCommas() { + CacheControl control = new CacheControl(); + CacheControl parsed = control.parse(" , max-age=45 , , public "); + Assert.assertTrue(parsed.isPublic()); + Assert.assertEquals(45, parsed.maxAge()); + } + + /* @Test public void testCommaSplit() {