Compare commits

...

No commits in common. "c8-stream-3.6" and "c10s" have entirely different histories.

12 changed files with 540 additions and 168 deletions

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

32
.gitignore vendored
View File

@ -1 +1,31 @@
SOURCES/httpcomponents-client-4.5.10-src.tar.gz /httpcomponents-client-4.0.3-src.tar.gz
httpcomponents-client-4.1-src.tar.gz
/httpcomponents-client-4.1.1-src.tar.gz
/httpcomponents-client-4.1.2-src.tar.gz
/httpcomponents-client-4.1.3-src.tar.gz
/httpcomponents-client-4.2.3-src.tar.gz
/httpcomponents-client-4.2.4-src.tar.gz
/httpcomponents-client-4.2.5-src.tar.gz
/httpcomponents-client-4.3-src.tar.gz
/httpcomponents-client-4.3.1-src.tar.gz
/httpcomponents-client-4.3.2-src.tar.gz
/httpcomponents-client-4.3.3-src.tar.gz
/httpcomponents-client-4.3.4-src.tar.gz
/httpcomponents-client-4.3.5-src.tar.gz
/httpcomponents-client-4.4-beta1-src.tar.gz
/effective_tld_names.dat
/httpcomponents-client-4.4-src.tar.gz
/httpcomponents-client-4.4.1-src.tar.gz
/httpcomponents-client-4.5-src.tar.gz
/httpcomponents-client-4.5.1-src.tar.gz
/httpcomponents-client-4.5.2-src.tar.gz
/httpcomponents-client-4.5.3-src.tar.gz
/httpcomponents-client-4.5.5-src.tar.gz
/httpcomponents-client-4.5.6-src.tar.gz
/httpcomponents-client-4.5.7-src.tar.gz
/httpcomponents-client-4.5.8-src.tar.gz
/httpcomponents-client-4.5.9-src.tar.gz
/httpcomponents-client-4.5.10-src.tar.gz
/httpcomponents-client-4.5.11-src.tar.gz
/httpcomponents-client-4.5.13-src.tar.gz
/httpcomponents-client-4.5.14-source-release.zip

View File

@ -1 +0,0 @@
c3e525345e474f457b85d074a96865eaf5d397ad SOURCES/httpcomponents-client-4.5.10-src.tar.gz

View File

