dependabot[bot] opened a new pull request, #1016:
URL: https://github.com/apache/maven-wagon/pull/1016

   Bumps [org.bouncycastle:bcpkix-jdk18on](https://github.com/bcgit/bc-java) 
from 1.85 to 1.86.
   <details>
   <summary>Changelog</summary>
   <p><em>Sourced from <a 
href="https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.md";>org.bouncycastle:bcpkix-jdk18on's
 changelog</a>.</em></p>
   <blockquote>
   <h1>Bouncy Castle Crypto Package - Release Notes</h1>
   <h2>1.0 Introduction</h2>
   <p>The Bouncy Castle Crypto package is a Java implementation of 
cryptographic algorithms. The package is organised so that it contains a 
light-weight API suitable for use in any environment (including the J2ME) with 
the additional infrastructure to conform the algorithms to the JCE 
framework.</p>
   <h2>2.0 Release History</h2>
   <p><!-- raw HTML omitted --><!-- raw HTML omitted --></p>
   <h3>2.1.1 Version</h3>
   <p>Release: 1.87<br />
   Date: 2026, TBD</p>
   <h3>2.1.2 Defects Fixed</h3>
   <ul>
   <li>X500Name.equals compared two names that are equal but not byte-identical 
- the same RDNs in another order, or in another string type - by searching the 
second name for each RDN of the first and canonicalising both values on every 
candidate comparison, so the comparison was quadratic in the number of RDNs, 
and CMSSignedData.getSignerInfos(), the CMSEnvelopedData, CMSAuthEnvelopedData 
and CMSEnvelopedDataParser constructors, TimeStampToken, the S/MIME classes 
built on them and X509CertificateHolderSelector.match() all compare names taken 
from the message before anything in it is verified: a 1.1 MB signed or 
enveloped message carrying two 40,000 RDN issuer names took about 90 seconds of 
CPU to parse. The signer and recipient stores also indexed their entries in a 
HashMap keyed on the signer or recipient id, whose hash code is easy to make 
collide, so a message with 16,000 signers or recipients chosen to collide took 
several seconds to index. AbstractX500NameStyle.areEqual now com
 pares the RDNs positionally and otherwise sorts the canonical form of each RDN 
once and compares the two multisets, so a comparison is n log n in the number 
of RDNs, the two stores now scan their entries on lookup instead of indexing 
them, and the selector checks the serial number before the issuer name.</li>
   <li>The hash code of an ASN.1 object is a short fold over its content octets 
that a sender can make collide at will, and several tables built while a 
message is parsed were keyed on one: the extension table behind Extensions, so 
every certificate, CRL, OCSP and timestamp request parse, the deprecated 
X509Extensions, ExtendedKeyUsage, the CMS AttributeTable built from a 
SignerInfo's signed and unsigned attributes (the unsigned ones lying outside 
the signature), the EST CSRAttributesResponse index, and the Set of digest 
AlgorithmIdentifiers that the CMSSignedDataParser constructor and 
CMSSignedData.getDigestAlgorithmIDs() build from the SignedData 
digestAlgorithms field. With every key sharing one hash code each insert 
scanned all those before it, so a 6 MB certificate or message holding 65,000 
such entries took about 35 seconds of CPU to parse and the parser's digest 
algorithm set about 140 seconds. Those tables are now ordered maps keyed on the 
OID's string form and the digest alg
 orithm sets are ordered on the identifier's DER encoding, so each is n log n 
in the number of entries whatever their hash codes. AttributeTable.add() and 
remove() also no longer share a multi-valued entry's Vector with the table they 
were derived from.</li>
   <li>CMSSignedData digested the encapsulated or detached content once for 
every signer it verified, so a message carrying many SignerInfos over a large 
content cost their product in digesting before any signature was checked, where 
CMSSignedDataParser digests once per algorithm named in the digestAlgorithms 
field. The signers of a CMSSignedData now share the content digests computed 
under each digest algorithm identifier, so signers using the same algorithm 
digest the content once. The new org.bouncycastle.cms.max_digest_algorithms 
property bounds the number of distinct digest algorithms either class will 
compute over one message's content, each algorithm past the limit raising a 
CMSException; it is unlimited unless set.</li>
   <li>The verify side of the ML-DSA-CALCULATE-MU signature service, and 
