| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| |
| Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. |
| |
| This program and the accompanying materials are made available under the |
| terms of the Eclipse Public License v. 2.0, which is available at |
| http://www.eclipse.org/legal/epl-2.0. |
| |
| This Source Code may also be made available under the following Secondary |
| Licenses when the conditions for such availability set forth in the |
| Eclipse Public License v. 2.0 are satisfied: GNU General Public License, |
| version 2 with the GNU Classpath Exception, which is available at |
| https://www.gnu.org/software/classpath/license.html. |
| |
| SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 |
| |
| --> |
| |
| <!-- FindBugs exclude list for JavaMail --> |
| |
| <FindBugsFilter> |
| <!-- |
| FindBugs *really* wants us to use zero length arrays instead |
| of null. Unfortunately, there's a bunch of places we can't |
| do this for various reasons: |
| - The API specifies null and we can't make an incompatible change. |
| - We use null to indicate no header and an empty array to indicate |
| the header exists but has no entries. |
| - We use null to indicate NIL in the protocol and an empty array |
| to indicate an empty list "()" in the protocol. |
| This error occurs often enough that we just ignore it everywhere. |
| --> |
| <Match> |
| <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS"/> |
| </Match> |
| <!-- |
| There are a bunch of places where FindBugs complains about |
| exposing internal representations. We exclude cases where |
| this only happens in internal classes that are never visible |
| through the public JavaMail API, or cases where the user |
| passes in an object (usually an array) and can only hurt |
| themselves by modifying the array while a method is in progress, |
| or where the implementation is passing the data back to the user |
| (e.g., in an Exception) and never uses it again. |
| --> |
| <Match> |
| <Or> |
| <Class name="javax.mail.SendFailedException"/> |
| <Class name="javax.mail.event.MessageCountEvent"/> |
| <Class name="javax.mail.event.TransportEvent"/> |
| <Class name="com.sun.mail.iap.ByteArray"/> |
| <Class name="com.sun.mail.imap.MessageVanishedEvent"/> |
| <Class name="com.sun.mail.imap.protocol.FetchResponse"/> |
| </Or> |
| <Or> |
| <Bug pattern="EI_EXPOSE_REP"/> |
| <Bug pattern="EI_EXPOSE_REP2"/> |
| </Or> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.smtp.SMTPTransport"/> |
| <Method name="sendMessage"/> |
| <!-- passed in Address array --> |
| <Bug pattern="EI_EXPOSE_REP2"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.internet.MimeBodyPart"/> |
| <Method name="<init>"/> <!-- match constructor --> |
| <!-- passed in byte array --> |
| <Bug pattern="EI_EXPOSE_REP2"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.util.ByteArrayDataSource"/> |
| <Method name="<init>"/> <!-- match constructor --> |
| <!-- passed in byte array --> |
| <Bug pattern="EI_EXPOSE_REP2"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.util.MailSSLSocketFactory"/> |
| <Method name="setTrustManagers"/> |
| <!-- passed in TrustManager array --> |
| <Bug pattern="EI_EXPOSE_REP2"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.util.MailSSLSocketFactory"/> |
| <Method name="getTrustManagers"/> |
| <!-- returned TrustManager array --> |
| <Bug pattern="EI_EXPOSE_REP"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.INTERNALDATE"/> |
| <Method name="getDate"/> |
| <!-- |
| Returned Date object; it's only ever stored in |
| IMAPMessage.receivedDate and is always used to |
| construct a new Date object before returning to |
| users. |
| --> |
| <Bug pattern="EI_EXPOSE_REP"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.CopyUID"/> |
| <Method name="<init>"/> <!-- match constructor --> |
| <Bug pattern="EI_EXPOSE_REP2"/> |
| </Match> |
| |
| <!-- |
| A few places where it complains about wait not being in a loop. |
| This purposely doesn't loop so that the application |
| calling idle can check whether the idle should continue. |
| --> |
| <Match> |
| <!-- an anonymous inner class of the idle method --> |
| <Class name="~com\.sun\.mail\.imap\.IMAPFolder.*"/> |
| <Method name="doCommand"/> |
| <Bug pattern="WA_NOT_IN_LOOP"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPStore"/> |
| <Method name="idle"/> |
| <Bug pattern="WA_NOT_IN_LOOP"/> |
| </Match> |
| |
| <!-- |
| A few places where we catch Exception even though it's not |
| explicitly thrown. We need to make sure that if anything |
| goes wrong we clean things up. Perhaps these should be |
| converted to a finally block and a boolean "success" flag? |
| Most of these are related to reflection or ClassLoader |
| operations, which can fail for all sorts of unexpected reasons. |
| Some of these could be converted to use multi-catch with JDK 1.7. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPStore"/> |
| <Or> |
| <Method name="<init>"/> <!-- match constructor --> |
| <Method name="getProtocol"/> |
| <Method name="getStoreProtocol"/> |
| <Method name="newIMAPFolder"/> |
| </Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.IMAPProtocol"/> |
| <Or> |
| <Method name="authlogin"/> |
| <Method name="authntlm"/> |
| <Method name="authplain"/> |
| <Method name="authoauth2"/> |
| <Method name="sasllogin"/> |
| </Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.IMAPSaslAuthenticator"/> |
| <Method name="authenticate"/> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.pop3.POP3Store"/> |
| <Method name="<init>"/> <!-- match constructor --> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.smtp.SMTPTransport"/> |
| <Or> |
| <Method name="isConnected"/> |
| <Method name="sasllogin"/> |
| </Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.pop3.POP3Folder"/> |
| <Method name="createMessage"/> |
| <Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| <Bug pattern="DE_MIGHT_IGNORE"/> |
| </Or> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.util.SocketFetcher"/> |
| <Or> |
| <Method name="getSocket"/> |
| <Method name="startTLS"/> |
| <Method name="matchCert"/> |
| </Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.util.MimeUtil"/> |
| <Method name="cleanContentType"/> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.Session"/> |
| <Or> |
| <Method name="getService"/> |
| <Method name="loadAllResources"/> |
| </Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.internet.MimeUtility"/> |
| <Or> |
| <Method name="<clinit>"/> <!-- match static initializer --> |
| <Method name="getEncoding"/> |
| </Or> |
| <Bug pattern="REC_CATCH_EXCEPTION"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPFolder"/> |
| <Method name="handleIdle"/> |
| <Bug pattern="DE_MIGHT_IGNORE"/> |
| </Match> |
| |
| <!-- |
| FindBugs complains about a possible double check of headersLoaded, |
| but it seems to be just wrong; I don't see it. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPMessage"/> |
| <Method name="loadHeaders"/> |
| <Bug pattern="DC_DOUBLECHECK"/> |
| </Match> |
| |
| <!-- |
| These IMAP-specific subclasses of standard classes don't override |
| equals because all they add are constructors and optimized access |
| methods; everything else, including the way to test for equality, |
| is the same. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.FLAGS"/> |
| <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.IMAPAddress"/> |
| <!-- defined in ENVELOPE.java --> |
| <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/> |
| </Match> |
| |
| <!-- |
| FindBugs complains of an unitialized read of the "capabilities" |
| field. Since the superclass might initialize the field (via a |
| call into the overridden processGreeting method), any initialization |
| done in the IMAPProtocol class will undo any initialization done |
| as a side effect of calling the superclass constructor. Thus, we |
| need to depend on the field being initialized to the default value. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.IMAPProtocol"/> |
| <Method name="<init>"/> <!-- match constructor --> |
| <Bug pattern="UR_UNINIT_READ"/> |
| </Match> |
| |
| <!-- |
| This use of string concatenation only occurs when creating a |
| string for an error message in an exception. The simpler code |
| is better here; performance is not an issue. |
| --> |
| <Match> |
| <Class name="com.sun.mail.util.BASE64DecoderStream"/> |
| <Method name="recentChars"/> |
| <Bug pattern="SBSC_USE_STRINGBUFFER_CONCATENATION"/> |
| </Match> |
| |
| <!-- |
| Yes, the "next" element in my linked list isn't ever actually |
| used, but it feels weird to only have a "prev" element. |
| --> |
| <Match> |
| <Class name="javax.mail.EventQueue$QueueElement"/> |
| <Field name="next"/> |
| <Bug pattern="URF_UNREAD_FIELD"/> |
| </Match> |
| |
| <!-- |
| Stupid Serializable EventObject class causes FindBugs to complain |
| about transient fields in subclasses. I don't know why it's |
| complaining about these fields but not others, but since I don't |
| really expect anyone to serialize these events I'm just ignoring |
| this complaint. Ditto Exception fields. |
| --> |
| <Match> |
| <Class name="javax.mail.event.TransportEvent"/> |
| <Or> |
| <Field name="invalid"/> |
| <Field name="validSent"/> |
| <Field name="validUnsent"/> |
| </Or> |
| <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.event.FolderEvent"/> |
| <Or> |
| <Field name="folder"/> |
| <Field name="newFolder"/> |
| </Or> |
| <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.event.MessageChangedEvent"/> |
| <Field name="msg"/> |
| <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.event.MessageCountEvent"/> |
| <Field name="msgs"/> |
| <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.event.TransportEvent"/> |
| <Field name="msg"/> |
| <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.SendFailedException"/> |
| <Or> |
| <Field name="invalid"/> |
| <Field name="validSent"/> |
| <Field name="validUnsent"/> |
| </Or> |
| <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/> |
| </Match> |
| |
| <!-- |
| These string comparisons are just optimizations. |
| --> |
| <Match> |
| <Or> |
| <Class name="javax.mail.URLName"/> |
| <Class name="javax.mail.internet.InternetAddress"/> |
| </Or> |
| <Method name="equals"/> |
| <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ"/> |
| </Match> |
| |
| <!-- |
| This string comparison using == is to determine whether the |
| String object is a different String object. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.MimeUtility"/> |
| <Method name="decodeText"/> |
| <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ"/> |
| </Match> |
| |
| <!-- |
| This string comparison using == is to determine whether the |
| String object is the original default String object. |
| --> |
| <Match> |
| <Class name="com.sun.mail.smtp.SMTPTransport"/> |
| <Method name="authenticate"/> |
| <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ"/> |
| </Match> |
| |
| <!-- |
| ByteArrayInputStream.available guarantees to return the full number |
| of bytes left in the buffer, and ByteArrayInputStream.read guarantees |
| to read all the bytes, so we don't really need to check the return |
| value. Ignore this complaint. |
| --> |
| <Match> |
| <Class name="com.sun.mail.util.ASCIIUtility"/> |
| <Method name="getBytes"/> |
| <Bug pattern="DLS_DEAD_LOCAL_STORE"/> |
| </Match> |
| |
| <!-- |
| We extract the "lang" field of an encoded string but we don't |
| currently do anything with it. Ignore this complaint. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.ParameterList"/> |
| <Method name="decodeValue"/> |
| <Bug pattern="DLS_DEAD_LOCAL_STORE"/> |
| </Match> |
| |
| <!-- |
| The call ParameterList.set(null, "DONE") is a kludge used by the |
| IMAP provider to indicate that it's done setting parameters. |
| In other cases we *want* a null name to cause a NullPointerException. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.ParameterList"/> |
| <Method name="set"/> |
| <Bug pattern="NP_NULL_ON_SOME_PATH"/> |
| </Match> |
| |
| <!-- |
| We purposely don't close these streams, which are just wrappers |
| around the original stream that needs to remain open. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.MimeMultipart"/> |
| <Or> |
| <Method name="parse"/> |
| <Method name="parsebm"/> |
| </Or> |
| <Bug pattern="OS_OPEN_STREAM"/> |
| </Match> |
| |
| <!-- |
| When deleting the temp file fails, there's really nothing to be done. |
| --> |
| <Match> |
| <Class name="com.sun.mail.pop3.TempFile"/> |
| <Method name="close"/> |
| <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/> |
| </Match> |
| |
| <!-- |
| In IMAPFolder.close, I believe the protocol field can be set to null |
| as a result of a protocol error that invokes a callback that calls |
| cleanup, thus I don't believe these null checks are redundant. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPFolder"/> |
| <Method name="close"/> |
| <Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE"/> |
| </Match> |
| |
| <!-- |
| Can't fix these errors in toString until JavaMail 1.5 because |
| it's part of the spec. Sigh. |
| --> |
| <Match> |
| <Or> |
| <Class name="javax.mail.internet.ContentDisposition"/> |
| <Class name="javax.mail.internet.ContentType"/> |
| </Or> |
| <Method name="toString"/> |
| <Bug pattern="NP_TOSTRING_COULD_RETURN_NULL"/> |
| </Match> |
| |
| <!-- |
| IMAPFolder.uidTable is only ever manipulated when the |
| messageCacheLock is held, but FindBugs can't figure that out. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPFolder"/> |
| <Field name="uidTable"/> |
| <Bug pattern="IS2_INCONSISTENT_SYNC"/> |
| </Match> |
| |
| <!-- |
| IMAPFolder.doExpungeNotification is only ever manipulated when the |
| messageCacheLock is held, but FindBugs can't figure that out. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPFolder"/> |
| <Field name="doExpungeNotification"/> |
| <Bug pattern="IS2_INCONSISTENT_SYNC"/> |
| </Match> |
| |
| <!-- |
| The static mailDateFormat field is only used to access the parse |
| method, which is known to be thread safe, so we can ignore this error. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.INTERNALDATE"/> |
| <Bug pattern="STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"/> |
| </Match> |
| |
| <!-- |
| These errors are in code imported from the JDK, where it seems |
| to be purposely using the platform default encoding. It's safer |
| to just leave this alone and ignore the errors. |
| --> |
| <Match> |
| <Class name="javax.mail.URLName"/> |
| <Bug pattern="DM_DEFAULT_ENCODING"/> |
| </Match> |
| |
| <!-- |
| We're purposely using the platform default encoding because |
| we're trying to discover what the platform default encoding *is*! |
| --> |
| <Match> |
| <Class name="javax.mail.internet.MimeUtility"/> |
| <Method name="getDefaultJavaCharset"/> |
| <Bug pattern="DM_DEFAULT_ENCODING"/> |
| </Match> |
| |
| <!-- |
| We're purposely using the platform default encoding when a |
| charset hasn't been specified. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.ParameterList"/> |
| <Method name="combineMultisegmentNames"/> |
| <Bug pattern="DM_DEFAULT_ENCODING"/> |
| </Match> |
| |
| <!-- |
| We're purposely using the platform default encoding because |
| we're converting bytes that were written using the platform |
| default encoding back to a String. |
| --> |
| <Match> |
| <Class name="com.sun.mail.util.LogOutputStream"/> |
| <Method name="logBuf"/> |
| <Bug pattern="DM_DEFAULT_ENCODING"/> |
| </Match> |
| |
| <!-- |
| MimeBodyPart.headers is set in the constructor. IMAPBodyPart has |
| perhaps paranoid defensive code to set it if it's not set. That |
| code is protected by the object lock, but all of the reads of the |
| field are not, thus FindBugs complains. For now I think it's |
| better to leave the defensive code in and ignore this error. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.MimeBodyPart"/> |
| <Field name="headers"/> |
| <Bug pattern="IS2_INCONSISTENT_SYNC"/> |
| </Match> |
| |
| <!-- |
| Refactoring these anonymous inner classes to be static classes |
| makes the code less readable. Too bad there's no way for an |
| anonymous inner class to be static. |
| XXX - these class names aren't going to be stable as the code changes |
| --> |
| <Match> |
| <Or> |
| <Class name="com.sun.mail.imap.DefaultFolder$1"/> |
| <Class name="com.sun.mail.imap.DefaultFolder$2"/> |
| <Class name="com.sun.mail.imap.IMAPFolder$1"/> |
| <Class name="com.sun.mail.imap.IMAPFolder$4"/> |
| <Class name="com.sun.mail.imap.IMAPFolder$7"/> |
| <Class name="com.sun.mail.imap.IMAPFolder$13"/> |
| <Class name="com.sun.mail.imap.IMAPFolder$20"/> |
| <Class name="com.sun.mail.imap.IdleManager$2"/> |
| </Or> |
| <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON"/> |
| </Match> |
| |
| <!-- |
| SpotBugs doesn't recognize the anonymous inner classes above. |
| https://github.com/spotbugs/discuss/issues/22 |
| This regular expression version has the same effect, and |
| avoids the potential issue with the class names changing. |
| --> |
| <Match> |
| <Or> |
| <Class name="~com\.sun\.mail\.imap\.DefaultFolder.*"/> |
| <Class name="~com\.sun\.mail\.imap\.IMAPFolder.*"/> |
| <Class name="~com\.sun\.mail\.imap\.IdleManager.*"/> |
| </Or> |
| <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON"/> |
| </Match> |
| |
| <!-- |
| Even though only this array reference is volatile, the array is |
| used in such a way that it's safe. The aray elements are created |
| and initialized before the array is assigned to this array |
| reference, and after being assigned neither the array nor the |
| array elements are changed. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.IMAPFolder"/> |
| <Field name="attributes"/> |
| <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY"/> |
| </Match> |
| |
| <!-- |
| This code is easier to understand with empty "if" clauses; |
| the "match" method is being called for its side effects. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.FetchResponse"/> |
| <Method name="parseItem"/> |
| <Bug pattern="UCF_USELESS_CONTROL_FLOW"/> |
| </Match> |
| |
| <!-- |
| Even though these fields are unread for now, we'll keep them |
| since they represent data in the protocol message being parsed. |
| --> |
| <Match> |
| <Or> |
| <Class name="com.sun.mail.imap.protocol.ENVELOPE"/> |
| <Class name="com.sun.mail.imap.protocol.INTERNALDATE"/> |
| <Class name="com.sun.mail.imap.protocol.RFC822SIZE"/> |
| </Or> |
| <Field name="msgno"/> |
| <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.MailboxInfo"/> |
| <Field name="first"/> |
| <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/> |
| </Match> |
| <!-- |
| These unread fields are part of the public API. |
| --> |
| <Match> |
| <Class name="javax.mail.Service"/> |
| <Field name="debug"/> |
| <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/> |
| </Match> |
| <Match> |
| <Class name="javax.mail.Quota$Resource"/> |
| <Field name="usage"/> |
| <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/> |
| </Match> |
| |
| <!-- |
| We use a static MailDateFormat instance, which uses a static |
| GregorianCalendar instance. The MailDateFormat.parse method |
| uses only local data except for the GregorianCalendar instance, |
| which is invoked through a static synchronized method. |
| --> |
| <Match> |
| <Class name="com.sun.mail.imap.protocol.ENVELOPE"/> |
| <Bug pattern="STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"/> |
| </Match> |
| |
| <!-- |
| A special String instance is used to indicate that the POP3 |
| UID is unknown. The uid field is initialized to this String |
| instance, which we then compare with later to see if the uid |
| has been set. |
| --> |
| <Match> |
| <Class name="com.sun.mail.pop3.POP3Folder"/> |
| <Method name="getUID"/> |
| <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ"/> |
| </Match> |
| <!-- |
| As above, a special String instance is used to indicate whether |
| certain fields have been set. |
| --> |
| <Match> |
| <Class name="com.sun.mail.smtp.SMTPTransport"/> |
| <Or> |
| <Method name="getAuthorizationId"/> |
| <Method name="getNTLMDomain"/> |
| <Method name="getSASLRealm"/> |
| </Or> |
| <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ"/> |
| </Match> |
| |
| <!-- |
| I know Exception.toString is never supposed to return null, |
| but this extra check is cheap insurance. |
| --> |
| <Match> |
| <Class name="javax.mail.MessagingException"/> |
| <Method name="toString"/> |
| <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/> |
| </Match> |
| <!-- |
| I know ClassLoader.getResources is never supposed to return null, |
| but this extra check is cheap insurance. |
| --> |
| <Match> |
| <Class name="~javax\.mail\.Session\$.*"/> |
| <Method name="run"/> |
| <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/> |
| </Match> |
| |
| <!-- |
| These names may be confusing, but we're stuck with them. |
| --> |
| <Match> |
| <Class name="javax.mail.PasswordAuthentication"/> |
| <Method name="getUserName"/> |
| <Bug pattern="NM_CONFUSING"/> |
| </Match> |
| |
| <!-- |
| This trivial inner class extends ArrayList, but is never serialized, |
| so it doesn't really need a serialVersionUID. |
| --> |
| <Match> |
| <Class name="javax.mail.internet.ParameterList$MultiValue"/> |
| <Bug pattern="SE_NO_SERIALVERSIONID"/> |
| </Match> |
| |
| <!-- |
| These array references are declared volatile because they're |
| treated as copy-on-write. |
| --> |
| <Match> |
| <Class name="com.sun.mail.util.logging.LogManagerProperties"/> |
| <Field name="REFLECT_NAMES"/> |
| <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY"/> |
| </Match> |
| <Match> |
| <Class name="com.sun.mail.util.logging.MailHandler"/> |
| <Field name="attachmentFilters"/> |
| <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY"/> |
| </Match> |
| |
| <!-- |
| The Authenticator fields are only accessible by subclasses, |
| which are only called through the one synchronized public |
| method, assuming the subclass doesn't do something crazy and |
| expose them itself. |
| --> |
| <Match> |
| <Class name="javax.mail.Authenticator"/> |
| <Bug pattern="IS2_INCONSISTENT_SYNC"/> |
| </Match> |
| |
| <!-- |
| Ignore failures to close connection. |
| --> |
| <Match> |
| <Class name="com.sun.mail.smtp.SMTPTransport"/> |
| <Method name="protocolConnect"/> |
| <Bug pattern="DE_MIGHT_IGNORE"/> |
| </Match> |
| |
| <!-- |
| This inner class doesn't need "this", but it creates another |
| inner class that *does* need "this". |
| --> |
| <Match> |
| <Class name="com.sun.mail.smtp.SMTPTransport$BDATOutputStream"/> |
| <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS"/> |
| </Match> |
| </FindBugsFilter> |