arturobernalg commented on code in PR #456:
URL: 
https://github.com/apache/httpcomponents-client/pull/456#discussion_r1233374549


##########
httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CacheValidityPolicy.java:
##########
@@ -206,28 +206,51 @@ protected TimeValue getApparentAge(final HttpCacheEntry 
entry) {
         return TimeValue.ofSeconds(diff.getSeconds());
     }
 
+    /**
+     * Extracts and processes the Age value from an HttpCacheEntry. The method 
goes through each digit of the Age value,
+     * performing direct arithmetic operations to calculate the total age in 
delta-seconds. If the Age value cannot be parsed
+     * into a number or if it exceeds Integer.MAX_VALUE, the method returns 
the value of MAX_AGE in seconds.
+     *
+     * @param entry The HttpCacheEntry from which to extract the Age value.
+     * @return The Age value in delta-seconds, or the MAX_AGE in seconds if 
the Age value is invalid or exceeds Integer.MAX_VALUE.
+     */
     protected long getAgeValue(final HttpCacheEntry entry) {
-        // This is a header value, we leave as-is
-        long ageValue = 0;
-        for (final Header hdr : entry.getHeaders(HttpHeaders.AGE)) {
-            long hdrAge;
+        final Header age = entry.getFirstHeader(HttpHeaders.AGE);
+        if (age != null) {
             try {
-                hdrAge = Long.parseLong(hdr.getValue());
-                if (hdrAge < 0) {
-                    hdrAge = MAX_AGE.toSeconds();
+                final String ageValue = age.getValue();
+                long result = 0;
+                for (int i = 0; i < ageValue.length(); i++) {
+                    final int digit = Character.digit(ageValue.charAt(i), 10);
+                    if (digit < 0) {
+                        if (LOG.isWarnEnabled()) {
+                            LOG.warn("Invalid Age header: {}", ageValue);
+                        }
+                        return 0;
+                    }
+                    result = result * 10 + digit;
+                    if (result > Integer.MAX_VALUE) {
+                        if (LOG.isWarnEnabled()) {

Review Comment:
   changed.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to