MLDSASigner.verifyMu beneath it, compared the supplied mu with a value derived 
from the key's tr and the context alone, never absorbing the message passed to 
update(), so a correct mu was accepted only for an empty message and rejected 
for every other, while the sign side of the same service computed mu correctly. 
The comparison also finalised the engine's shared digest, so an ordinary 
verifySignature on the same MLDSASigner afterwards failed for a valid 
signature, and a mu of the wrong length escaped Signature.verify() as an 
unchecked DataLengthException. verifyMu now derives the expected mu from the 
message digest exactly as generateMu does and compares in constant time, the 
signer stays usable afterwards, the service answers a wrong-length mu with a 
SignatureException, and the contract - the verify side accepts exactly the mu 
the sign side returns for the same key, context and data - is now in the 
javadoc of 
 both.</li>
   <li>The SM2 key pair generator of the BC provider, 
KeyPairGenerator.getInstance(&quot;SM2&quot;, &quot;BC&quot;), was built on the 
generic EC key pair generator rather than the lightweight SM2KeyPairGenerator 
the 1.73 release notes described, so it could draw a private key of n - 1, 
which Section 6.1 of GB/T 32918.1 excludes and which the SM2 signer rejects. It 
now uses SM2KeyPairGenerator and draws from [1, n - 2].</li>
   <li>ESTResponse added each header line of an EST server's response to its 
header table by copying that header's value array, so a response repeating one 
header many times was quadratic to parse - about 7 seconds of CPU per megabyte 
of header lines - and a read limit set through 
JsseESTServiceBuilder.withReadLimit() only applied once the header block had 
been read. The values of each header are now collected once, and the header 
block counts against the read limit of the source.</li>
   <li>The C509 encoding of an RFC 6955 proof-of-possession value (the 
sa-ecdhPop signature algorithms, values 14 to 16 of the C509 Signature 
Algorithms Registry) copied the DER DhSigStatic into the signature value byte 
string, where Section 4.2 of draft-ietf-cose-cbor-encoded-cert-21 defines the 
value as the bare hashValue when the DhSigStatic names no issuer and serial 
number and as the [issuer, certificateSerialNumber, hashValue] array when it 
does. The converter now produces both forms from the DER and reconstructs the 
DER from either; previously the array form was rejected outright and the 
byte-string form reconstructed a signature value four bytes short of the DER it 
came from, so a type 3 request carrying one could not verify. The 
privateKeyPossessionStatement certification request attribute (RFC 9883, 
Section 4.3.3 of the draft) was carried in the generic ~oid form on conversion 
and refused on reconstruction; it is now converted to and from its int-coded 
[issuer, certificateS
 erialNumber, cert] form, with an embedded signature certificate re-encoded as 
a type 3 C509 certificate. The certificate, certification request and template 
vectors of draft-ietf-cose-c509-test-vectors-02 now drive the util and pkix 
test suites.</li>
   <li>The DANE SMIMEA support in org.bouncycastle.cert.dane had three defects. 
JndiDANEFetcherFactory, when asked for every entry under a bare domain name, 
removed the first and last characters of the owner name the JNDI DNS provider 
reports for each listed record, assuming a quoted name; the provider returns 
the name unquoted with a trailing root dot, so the first hex digit of the hash 
label was lost and the lookup that followed could never find the record. It now 
removes only the root dot. DANEEntryStore kept one entry per owner name, so an 
address with more than one SMIMEA record (a signing and an encryption 
certificate, say) only ever showed its last; every entry is now kept. 
DANEEntrySelectorFactory split an address at its first '@', mis-handling a 
quoted local-part containing one, and threw StringIndexOutOfBoundsException 
rather than DANEException for an address with none; it now splits at the last 
'@', removes enclosing quotes and backslash quoting from the local-part before 
 hashing as RFC 8162 sec. 3 describes, and rejects an address with no '@'. The 
DANEEntry(String, byte[]) constructor also now rejects, with an IOException, a 
record whose flags do not describe a full certificate entry rather than parsing 
whatever follows the flags as a certificate.</li>
   <li>TimeStampToken accepted a token whose signing-time signed attribute 