@ -1,14 +1,14 @@
From e1c756ba18432e60600c57370076761bf4774ee7 Mon Sep 17 00:00:00 2001 From d9f08c36a39b035ec70a37cb6aac5f980cc57054 Mon Sep 17 00:00:00 2001
From: Mikolaj Izdebski <mizdebsk@redhat.com> From: Mikolaj Izdebski <mizdebsk@redhat.com>
Date: Tue, 20 Jan 2015 16:04:31 +0100 Date: Tue, 20 Jan 2015 16:04:31 +0100
Subject: [PATCH 1/3] Use system copy of effective_tld_names.dat Subject: [PATCH 1/2] Use system copy of effective_tld_names.dat
--- ---
.../apache/http/conn/util/PublicSuffixMatcherLoader.java | 7 +++---- .../apache/http/conn/util/PublicSuffixMatcherLoader.java | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-) 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java b/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java diff --git a/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java b/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java
index 3d762c188..c7b5a7eb1 100644 index 8783c5b..c858220 100644
--- a/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java --- a/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java
+++ b/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java +++ b/httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java
@@ -82,11 +82,10 @@ public final class PublicSuffixMatcherLoader { @@ -82,11 +82,10 @@ public final class PublicSuffixMatcherLoader {
@ -27,5 +27,5 @@ index 3d762c188..c7b5a7eb1 100644
// Should never happen // Should never happen
final Log log = LogFactory.getLog(PublicSuffixMatcherLoader.class); final Log log = LogFactory.getLog(PublicSuffixMatcherLoader.class);
-- --
2.31.1 2.19.1

View File

@ -1,7 +1,7 @@
From e089dcee616e2fd37897e1a95492f581d1f6c939 Mon Sep 17 00:00:00 2001 From 852a31061e2d46cc4bc1b5cfa388ed023de5095d Mon Sep 17 00:00:00 2001
From: Mat Booth <mat.booth@redhat.com> From: Mat Booth <mat.booth@redhat.com>
Date: Fri, 7 Dec 2018 18:01:27 +0000 Date: Fri, 7 Dec 2018 18:01:27 +0000
Subject: [PATCH 2/3] Port to mockito 2 Subject: [PATCH 2/2] Port to mockito 2
Gets it building, but disables tests that are caused by change in Gets it building, but disables tests that are caused by change in
behaviour of mockito that I didn't know how to fix behaviour of mockito that I didn't know how to fix
@ -14,7 +14,7 @@ behaviour of mockito that I didn't know how to fix
5 files changed, 8 insertions(+), 4 deletions(-) 5 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java diff --git a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java
index 67f058ded..4a8cd1ab0 100644 index 282e11b..0411caf 100644
--- a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java --- a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java
+++ b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java +++ b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java
@@ -288,6 +288,7 @@ public class TestAbortHandling extends LocalServerTestBase { @@ -288,6 +288,7 @@ public class TestAbortHandling extends LocalServerTestBase {
@ -26,7 +26,7 @@ index 67f058ded..4a8cd1ab0 100644
final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class);
final ConnectionRequest connrequest = Mockito.mock(ConnectionRequest.class); final ConnectionRequest connrequest = Mockito.mock(ConnectionRequest.class);
diff --git a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java diff --git a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java
index f6380313e..31799cbc1 100644 index f638031..31799cb 100644
--- a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java --- a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java
+++ b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java +++ b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java
@@ -150,6 +150,7 @@ public class TestSPNegoScheme extends LocalServerTestBase { @@ -150,6 +150,7 @@ public class TestSPNegoScheme extends LocalServerTestBase {
@ -46,7 +46,7 @@ index f6380313e..31799cbc1 100644
this.serverBootstrap.registerHandler("*", new PleaseNegotiateService()); this.serverBootstrap.registerHandler("*", new PleaseNegotiateService());
final HttpHost target = start(); final HttpHost target = start();
diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java
index 7de9921e2..07b6bfccc 100644 index 2261da8..e922155 100644
--- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java --- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java
+++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java +++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMainClientExec.java
@@ -402,6 +402,7 @@ public class TestMainClientExec { @@ -402,6 +402,7 @@ public class TestMainClientExec {
@ -65,7 +65,7 @@ index 7de9921e2..07b6bfccc 100644
\ No newline at end of file \ No newline at end of file
+} +}
diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java
index 9a96ba686..41eb0236f 100644 index 9a96ba6..41eb023 100644
--- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java --- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java
+++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java +++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestMinimalClientExec.java
@@ -256,6 +256,7 @@ public class TestMinimalClientExec { @@ -256,6 +256,7 @@ public class TestMinimalClientExec {
@ -77,7 +77,7 @@ index 9a96ba686..41eb0236f 100644
final HttpRoute route = new HttpRoute(target); final HttpRoute route = new HttpRoute(target);
final HttpClientContext context = new HttpClientContext(); final HttpClientContext context = new HttpClientContext();
diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java
index a5d0591da..78b1af440 100644 index 5621a3f..23506dc 100644
--- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java --- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java
+++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java +++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java
@@ -349,7 +349,7 @@ public class TestRedirectExec { @@ -349,7 +349,7 @@ public class TestRedirectExec {
@ -100,5 +100,5 @@ index a5d0591da..78b1af440 100644
} }
-- --
2.31.1 2.19.1

View File

@ -0,0 +1,374 @@
From 919dd0b1be2ff0bb9532131c18eafcd68d6196d6 Mon Sep 17 00:00:00 2001
From: Marian Koncek <mkoncek@redhat.com>
Date: Tue, 12 Dec 2023 12:13:58 +0100
Subject: [PATCH] Port to Mockito 5
Generated by running:
find -name '*.java' -exec sed -i \
-e 's/org\.mockito\.Matchers/org.mockito.ArgumentMatchers/g' \
-e 's/\([^[:alnum:]]\)Matchers\([^[:alnum:]]\)/\1ArgumentMatchers\2/g' \
-e 's/Mockito\.anyObject()/Mockito\.any()/g' \
{} +
---
.../client/cache/TestAsynchronousValidator.java | 2 +-
.../cache/TestCachedHttpResponseGenerator.java | 4 ++--
.../client/cache/TestHttpCacheJiraNumber1147.java | 14 +++++++-------
.../cache/ehcache/TestEhcacheHttpCacheStorage.java | 4 ++--
.../org/apache/http/client/entity/TestGZip.java | 4 ++--
.../client/protocol/TestRequestAddCookies.java | 4 ++--
.../impl/client/TestIdleConnectionEvictor.java | 4 ++--
.../impl/client/integration/TestSPNegoScheme.java | 10 +++++-----
.../TestPoolingHttpClientConnectionManager.java | 2 +-
.../impl/conn/TestSystemDefaultRoutePlanner.java | 4 ++--
.../http/impl/cookie/TestRFC6265CookieSpec.java | 14 +++++++-------
.../http/impl/execchain/TestConnectionHolder.java | 8 ++++----
.../http/impl/execchain/TestRedirectExec.java | 4 ++--
13 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsynchronousValidator.java b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsynchronousValidator.java
index 58ecef1..6932fc4 100644
--- a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsynchronousValidator.java
+++ b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsynchronousValidator.java
@@ -26,7 +26,7 @@
*/
package org.apache.http.impl.client.cache;
-import static org.mockito.Matchers.isA;
+import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
diff --git a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java
index 3fc12f6..84bd347 100644
--- a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java
+++ b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java
@@ -26,8 +26,8 @@
*/
package org.apache.http.impl.client.cache;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.same;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
diff --git a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpCacheJiraNumber1147.java b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpCacheJiraNumber1147.java
index ceb8f71..674bccd 100644
--- a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpCacheJiraNumber1147.java
+++ b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpCacheJiraNumber1147.java
@@ -26,8 +26,8 @@
*/
package org.apache.http.impl.client.cache;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isA;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
@@ -53,7 +53,7 @@ import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
public class TestHttpCacheJiraNumber1147 {
@@ -116,7 +116,7 @@ public class TestHttpCacheJiraNumber1147 {
eq(route),
isA(HttpRequestWrapper.class),
isA(HttpClientContext.class),
- (HttpExecutionAware) Matchers.isNull())).thenReturn(Proxies.enhanceResponse(response));
+ (HttpExecutionAware) ArgumentMatchers.isNull())).thenReturn(Proxies.enhanceResponse(response));
final BasicHttpCache cache = new BasicHttpCache(resourceFactory, httpCacheStorage, cacheConfig);
final ClientExecChain t = createCachingExecChain(backend, cache, cacheConfig);
@@ -129,7 +129,7 @@ public class TestHttpCacheJiraNumber1147 {
eq(route),
isA(HttpRequestWrapper.class),
isA(HttpClientContext.class),
- (HttpExecutionAware) Matchers.isNull());
+ (HttpExecutionAware) ArgumentMatchers.isNull());
removeCache();
@@ -138,7 +138,7 @@ public class TestHttpCacheJiraNumber1147 {
eq(route),
isA(HttpRequestWrapper.class),
isA(HttpClientContext.class),
- (HttpExecutionAware) Matchers.isNull())).thenReturn(Proxies.enhanceResponse(response));
+ (HttpExecutionAware) ArgumentMatchers.isNull())).thenReturn(Proxies.enhanceResponse(response));
final HttpResponse response2 = t.execute(route, get, context, null);
Assert.assertEquals(200, response2.getStatusLine().getStatusCode());
@@ -148,7 +148,7 @@ public class TestHttpCacheJiraNumber1147 {
eq(route),
isA(HttpRequestWrapper.class),
isA(HttpClientContext.class),
- (HttpExecutionAware) Matchers.isNull());
+ (HttpExecutionAware) ArgumentMatchers.isNull());
}
protected ClientExecChain createCachingExecChain(final ClientExecChain backend,
diff --git a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCacheStorage.java b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCacheStorage.java
index a1366e8..30b40bf 100644
--- a/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCacheStorage.java
+++ b/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCacheStorage.java
@@ -26,8 +26,8 @@
*/
package org.apache.http.impl.client.cache.ehcache;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.same;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
diff --git a/httpclient/src/test/java/org/apache/http/client/entity/TestGZip.java b/httpclient/src/test/java/org/apache/http/client/entity/TestGZip.java
index 516299d..76472c6 100644
--- a/httpclient/src/test/java/org/apache/http/client/entity/TestGZip.java
+++ b/httpclient/src/test/java/org/apache/http/client/entity/TestGZip.java
@@ -41,7 +41,7 @@ import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.junit.Assert;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
public class TestGZip {
@@ -72,7 +72,7 @@ public class TestGZip {
@Test
public void testCompressionIOExceptionLeavesOutputStreamOpen() throws Exception {
final HttpEntity in = Mockito.mock(HttpEntity.class);
- Mockito.doThrow(new IOException("Ooopsie")).when(in).writeTo(Matchers.<OutputStream>any());
+ Mockito.doThrow(new IOException("Ooopsie")).when(in).writeTo(ArgumentMatchers.<OutputStream>any());
final GzipCompressingEntity gzipe = new GzipCompressingEntity(in);
final OutputStream out = Mockito.mock(OutputStream.class);
try {
diff --git a/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAddCookies.java b/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAddCookies.java
index 4854f52..5968542 100644
--- a/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAddCookies.java
+++ b/httpclient/src/test/java/org/apache/http/client/protocol/TestRequestAddCookies.java
@@ -57,7 +57,7 @@ import org.apache.http.protocol.HttpCoreContext;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
public class TestRequestAddCookies {
@@ -403,7 +403,7 @@ public class TestRequestAddCookies {
Assert.assertNotNull(headers2);
Assert.assertEquals(0, headers2.length);
- Mockito.verify(this.cookieStore, Mockito.times(1)).clearExpired(Matchers.<Date>any());
+ Mockito.verify(this.cookieStore, Mockito.times(1)).clearExpired(ArgumentMatchers.<Date>any());
}
@Test
diff --git a/httpclient/src/test/java/org/apache/http/impl/client/TestIdleConnectionEvictor.java b/httpclient/src/test/java/org/apache/http/impl/client/TestIdleConnectionEvictor.java
index da0d9bd..07b34da 100644
--- a/httpclient/src/test/java/org/apache/http/impl/client/TestIdleConnectionEvictor.java
+++ b/httpclient/src/test/java/org/apache/http/impl/client/TestIdleConnectionEvictor.java
@@ -32,7 +32,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.http.conn.HttpClientConnectionManager;
import org.junit.Assert;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
/**
@@ -69,7 +69,7 @@ public class TestIdleConnectionEvictor {
Thread.sleep(1000);
Mockito.verify(cm, Mockito.atLeast(1)).closeExpiredConnections();
- Mockito.verify(cm, Mockito.never()).closeIdleConnections(Matchers.anyLong(), Matchers.<TimeUnit>any());
+ Mockito.verify(cm, Mockito.never()).closeIdleConnections(ArgumentMatchers.anyLong(), ArgumentMatchers.<TimeUnit>any());
Assert.assertTrue(connectionEvictor.isRunning());
diff --git a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java
index 31799cb..91806c4 100644
--- a/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java
+++ b/httpclient/src/test/java/org/apache/http/impl/client/integration/TestSPNegoScheme.java
@@ -59,7 +59,7 @@ import org.ietf.jgss.GSSName;
import org.ietf.jgss.Oid;
import org.junit.Assert;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
/**
@@ -98,14 +98,14 @@ public class TestSPNegoScheme extends LocalServerTestBase {
NegotiateSchemeWithMockGssManager() throws Exception {
super(true);
Mockito.when(context.initSecContext(
- Matchers.any(byte[].class), Matchers.anyInt(), Matchers.anyInt()))
+ ArgumentMatchers.any(byte[].class), ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt()))
.thenReturn("12345678".getBytes());
Mockito.when(manager.createName(
- Matchers.any(String.class), Matchers.any(Oid.class)))
+ ArgumentMatchers.any(String.class), ArgumentMatchers.any(Oid.class)))
.thenReturn(name);
Mockito.when(manager.createContext(
- Matchers.any(GSSName.class), Matchers.any(Oid.class),
- Matchers.any(GSSCredential.class), Matchers.anyInt()))
+ ArgumentMatchers.any(GSSName.class), ArgumentMatchers.any(Oid.class),
+ ArgumentMatchers.any(GSSCredential.class), ArgumentMatchers.anyInt()))
.thenReturn(context);
}
diff --git a/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java b/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java
index 51bc2ef..02c375b 100644
--- a/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java
+++ b/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java
@@ -226,7 +226,7 @@ public class TestPoolingHttpClientConnectionManager {
mgr.releaseConnection(conn1, "some state", 0, TimeUnit.MILLISECONDS);
Mockito.verify(pool).release(entry, false);
- Mockito.verify(entry, Mockito.never()).setState(Mockito.anyObject());
+ Mockito.verify(entry, Mockito.never()).setState(Mockito.any());
Mockito.verify(entry, Mockito.never()).updateExpiry(Mockito.anyLong(), Mockito.eq(TimeUnit.MILLISECONDS));
}
diff --git a/httpclient/src/test/java/org/apache/http/impl/conn/TestSystemDefaultRoutePlanner.java b/httpclient/src/test/java/org/apache/http/impl/conn/TestSystemDefaultRoutePlanner.java
index 38920ba..690f2b5 100644
--- a/httpclient/src/test/java/org/apache/http/impl/conn/TestSystemDefaultRoutePlanner.java
+++ b/httpclient/src/test/java/org/apache/http/impl/conn/TestSystemDefaultRoutePlanner.java
@@ -46,7 +46,7 @@ import org.apache.http.protocol.HttpContext;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
/**
@@ -77,7 +77,7 @@ public class TestSystemDefaultRoutePlanner {
Assert.assertEquals(target, route.getTargetHost());
Assert.assertEquals(1, route.getHopCount());
Assert.assertFalse(route.isSecure());
- Mockito.verify(schemePortResolver, Mockito.never()).resolve(Matchers.<HttpHost>any());
+ Mockito.verify(schemePortResolver, Mockito.never()).resolve(ArgumentMatchers.<HttpHost>any());
}
@Test
diff --git a/httpclient/src/test/java/org/apache/http/impl/cookie/TestRFC6265CookieSpec.java b/httpclient/src/test/java/org/apache/http/impl/cookie/TestRFC6265CookieSpec.java
index 35753fd..bdf4ecd 100644
--- a/httpclient/src/test/java/org/apache/http/impl/cookie/TestRFC6265CookieSpec.java
+++ b/httpclient/src/test/java/org/apache/http/impl/cookie/TestRFC6265CookieSpec.java
@@ -40,7 +40,7 @@ import org.apache.http.cookie.SetCookie;
import org.apache.http.message.BasicHeader;
import org.junit.Assert;
import org.junit.Test;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
public class TestRFC6265CookieSpec {
@@ -69,8 +69,8 @@ public class TestRFC6265CookieSpec {
Assert.assertEquals("stuff", clientCookie.getAttribute("this"));
Assert.assertEquals(null, clientCookie.getAttribute("that"));
- Mockito.verify(h1).parse(Matchers.<SetCookie>any(), Matchers.eq("stuff"));
- Mockito.verify(h2, Mockito.never()).parse(Matchers.<SetCookie>any(), Matchers.anyString());
+ Mockito.verify(h1).parse(ArgumentMatchers.<SetCookie>any(), ArgumentMatchers.eq("stuff"));
+ Mockito.verify(h2, Mockito.never()).parse(ArgumentMatchers.<SetCookie>any(), ArgumentMatchers.anyString());
}
@Test
@@ -316,8 +316,8 @@ public class TestRFC6265CookieSpec {
final CookieOrigin origin = new CookieOrigin("host", 80, "/path/", true);
cookiespec.parse(header, origin);
- Mockito.verify(h1).parse(Matchers.<SetCookie>any(), Matchers.eq("morestuff"));
- Mockito.verify(h1, Mockito.times(1)).parse(Matchers.<SetCookie>any(), Matchers.anyString());
+ Mockito.verify(h1).parse(ArgumentMatchers.<SetCookie>any(), ArgumentMatchers.eq("morestuff"));
+ Mockito.verify(h1, Mockito.times(1)).parse(ArgumentMatchers.<SetCookie>any(), ArgumentMatchers.anyString());
}
@Test
@@ -333,8 +333,8 @@ public class TestRFC6265CookieSpec {
final CookieOrigin origin = new CookieOrigin("host", 80, "/path/", true);
cookiespec.parse(header, origin);
- Mockito.verify(h1, Mockito.never()).parse(Matchers.<SetCookie>any(), Matchers.anyString());
- Mockito.verify(h2).parse(Matchers.<SetCookie>any(), Matchers.eq("otherstuff"));
+ Mockito.verify(h1, Mockito.never()).parse(ArgumentMatchers.<SetCookie>any(), ArgumentMatchers.anyString());
+ Mockito.verify(h2).parse(ArgumentMatchers.<SetCookie>any(), ArgumentMatchers.eq("otherstuff"));
}
}
diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestConnectionHolder.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestConnectionHolder.java
index a908141..8f1c8f7 100644
--- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestConnectionHolder.java
+++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestConnectionHolder.java
@@ -67,7 +67,7 @@ public class TestConnectionHolder {
Mockito.verify(conn, Mockito.times(1)).shutdown();
Mockito.verify(mgr, Mockito.times(1)).releaseConnection(
Mockito.<HttpClientConnection>any(),
- Mockito.anyObject(),
+ Mockito.any(),
Mockito.anyLong(),
Mockito.<TimeUnit>any());
}
@@ -98,7 +98,7 @@ public class TestConnectionHolder {
Mockito.verify(conn, Mockito.times(1)).shutdown();
Mockito.verify(mgr, Mockito.times(1)).releaseConnection(
Mockito.<HttpClientConnection>any(),
- Mockito.anyObject(),
+ Mockito.any(),
Mockito.anyLong(),
Mockito.<TimeUnit>any());
}
@@ -120,7 +120,7 @@ public class TestConnectionHolder {
Mockito.verify(mgr, Mockito.times(1)).releaseConnection(
Mockito.<HttpClientConnection>any(),
- Mockito.anyObject(),
+ Mockito.any(),
Mockito.anyLong(),
Mockito.<TimeUnit>any());
}
@@ -142,7 +142,7 @@ public class TestConnectionHolder {
Mockito.verify(mgr, Mockito.times(1)).releaseConnection(
Mockito.<HttpClientConnection>any(),
- Mockito.anyObject(),
+ Mockito.any(),
Mockito.anyLong(),
Mockito.<TimeUnit>any());
}
diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java
index 78b1af4..da34722 100644
--- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java
+++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestRedirectExec.java
@@ -55,7 +55,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatcher;
-import org.mockito.Matchers;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
@@ -363,7 +363,7 @@ public class TestRedirectExec {
}
static HttpRequestWrapper same(final HttpRequest original) {
- return Matchers.argThat(new HttpRequestWrapperMatcher(original));
+ return ArgumentMatchers.argThat(new HttpRequestWrapperMatcher(original));
}
}
--
2.43.0

View File

@ -1,126 +0,0 @@
From 0ac5caeaed1fa0354e02e0609f2c726b1b72eb8c Mon Sep 17 00:00:00 2001
From: Oleg Kalnichevski <olegk@apache.org>
Date: Tue, 29 Sep 2020 09:37:38 +0200
Subject: [PATCH 3/3] Incorrect handling of malformed authority component by
URIUtils#extractHost
---
.../apache/http/client/utils/URIUtils.java | 69 ++++++++-----------
.../http/client/utils/TestURIUtils.java | 6 +-
2 files changed, 32 insertions(+), 43 deletions(-)
diff --git a/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java b/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java
index 8eb7667e3..aa3431f6f 100644
--- a/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java
+++ b/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java
@@ -419,56 +419,43 @@ public class URIUtils {
if (uri == null) {
return null;
}
- HttpHost target = null;
if (uri.isAbsolute()) {
- int port = uri.getPort(); // may be overridden later
- String host = uri.getHost();
- if (host == null) { // normal parse failed; let's do it ourselves
+ if (uri.getHost() == null) { // normal parse failed; let's do it ourselves
// authority does not seem to care about the valid character-set for host names
- host = uri.getAuthority();
- if (host != null) {
+ if (uri.getAuthority() != null) {
+ String content = uri.getAuthority();
// Strip off any leading user credentials
- final int at = host.indexOf('@');
- if (at >= 0) {
- if (host.length() > at+1 ) {
- host = host.substring(at+1);
- } else {
- host = null; // @ on its own
- }
+ int at = content.indexOf('@');
+ if (at != -1) {
+ content = content.substring(at + 1);
}
- // Extract the port suffix, if present
- if (host != null) {
- final int colon = host.indexOf(':');
- if (colon >= 0) {
- final int pos = colon + 1;
- int len = 0;
- for (int i = pos; i < host.length(); i++) {
- if (Character.isDigit(host.charAt(i))) {
- len++;
- } else {
- break;
- }
- }
- if (len > 0) {
- try {
- port = Integer.parseInt(host.substring(pos, pos + len));
- } catch (final NumberFormatException ex) {
- }
- }
- host = host.substring(0, colon);
+ final String scheme = uri.getScheme();
+ final String hostname;
+ final int port;
+ at = content.indexOf(":");
+ if (at != -1) {
+ hostname = content.substring(0, at);
+ try {
+ final String portText = content.substring(at + 1);
+ port = !TextUtils.isEmpty(portText) ? Integer.parseInt(portText) : -1;
+ } catch (final NumberFormatException ex) {
+ return null;
}
+ } else {
+ hostname = content;
+ port = -1;
+ }
+ try {
+ return new HttpHost(hostname, port, scheme);
+ } catch (final IllegalArgumentException ex) {
+ return null;
}
}
- }
- final String scheme = uri.getScheme();
- if (!TextUtils.isBlank(host)) {
- try {
- target = new HttpHost(host, port, scheme);
- } catch (final IllegalArgumentException ignore) {
- }
+ } else {
+ return new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
}
}
- return target;
+ return null;
}
/**
diff --git a/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java b/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java
index 189966635..98a44bc1c 100644
--- a/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java
+++ b/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java
@@ -273,14 +273,16 @@ public class TestURIUtils {
Assert.assertEquals(new HttpHost("localhost",8080),
URIUtils.extractHost(new URI("http://localhost:8080/;sessionid=stuff/abcd")));
- Assert.assertEquals(new HttpHost("localhost",8080),
+ Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://localhost:8080;sessionid=stuff/abcd")));
- Assert.assertEquals(new HttpHost("localhost",-1),
+ Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://localhost:;sessionid=stuff/abcd")));
Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://:80/robots.txt")));
Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://some%20domain:80/robots.txt")));
+ Assert.assertEquals(null,
+ URIUtils.extractHost(new URI("http://blah@goggle.com:80@google.com/")));
}
@Test
--
2.31.1

1
ci.fmf Normal file
View File

@ -0,0 +1 @@
resultsdb-testcase: separate

7
gating.yaml Normal file
View File

@ -0,0 +1,7 @@
--- !Policy
product_versions:
- rhel-10
decision_contexts:
- osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/javapackages.functional}

View File

@ -1,38 +1,37 @@
%bcond_with bootstrap
Name: httpcomponents-client Name: httpcomponents-client
Summary: HTTP agent implementation based on httpcomponents HttpCore Summary: HTTP agent implementation based on httpcomponents HttpCore
Version: 4.5.10 Version: 4.5.14
Release: 4%{?dist} Release: 9%{?dist}
License: ASL 2.0 License: Apache-2.0
URL: http://hc.apache.org/ URL: http://hc.apache.org/
Source0: http://www.apache.org/dist/httpcomponents/httpclient/source/%{name}-%{version}-src.tar.gz Source0: https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-client/%{version}/httpcomponents-client-%{version}-source-release.zip
BuildArch: noarch BuildArch: noarch
ExclusiveArch: %{java_arches} noarch
Patch0: 0001-Use-system-copy-of-effective_tld_names.dat.patch Patch1: 0001-Use-system-copy-of-effective_tld_names.dat.patch
Patch1: 0002-Port-to-mockito-2.patch Patch2: 0002-Port-to-mockito-2.patch
Patch2: 0003-Incorrect-handling-of-malformed-authority-component-.patch Patch3: 0003-Port-to-Mockito-5.patch
BuildRequires: maven-local-openjdk8 %if %{with bootstrap}
BuildRequires: %{?module_prefix}mvn(commons-codec:commons-codec) BuildRequires: javapackages-bootstrap
%else
BuildRequires: maven-local
BuildRequires: mvn(commons-codec:commons-codec)
BuildRequires: mvn(commons-logging:commons-logging) BuildRequires: mvn(commons-logging:commons-logging)
BuildRequires: mvn(junit:junit) BuildRequires: mvn(junit:junit)
BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
BuildRequires: mvn(org.apache.httpcomponents:httpcomponents-parent:pom:) BuildRequires: mvn(org.apache.httpcomponents:httpcomponents-parent:pom:)
BuildRequires: %{?module_prefix}mvn(org.apache.httpcomponents:httpcore) BuildRequires: mvn(org.apache.httpcomponents:httpcore)
BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin) BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin)
BuildRequires: mvn(org.mockito:mockito-core) BuildRequires: mvn(org.mockito:mockito-core)
%if 0%{?module_prefix:1}
%package -n %{module_prefix}%{name}
Summary: %{summary}
%endif %endif
%if %{without bootstrap}
BuildRequires: publicsuffix-list BuildRequires: publicsuffix-list
Requires: publicsuffix-list
%if 0%{?module_prefix:1}
%description -n %{module_prefix}%{name}
%{summary}.
%endif %endif
Requires: publicsuffix-list
%description %description
HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on
@ -46,9 +45,9 @@ encouraged to upgrade.
%prep %prep
%setup -q -n %{name}-%{version} %setup -q -n %{name}-%{version}
%patch0 -p1 %patch 1 -p1
%patch1 -p1 %patch 2 -p1
%patch2 -p1 %patch 3 -p1
%mvn_package :::tests: __noinstall %mvn_package :::tests: __noinstall
@ -118,32 +117,111 @@ rm httpclient/src/test/java/org/apache/http/client/config/TestRequestConfig.java
%build %build
%mvn_file ":{*}" httpcomponents/@1 %mvn_file ":{*}" httpcomponents/@1
%mvn_build %mvn_build -- -Dmaven.compiler.release=8
%install %install
%mvn_install %mvn_install
%files -n %{?module_prefix}%{name} -f .mfiles %files -f .mfiles
%license LICENSE.txt NOTICE.txt %license LICENSE.txt NOTICE.txt
%doc README.txt RELEASE_NOTES.txt %doc README.txt RELEASE_NOTES.txt
%changelog %changelog
* Sat Sep 25 2021 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.10-4 * Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 4.5.14-9
- Fix incorrect handling of malformed authority component in request URIs - Bump release for October 2024 mass rebuild:
- Resolves: CVE-2020-13956 Resolves: RHEL-64018
* Sat Jan 25 2020 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.10-3 * Thu Aug 01 2024 Troy Dawson <tdawson@redhat.com> - 4.5.14-8
- Bump release for Aug 2024 java mass rebuild
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 4.5.14-7
- Bump release for June 2024 mass rebuild
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.14-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.14-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Dec 12 2023 Marian Koncek <mkoncek@redhat.com> - 4.5.14-4
- Port to Mockito 5
* Wed Sep 20 2023 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.14-3
- Rebuild to regenerate auto-Requires on java
* Fri Sep 01 2023 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.14-2
- Convert License tag to SPDX format
* Wed Aug 16 2023 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.14-1
- Update to upstream version 4.5.14
* Tue Aug 15 2023 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.13-8
- Build with default JDK 17
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.13-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.13-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.13-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sat Feb 05 2022 Jiri Vanek <jvanek@redhat.com> - 4.5.13-4
- Rebuilt for java-17-openjdk as system jdk
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.13-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.13-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Jun 23 2021 Marian Koncek <mkoncek@redhat.com> - 4.5.13-1
- Update to upstream version 4.5.13
* Mon May 17 2021 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.11-3
- Bootstrap build
- Non-bootstrap build
* Wed Feb 17 2021 Fabio Valentini <decathorpe@gmail.com> - 4.5.10-6
- Build with -release 8 for better OpenJDK 8 compatibility.
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.10-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.10-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jul 10 2020 Jiri Vanek <jvanek@redhat.com> - 4.5.10-3
- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Jan 25 2020 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.11-2
- Build with OpenJDK 8 - Build with OpenJDK 8
* Wed Jan 22 2020 Marian Koncek <mkoncek@redhat.com> - 4.5.11-1
- Update to upstream version 4.5.11
* Tue Nov 05 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.10-2 * Tue Nov 05 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.10-2
- Mass rebuild for javapackages-tools 201902 - Mass rebuild for javapackages-tools 201902
* Mon Sep 16 2019 Marian Koncek <mkoncek@redhat.com> - 4.5.10-1 * Mon Sep 16 2019 Marian Koncek <mkoncek@redhat.com> - 4.5.10-1
- Update to upstream version 4.5.10 - Update to upstream version 4.5.10
* Mon Sep 16 2019 Marian Koncek <mkoncek@redhat.com> - 4.5.10-1
- Update to upstream version 4.5.10
* Thu Aug 29 2019 Fabio Valentini <decathorpe@gmail.com> - 4.5.7-3
- Disable memcached and ehcache support.
* Mon Jul 29 2019 Marian Koncek <mkoncek@redhat.com> - 4.5.9-1 * Mon Jul 29 2019 Marian Koncek <mkoncek@redhat.com> - 4.5.9-1
- Update to upstream version 4.5.9 - Update to upstream version 4.5.9
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.5.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Fri May 24 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.8-2 * Fri May 24 2019 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5.8-2
- Mass rebuild for javapackages-tools 201901 - Mass rebuild for javapackages-tools 201901

7
plans/javapackages.fmf Normal file
View File

@ -0,0 +1,7 @@
summary: Run javapackages-specific tests
discover:
how: fmf
url: https://src.fedoraproject.org/tests/javapackages
ref: c10s
execute:
how: tmt

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (httpcomponents-client-4.5.14-source-release.zip) = 8ff67eff499007cceb974b465cd8332ab4c0b583425a54ca4d032a8b135e9f7915f6e9736b5b60d5c1772a391c5bcc09cabe3ab25db44f2536d8f9db3d37ecfd