disagreed with the genTime in its TSTInfo. Both are the TSA's statement of when 
the token was produced, and the disagreement is what distinguishes an RFC 3161 
token from a signature a TSA has put over a supplied TSTInfo through another 
service using the same key, such as a legacy countersignature endpoint, which 
some TSAs still offer. The constructor now rejects a token whose signing-time, 
when present, is further from genTime than the token's accuracy plus one 
minute; the check can be switched off with the 
org.bouncycastle.tsp.allow_inconsistent_signing_time property. 
TimeStampTokenGenerator now sets a signing-time attribute from the genTime it 
is given rather than the clock, so its tokens are consistent whatever genTime 
is passed.</li>
   <li>TimeStampToken.validate() accepted a token whose message imprint was 
calculated with MD5, for which collisions can be computed, and 
TSPAlgorithms.ALLOWED, the set the request side is typically checked against, 
included MD5. MD5 has been removed from TSPAlgorithms.ALLOWED, and validate() 
now rejects a token whose imprint algorithm is not in it (failure code badAlg). 
The new TSPAlgorithms.LEGACY is ALLOWED plus MD5; 
validate(SignerInformationVerifier, Set) takes the set of acceptable imprint 
algorithms, and the org.bouncycastle.tsp.allowed_imprint_algorithms property, a 
comma separated list of digest names or OIDs, replaces ALLOWED as the default 
for validate(SignerInformationVerifier). TSPAlgorithms.ALLOWED and LEGACY are 
now unmodifiable.</li>
   <li>CRL-based revocation checking (the PKIX CertPathValidator and the pkix 
X509RevocationChecker) tracked a CRL entry's reasonCode in the same field as 
its own status markers and did not range-check it, so a CRL entry whose 
reasonCode was outside the RFC 5280 sec. 5.3.1 set was mishandled: 11 left the 
certificate unrevoked, other out-of-range values threw an unchecked exception 
out of validation. The revocation date and the reason code are now kept 
separately; an undefined reasonCode is processed as unspecified and reported as 
&quot;(unknown code: N)&quot;.</li>
   <li>OERDefinition.enumItem(label, value) discarded the explicit enumerand 
value: Builder.enumValue() set it on the builder it had just copied and 
returned the copy without it, so every item was numbered by its position in the 
definition instead. The value is now kept, and the items without one are 
numbered as X.680 sec. 20.3 and 20.6 specify: a root item takes the successive 
integers from 0, skipping any explicit root number, and an extension item takes 
the smallest value not defined in the root and greater than every preceding 
extension item (the old loop restarted its count after an explicit number, so 
an explicit 0 followed by an unnumbered item was a duplicate). The three ETSI 
TS 102 941 response-code definitions that use explicit values give 
&quot;ok&quot; the value 0 at position 0, so their encodings are unchanged.</li>
   <li>OERInputStream read the two length-prefixed INTEGER forms and BIT STRING 
with Streams.readFully and did not check its best-effort return, so a stream 
that ended inside the value decoded the zero-padded buffer as a value rather 
than failing. Every length-driven read in the decoder now goes through 
Streams.readLenBytesFully, which fails with EOFException at the real end of 
input and, for a long length, does not allocate the full array until the stream 
has delivered a fair part of it - so a hostile length that is within the 
decoder's allocation cap, or a cap a caller has raised, cannot drive a large 
allocation from a short input.</li>
   <li>The OER codec gave a signed INTEGER whose upper bound is exactly the 
maximum of a fixed-size word the next word up: X.696 sec. 10.4 a)-d) make both 
bounds inclusive, but the upper-bound comparison was strict, so INTEGER 
(-128..127) was a two-octet word rather than one, and likewise at the 16-, 32- 
and 64-bit boundaries. The two signed ranges shipped with the library, 
NinetyDegreeInt and OneEightyDegreeInt, lie inside the four-octet word and are 
unaffected.</li>
   <li>The ETSI TS 102 941 response code wrappers AuthorizationResponseCode, 
AuthorizationValidationResponseCode and EnrolmentResponseCode checked their 
range on BigInteger.intValue(), which truncates, so a value past the int range 
whose low 32 bits were in range was accepted - 2^32 as &quot;ok&quot;. The 
check now rejects a negative value or one over 31 bits before consulting 
intValue().</li>
   <li>OERInputStream accepted an empty group of octets as the value zero in 
four places where X.696 requires at least one: a variable-size INTEGER with a 
length determinant of 0 (sec. 3.7.11 and 3.7.12 define the number forms as one 
or more octets), an ENUMERATED long form with 0 subsequent octets (sec. 11.4 
says 1 to 127), a length determinant long form with 0 subsequent octets (sec. 
8.6.5, likewise) and a sequence-of quantity of 0 octets (sec. 17.2). Each now 
fails with an IOException; the one-octet encodings of zero decode as 
before.</li>
   <li>OEROutputStream could not encode a CHOICE whose chosen alternative has a 
tag number of 63 or more. X.696 sec. 8.7.2.2 keeps a tag number below 63 in the 
first octet and sec. 8.7.2.3 continues one of 63 or more in 7-bit groups, most 
significant first, with bit 8 as the continuation flag; the encoder used the 
single octet up to and including 63, so 63 went out as the continuation escape 
with nothing after it, and BitBuilder.write7BitBytes took its groups from bit 
31 downward rather than from the low end, so 63 encoded as 83 78, which decodes 
as 504. Both forms of write7BitBytes now write the fewest 7-bit groups of the 
value, and the boundary is at 63. No CHOICE in the shipped ITS definitions has 
that many alternatives.</li>
   <li>OEROutputStream rejected a required SEQUENCE component as absent 
whenever it arrived wrapped in an OEROptional, the form the ITS classes' 
toASN1Primitive methods produce for present values, rather than only when the 
wrapper is the undefined ABSENT. A defined wrapper at a required position is 
now unwrapped and written like the bare value.</li>
   <li>OERInputStream, for an absent optional SEQUENCE component selected 
through a switch, tested the selected alternative for a default value but then 
took the default from the switch itself, which has none, so the alternative's 
default was added as null and the decode failed with NullPointerException. The 
default now comes from the selected alternative. No definition shipped with the 
library has a switched component with a default.</li>
   <li>OERInputStream read a SEQUENCE OF count through BigInteger.intValue(), 
which keeps only the low 32 bits, so a count of 2^32 + 3 decoded as 3 elements 
and the rest of the input was left in place for the next field. A count that 
does not fit in 31 bits is now rejected as out of range, and the fixed sizes 
taken from a definition go through BigIntegers.intValueExact() rather than 
silently truncating.</li>
   <li>OERInputStream rejected a valid SEQUENCE OF as &quot;out of range&quot; 
on any stream whose available() reported fewer bytes than the element count: 
available() is an estimate of what can be read without blocking, 0 from the 
base InputStream and from wrappers such as CipherInputStream, and the decoder 
had been using it as a bound on the count. The count is now bounded by the 
decoder's allocation ceiling (maxByteAllocation, 1 MiB by default) instead, and 
a count within it over a short input fails at the first element that is not 
there.</li>
   <li>OERInputStream could not decode a variable-size BIT STRING. X.696 sec. 
13.3 encodes one as a length determinant covering an initial octet, which gives 
the number of unused bits in the final octet, and the octets of the value, 
which is what OEROutputStream writes; the decoder read the determinant as a bit 
count, divided it by 8 and never read the initial octet, so it took no data at 
all for a two-octet value, and a stray third branch keyed on a negative size 
bound threw NullPointerException for an unbounded schema. The decoder now has 
the two forms of clause 13: a fixed size reads the whole octets the size 
occupies and derives the unused bits from it (a 12-bit string is two octets 
with four unused bits, where it was one octet), and any other size reads the 
determinant, the initial octet (rejected over 7, or non-zero for an empty 
value, 13.3.4) and the data, carrying the unused-bit count into the 
DERBitString. OERDefinition gains bitString() and bitString(lower, upper) 
alongside
  bitString(size). The single BIT STRING in the shipped ITS definitions is a 
fixed 8 bits and decodes as before.</li>
   <li>OEROutputStream wrote a negative INTEGER value under a type whose lower 
bound is zero or more through the unsigned encodings, so it went out as a 
different, positive value: -1 under INTEGER (0..255) as FF, the encoding of 
255, and under INTEGER (0..MAX) as 01 FF. A negative value is now rejected with 
IllegalArgumentException on both unsigned paths.</li>
   <li>OERInputStream.uint64() read its eight octets as a signed number, so a 
value with the top bit set came back negative; the other uintN readers were 
unsigned. It now reads unsigned.</li>
   <li>The OER codec treated an INTEGER with a positive lower bound as signed. 
X.696 sec. 10.2 a) gives the unsigned encodings to an integer whose lower bound 
is zero or positive; OERInputStream and OEROutputStream tested for a lower 
bound of exactly zero, so INTEGER (1..255) went out as a two-octet signed word 
rather than one unsigned octet and INTEGER (1..MAX) as a variable-size signed 
number, where 128 is 00 80 rather than 80. No OER definition shipped with the 
library puts a positive lower bound on an INTEGER.</li>
   <li>The OER codec encoded and decoded a negative ENUMERATED value wrongly. 
X.696 sec. 11.4 reserves the one-octet short form for the values 0 to 127 and 
puts every other value, negative ones included, in the long form as a 
two's-complement signed integer; OEROutputStream chose the long form only for 
values above 127, so a negative value went out in the short form masked to 
seven bits (-1 as 7F, the encoding of 127), and OERInputStream read a long-form 
value as unsigned (81 FF, the encoding of -1, as 255). Both now follow sec. 
11.4. No OER definition shipped with the library declares a negative 
enumerand.</li>
   <li>ASN1Enumerated rejected negative values, although an ENUMERATED is an 
integer (X.680 sec. 20) and may be negative: the int and BigInteger 
constructors threw &quot;enumerated must be non-negative&quot;, the byte array 
constructor rejected a leading sign bit, and a parsed ENUMERATED with a 
negative value failed to decode. The checks are removed, ASN1Enumerated gains 
isNegative() and longValueExact() alongside the existing intValueExact(), and a 
zero-length ENUMERATED is now reported as &quot;malformed enumerated&quot;, as 
a zero-length INTEGER is reported as &quot;malformed integer&quot;, rather than 
&quot;ENUMERATED has zero length&quot;. ASN1Enumerated.valueOf(int) and 
valueOf(long) return shared instances for the values 0 to 15, as 
ASN1Integer.valueOf() does, and a parsed single-byte ENUMERATED in that range 
is returned as the shared instance.</li>
   <li>A PBEKey stored in a BCFKS KeyStore was not reported as a key entry: 
isKeyEntry() returned false for it, so KeyStore.getEntry() returned null rather 
than a SecretKeyEntry, although getKey() recovered it. The PBE key entry type 
added for github <a 
href="https://redirect.github.com/bcgit/bc-java/issues/2164";>#2164</a> was 
missing from engineIsKeyEntry, and is now included.</li>
   <li>The CMS content-type decoders SignedData, EnvelopedData, 
AuthenticatedData, AuthEnvelopedData and EncryptedData read their mandatory 
fields by index or enumeration with no lower-bound size check, so a ContentInfo 
whose inner content was an empty or too-short SEQUENCE - malformed but 
DER-parseable - left the decode as an unchecked NoSuchElementException or 
ArrayIndexOutOfBoundsException rather than the CMSException the CMSSignedData, 
CMSEnvelopedData, CMSAuthenticatedData and CMSAuthEnvelopedData constructors 
declare (the IllegalArgumentException CMSEncryptedData documents). Each now 
rejects a short sequence with IllegalArgumentException before reading, as the 
sibling content types CompressedData and DigestedData already did, so the 
wrappers surface it as their declared exception; the case that claims an 
OPTIONAL field and then truncates the mandatory ones after it is covered too. 
The streaming parsers CMSSignedDataParser, CMSEnvelopedDataParser, 
CMSAuthenticatedDataParser, CMS
 AuthEnvelopedDataParser and CMSCompressedDataParser had the same gap and more: 
an absent or truncated inner SEQUENCE, a mandatory field of the wrong type, or 
absent encapsulated or encrypted content escaped as NullPointerException, 
ClassCastException, IllegalArgumentException or IllegalStateException. The 
asn1.cms stream parsers now report a missing mandatory field as an IOException, 
and the CMS parsers report malformed content as CMSException (&quot;Malformed 
content.&quot; / &quot;Missing content.&quot;) or the IOException they 
declare.</li>
   <li>A KeyAgreement asked for its shared secret before doPhase returned data 
rather than refusing. javax.crypto.KeyAgreement specifies IllegalStateException 
for that state, but nothing in the provider tracked it, so each SPI handed back 
whatever its result field held: for Diffie-Hellman that was the private value 
itself - engineInit seeded result with x, so generateSecret() returned the 
private exponent padded to the prime's length and 
generateSecret(&quot;AES&quot;) an all-zero key taken from that padding - while 
ECDH returned null and its named-algorithm overload raised 
NullPointerException. BaseAgreementSpi now records whether a doPhase has 
completed the agreement since the last init and refuses the request with an 
IllegalStateException naming the algorithm, so every family in the provider - 
DH, ECDH and ECMQV, the SM2 exchange, both ECGOST families, XDH, SM9 and 
NewHope - answers the same way, and the DH SPI no longer holds the private 
value in that field at all.</li>
   <li>Mac.getInstance and KeyGenerator.getInstance by the HMAC SHA-512/224 and 
SHA-512/256 object identifiers (1.2.840.113549.2.12 and .13) failed, although 
the same algorithms resolved by name and the matching SecretKeyFactory aliases 
were registered: the SHA512 mappings called addHMACAlgorithm for the two 
truncated variants without the addHMACAlias that registers their OIDs against 
Mac and KeyGenerator. Both are now aliased, as every other HMAC in that class 
already was.</li>
   <li>A KTSParameterSpec naming an HKDF key-derivation function with a 
parameters field - a form the provider does not service - was accepted at 
Cipher init and then failed out of wrap or unwrap with an unchecked 
IllegalStateException neither method declares. The KTS key-wrapping Ciphers 
(ML-KEM, Classic McEliece, FrodoKEM, the composite KEM and RSA-KEM) now 
validate the spec's KDF when they take it, reporting an unserviceable one as 
the InvalidAlgorithmParameterException engineInit declares, which is what the 
javax.crypto.KEM services already did through KdfUtil.resolveKemSpec.</li>
   <li>A DTLS handshake deadlocked when a handshake message ahead of the peer's 
ChangeCipherSpec (a client's CertificateVerify, say) was lost while the 
ChangeCipherSpec and Finished behind it arrived: the record layer moved its 
read epoch on at the ChangeCipherSpec and then discarded every retransmission 
of the lost message as belonging to the old epoch, whose records are only 
accepted once the handshake has completed. Each side then waited on the other 
until a handshake timeout, if one was configured, ended it. Every 
client-authenticated handshake, and every handshake in which the server issues 
a NewSessionTicket, was exposed. Until the handshake completes, handshake 
records from the current epoch are now still accepted after the read epoch has 
moved on, and each message is checked against the epoch of the record that 
carried it. The DTLS loopback tests now run their handshakes at 10% datagram 
loss in each direction, with a client-authenticated handshake at 25%.</li>
   </ul>
   <!-- raw HTML omitted -->
   </blockquote>
   <p>... (truncated)</p>
   </details>
   <details>
   <summary>Commits</summary>
   <ul>
   <li>See full diff in <a 
href="https://github.com/bcgit/bc-java/commits";>compare view</a></li>
   </ul>
   </details>
   <br />
   
   
   [![Dependabot compatibility 
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.bouncycastle:bcpkix-jdk18on&package-manager=maven&previous-version=1.85&new-version=1.86)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
   
   Dependabot will resolve any conflicts with this PR as long as you don't 
alter it yourself. You can also trigger a rebase manually by commenting 
`@dependabot rebase`.
   
   [//]: # (dependabot-automerge-start)
   [//]: # (dependabot-automerge-end)
   
   ---
   
   <details>
   <summary>Dependabot commands and options</summary>
   <br />
   
   You can trigger Dependabot actions by commenting on this PR:
   - `@dependabot rebase` will rebase this PR
   - `@dependabot recreate` will recreate this PR, overwriting any edits that 
have been made to it
   - `@dependabot show <dependency name> ignore conditions` will show all of 
the ignore conditions of the specified dependency
   - `@dependabot ignore this major version` will close this PR and stop 
Dependabot creating any more for this major version (unless you reopen the PR 
or upgrade to it yourself)
   - `@dependabot ignore this minor version` will close this PR and stop 
Dependabot creating any more for this minor version (unless you reopen the PR 
or upgrade to it yourself)
   - `@dependabot ignore this dependency` will close this PR and stop 
Dependabot creating any more for this dependency (unless you reopen the PR or 
upgrade to it yourself)
   
   
   </details>


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to