//# 1 errors, 683 messages
//#
/*
    //#CommentServlet.java:1:1: class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */

package org.apache.roller.weblogger.ui.rendering.servlets;  

import java.io.IOException;
import java.sql.Timestamp;
import java.util.Iterator;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.config.WebloggerConfig;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
import org.apache.roller.weblogger.business.search.IndexManager;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.UserManager;
import org.apache.roller.weblogger.business.WeblogManager;
import org.apache.roller.weblogger.pojos.WeblogEntryComment;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentAuthenticator;
import org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager;
import org.apache.roller.weblogger.ui.rendering.plugins.comments.DefaultCommentAuthenticator;
import org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest;
import org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm;
import org.apache.roller.weblogger.util.GenericThrottle;
import org.apache.roller.weblogger.util.IPBanList;
import org.apache.roller.weblogger.util.MailUtil;
import org.apache.roller.weblogger.util.I18nMessages;
import org.apache.roller.weblogger.util.RollerMessages;
import org.apache.roller.weblogger.util.RollerMessages.RollerMessage;
import org.apache.roller.weblogger.util.URLUtilities;
import org.apache.roller.weblogger.util.Utilities;
import org.apache.roller.weblogger.util.cache.CacheManager;


/**
 * The CommentServlet handles all incoming weblog entry comment posts.
 *
 * We validate each incoming comment based on various comment settings and
 * if all checks are passed then the comment is saved.
 *
 * Incoming comments are tested against the MT Blacklist. If they are found
 * to be spam, then they are marked as spam and hidden from view.
 *
 * If email notification is turned on, each new comment will result in an
 * email sent to the blog owner and all who have commented on the same post.
 */
public class CommentServlet extends HttpServlet {
    //#CommentServlet.java:70: method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()
    //#input(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this
    //#output(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this.authenticator
    //#output(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this.commentThrottle
    //#output(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this.commentValidationManager
    //#post(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this.authenticator == null
    //#post(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this.commentThrottle == null
    //#post(void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()): this.commentValidationManager == null
    
    private static Log log = LogFactory.getLog(CommentServlet.class);
    //#CommentServlet.java:72: method: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init
    //#CommentServlet.java:72: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/rendering/servlets/CommentServlet]
    //#output(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Dispatch_Table.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
    //#output(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Dispatch_Table.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
    //#output(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Dispatch_Table.init(Ljavax/servlet/ServletConfig;)V
    //#output(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): log
    //#post(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/rendering/servlets/CommentServlet] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Dispatch_Table.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V == &doGet
    //#post(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Dispatch_Table.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V == &doPost
    //#post(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): __Dispatch_Table.init(Ljavax/servlet/ServletConfig;)V == &init
    //#post(org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init): init'ed(log)
    //#CommentServlet.java:72: end of method: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet__static_init
    
    private CommentAuthenticator     authenticator = null;
    private CommentValidationManager commentValidationManager = null;
    private GenericThrottle          commentThrottle = null;
    //#CommentServlet.java:76: end of method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet()
    
    
    /**
     * Initialization.
     */
    public void init(ServletConfig servletConfig) throws ServletException {
        
        super.init(servletConfig);
    //#CommentServlet.java:84: method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.init(ServletConfig)
    //#CommentServlet.java:84: Warning: suspicious precondition
    //#    the precondition for org/apache/roller/weblogger/util/cache/CacheManager.cacheFactory.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#input(void init(ServletConfig)): " . "._tainted
    //#input(void init(ServletConfig)): " CommentValidators"._tainted
    //#input(void init(ServletConfig)): ""._tainted
    //#input(void init(ServletConfig)): ", timeout="._tainted
    //#input(void init(ServletConfig)): "Configured "._tainted
    //#input(void init(ServletConfig)): "Configured CommentValidator: "._tainted
    //#input(void init(ServletConfig)): "Constructing new cache with props "._tainted
    //#input(void init(ServletConfig)): "Error accessing comment validator: "._tainted
    //#input(void init(ServletConfig)): "Error finding comment validator: "._tainted
    //#input(void init(ServletConfig)): "Error insantiating comment validator: "._tainted
    //#input(void init(ServletConfig)): "It appears that your factory ["._tainted
    //#input(void init(ServletConfig)): "Unable to instantiate cache factory ["._tainted
    //#input(void init(ServletConfig)): "] does not implement the CacheFactory interface"._tainted
    //#input(void init(ServletConfig)): "] falling back on default"._tainted
    //#input(void init(ServletConfig)): "new cache constructed. size="._tainted
    //#input(void init(ServletConfig)): log
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/AkismetCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/BlacklistCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[others]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.log
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/AkismetCommentValidator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/BlacklistCommentValidator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessLinksCommentValidator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessSizeCommentValidator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[others]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessLinksCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessSizeCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/Cache.__Descendant_Table[org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/Cache.__Descendant_Table[org/apache/roller/weblogger/util/cache/LRUCacheImpl]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheFactory.__Descendant_Table[org/apache/roller/weblogger/util/cache/CacheFactory]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheFactory.__Descendant_Table[org/apache/roller/weblogger/util/cache/ExpiringLRUCacheFactoryImpl]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheFactory.__Descendant_Table[org/apache/roller/weblogger/util/cache/LRUCacheFactoryImpl]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheFactory.__Descendant_Table[others]
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheFactory.__Dispatch_Table.constructCache(Ljava/util/Map;)Lorg/apache/roller/weblogger/util/cache/Cache;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheManager.cacheFactory
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheManager.cacheFactory.__Tag
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheManager.cacheHandlers
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheManager.caches
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/CacheManager.log
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/ExpiringLRUCacheFactoryImpl.__Dispatch_Table.constructCache(Ljava/util/Map;)Lorg/apache/roller/weblogger/util/cache/Cache;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/LRUCacheFactoryImpl.__Dispatch_Table.constructCache(Ljava/util/Map;)Lorg/apache/roller/weblogger/util/cache/Cache;
    //#input(void init(ServletConfig)): org/apache/roller/weblogger/util/cache/LRUCacheImpl.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void init(ServletConfig)): servletConfig
    //#input(void init(ServletConfig)): this
    //#output(void init(ServletConfig)): new ArrayList(CommentValidationManager#1) num objects
    //#output(void init(ServletConfig)): new CommentValidationManager(init#2) num objects
    //#output(void init(ServletConfig)): this.commentValidationManager.__Tag
    //#output(void init(ServletConfig)): this.commentValidationManager.bundle
    //#output(void init(ServletConfig)): this.commentValidationManager.validators
    //#output(void init(ServletConfig)): new Date(LRUCacheImpl#1) num objects
    //#output(void init(ServletConfig)): new DefaultCommentAuthenticator(init#1) num objects
    //#output(void init(ServletConfig)): new DefaultCommentAuthenticator(init#1).__Tag
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*) num objects
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).__Tag
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).cache
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).hits
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).id
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).misses
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).puts
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).removes
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).startTime
    //#output(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*).timeout
    //#output(void init(ServletConfig)): new GenericThrottle(init#3) num objects
    //#output(void init(ServletConfig)): new GenericThrottle(init#3).__Tag
    //#output(void init(ServletConfig)): new GenericThrottle(init#3).clientHistoryCache
    //#output(void init(ServletConfig)): new GenericThrottle(init#3).interval
    //#output(void init(ServletConfig)): new GenericThrottle(init#3).threshold
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*) num objects
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).__Tag
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).cache
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).hits
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).id
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).misses
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).puts
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).removes
    //#output(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*).startTime
    //#output(void init(ServletConfig)): this.authenticator
    //#output(void init(ServletConfig)): this.commentThrottle
    //#output(void init(ServletConfig)): this.commentValidationManager
    //#new obj(void init(ServletConfig)): new ArrayList(CommentValidationManager#1)
    //#new obj(void init(ServletConfig)): new CommentValidationManager(init#2)
    //#new obj(void init(ServletConfig)): new Date(LRUCacheImpl#1)
    //#new obj(void init(ServletConfig)): new DefaultCommentAuthenticator(init#1)
    //#new obj(void init(ServletConfig)): new ExpiringLRUCacheImpl(constructCache#1*)
    //#new obj(void init(ServletConfig)): new GenericThrottle(init#3)
    //#new obj(void init(ServletConfig)): new LRUCacheImpl(constructCache#1*)
    //#pre[1] (void init(ServletConfig)): log != null
    //#pre[3] (void init(ServletConfig)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.log != null
    //#pre[4] (void init(ServletConfig)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.cacheFactory != null
    //#pre[5] (void init(ServletConfig)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.cacheFactory.__Tag in {org/apache/roller/weblogger/util/cache/CacheFactory, org/apache/roller/weblogger/util/cache/ExpiringLRUCacheFactoryImpl, org/apache/roller/weblogger/util/cache/LRUCacheFactoryImpl}
    //#pre[6] (void init(ServletConfig)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.cacheHandlers != null
    //#pre[7] (void init(ServletConfig)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.caches != null
    //#pre[8] (void init(ServletConfig)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.log != null
    //#presumption(void init(ServletConfig)): java.lang.Class:forName(...)@91 != null
    //#presumption(void init(ServletConfig)): java.lang.Class:newInstance(...).__Tag@92 in {org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator, org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator, org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator}
    //#presumption(void init(ServletConfig)): java.lang.Integer:parseInt(...)@117 in -2_147_483..4_294_967
    //#post(void init(ServletConfig)): this.authenticator != null
    //#post(void init(ServletConfig)): this.commentThrottle == One-of{&new GenericThrottle(init#3), old this.commentThrottle}
    //#post(void init(ServletConfig)): this.commentValidationManager == &new CommentValidationManager(init#2)
    //#post(void init(ServletConfig)): new ArrayList(CommentValidationManager#1) num objects == 1
    //#post(void init(ServletConfig)): new CommentValidationManager(init#2) num objects == 1
    //#post(void init(ServletConfig)): this.commentValidationManager.__Tag == org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager
    //#post(void init(ServletConfig)): init'ed(this.commentValidationManager.bundle)
    //#post(void init(ServletConfig)): this.commentValidationManager.validators == &new ArrayList(CommentValidationManager#1)
    //#post(void init(ServletConfig)): init'ed(new Date(LRUCacheImpl#1) num objects)
    //#post(void init(ServletConfig)): new DefaultCommentAuthenticator(init#1) num objects <= 1
    //#post(void init(ServletConfig)): init'ed(new DefaultCommentAuthenticator(init#1).__Tag)
    //#post(void init(ServletConfig)): init'ed(new ExpiringLRUCacheImpl(constructCache#1*) num objects)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).__Tag)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).cache)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).hits)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).id)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).misses)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).puts)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).removes)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).startTime)
    //#post(void init(ServletConfig)): possibly_updated(new ExpiringLRUCacheImpl(constructCache#1*).timeout)
    //#post(void init(ServletConfig)): new GenericThrottle(init#3) num objects <= 1
    //#post(void init(ServletConfig)): init'ed(new GenericThrottle(init#3).__Tag)
    //#post(void init(ServletConfig)): init'ed(new GenericThrottle(init#3).clientHistoryCache)
    //#post(void init(ServletConfig)): init'ed(new GenericThrottle(init#3).interval)
    //#post(void init(ServletConfig)): init'ed(new GenericThrottle(init#3).threshold)
    //#post(void init(ServletConfig)): init'ed(new LRUCacheImpl(constructCache#1*) num objects)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).__Tag)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).cache)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).hits)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).id)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).misses)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).puts)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).removes)
    //#post(void init(ServletConfig)): possibly_updated(new LRUCacheImpl(constructCache#1*).startTime)
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.ResourceBundle:getString
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:getName
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.ResourceBundle:getBundle
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getProperty
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.StringTokenizer
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.StringTokenizer:countTokens
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.StringTokenizer:hasMoreTokens
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.StringTokenizer:nextToken
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.Class:forName
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.Class:newInstance
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:org.apache.commons.logging.Log:info
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.Date
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.LinkedHashMap
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.util.Collections:synchronizedMap
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:org.apache.roller.weblogger.util.cache.LRUCacheImpl
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void init(ServletConfig)): Effects-of-calling:constructCache
    //#test_vector(void init(ServletConfig)): org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(...)@106: {0}, {1}
        
        log.info("Initializing CommentServlet");
    //#CommentServlet.java:86: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        
        // lookup the authenticator we are going to use and instantiate it
        try {
            String name = WebloggerConfig.getProperty("comment.authenticator.classname");
    //#CommentServlet.java:90: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
            Class clazz = Class.forName(name);
            this.authenticator = (CommentAuthenticator) clazz.newInstance();
        } catch(Exception e) {
            log.error(e);
    //#CommentServlet.java:94: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
            this.authenticator = new DefaultCommentAuthenticator();
        }
        
        // instantiate a comment validation manager for comment spam checking
        commentValidationManager = new CommentValidationManager();
        
        // instantiate a comment format manager for comment formatting
        String fmtrs = WebloggerConfig.getProperty("comment.formatter.classnames");
    //#CommentServlet.java:102: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
        String[] formatters = Utilities.stringToStringArray(fmtrs, ",");
    //#CommentServlet.java:103: Warning: unused assignment
    //#    unused assignment into formatters
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
        
        // are we doing throttling?
        if(WebloggerConfig.getBooleanProperty("comment.throttle.enabled")) {
    //#CommentServlet.java:106: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(String)
            
            int threshold = 25;
            try {
                threshold = Integer.parseInt(WebloggerConfig.getProperty("comment.throttle.threshold"));
    //#CommentServlet.java:110: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
            } catch(Exception e) {
                log.warn("bad input for config property comment.throttle.threshold", e);
    //#CommentServlet.java:112: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object, Throwable)
            }
            
            int interval = 60000;
            try {
                interval = Integer.parseInt(WebloggerConfig.getProperty("comment.throttle.interval"));
    //#CommentServlet.java:117: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
                // convert from seconds to milliseconds
                interval = interval * 1000;
            } catch(Exception e) {
                log.warn("bad input for config property comment.throttle.interval", e);
    //#CommentServlet.java:121: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object, Throwable)
            }
            
            int maxEntries = 250;
            try {
                maxEntries = Integer.parseInt(WebloggerConfig.getProperty("comment.throttle.maxentries"));
    //#CommentServlet.java:126: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerConfig:getProperty(String)
            } catch(Exception e) {
                log.warn("bad input for config property comment.throttle.maxentries", e);
    //#CommentServlet.java:128: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object, Throwable)
            }
            
            commentThrottle = new GenericThrottle(threshold, interval, maxEntries);
            
            log.info("Comment Throttling ENABLED");
    //#CommentServlet.java:133: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        } else {
            log.info("Comment Throttling DISABLED");
    //#CommentServlet.java:135: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void init(ServletConfig)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        }
    }
    //#CommentServlet.java:137: end of method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.init(ServletConfig)
    
    
    /**
     * Handle incoming http GET requests.
     *
     * The CommentServlet does not support GET requests, it's a 404.
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
    //#CommentServlet.java:147: method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.doGet(HttpServletRequest, HttpServletResponse)
    //#input(void doGet(HttpServletRequest, HttpServletResponse)): response
    //#pre[1] (void doGet(HttpServletRequest, HttpServletResponse)): response != null
    }
    //#CommentServlet.java:148: end of method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.doGet(HttpServletRequest, HttpServletResponse)
    
    
    /**
     * Service incoming POST requests.
     *
     * Here we handle incoming comment postings.
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        
        String error = null;
    //#CommentServlet.java:159: method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.doPost(HttpServletRequest, HttpServletResponse)
    //#CommentServlet.java:159: Warning: suspicious precondition
    //#    the precondition for this.authenticator.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    suspicious precondition index: [25]
    //#    Attribs:  Soft
    //#CommentServlet.java:159: Warning: suspicious precondition
    //#    the precondition for this.commentThrottle.clientHistoryCache.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    suspicious precondition index: [29]
    //#    Attribs:  Soft
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): " "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): " - "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): " banned ips loaded"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): " color: black; font-size: 12px">"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): " hits since "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): ""._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "">"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "&#10;"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "&#10;&#10;"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "&#10;&#10;----&#10;"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "."._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): ".entry."._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): ".roller-ui.rendering.page."._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): ": "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<.Body><.html>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<.a><.span>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<.li>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<.p>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<.ul>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<a href=""._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<br .>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<br .><br .>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<br .><br .><hr .><span style="font-size: 11px">"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<html><body style="background: white; "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<li>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<p>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "<ul>"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): ">"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "ABUSIVE "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "ADDED "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "Comment Validation score: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "Doing comment posting for entry = "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "EXPIRED "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "EXPIRED ["._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "Error getting key "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "HIT "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "Invoking comment validator "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "Link to comment management page:"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "NEW "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "RE: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "STATUS "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "]"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "blind copying e-mail to: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "comment processed, forwarding to "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "commentServlet.commentAccepted"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "commentServlet.commentMarkedAsSpam"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "commentServlet.email.thereAreErrorMessages"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "commentServlet.email.thereAreSystemMessages"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "commentServlet.submittedToModerator"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "comments.disabled"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "copying e-mail to: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "e-mail from: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "email.comment.anonymous"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "email.comment.respond"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "email.comment.title"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "email.comment.wrote"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "error.commentAuthFailed"._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "invalidating comment = "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "request for messages in locale = "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "sending e-mail to: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "unable to lookup entry: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): "unable to lookup weblog: "._tainted
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/AkismetCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/AkismetCommentValidator.__Dispatch_Table.validate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/BlacklistCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/BlacklistCommentValidator.__Dispatch_Table.validate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator.__Dispatch_Table.authenticate(Ljavax/servlet/http/HttpServletRequest;)Z
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.__Dispatch_Table.validateComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/AkismetCommentValidator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/BlacklistCommentValidator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessLinksCommentValidator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessSizeCommentValidator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidator.__Dispatch_Table.validate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator.__Dispatch_Table.authenticate(Ljavax/servlet/http/HttpServletRequest;)Z
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessLinksCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessLinksCommentValidator.__Dispatch_Table.validate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessSizeCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/ExcessSizeCommentValidator.__Dispatch_Table.validate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator.__Dispatch_Table.authenticate(Ljavax/servlet/http/HttpServletRequest;)Z
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/ui/rendering/plugins/comments/TrackbackLinkbackCommentValidator.__Dispatch_Table.validate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;Lorg/apache/roller/weblogger/util/RollerMessages;)I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/GenericThrottle$ClientInfo.__Descendant_Table[org/apache/roller/weblogger/util/GenericThrottle$ClientInfo]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/GenericThrottle$ClientInfo.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/GenericThrottle.__Descendant_Table[org/apache/roller/weblogger/util/GenericThrottle]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/GenericThrottle.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/GenericThrottle.__Dispatch_Table.processHit(Ljava/lang/String;)Z
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/GenericThrottle.log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/I18nMessages.__Descendant_Table[org/apache/roller/weblogger/util/I18nMessages]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/I18nMessages.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/I18nMessages.log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/I18nMessages.messagesMap
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList$ModifiedFile.__Descendant_Table[org/apache/roller/weblogger/util/IPBanList$ModifiedFile]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList$ModifiedFile.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList$ModifiedFile.__Dispatch_Table.clearChanged()V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList$ModifiedFile.__Dispatch_Table.hasChanged()Z
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.__Descendant_Table[org/apache/roller/weblogger/util/IPBanList]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.__Dispatch_Table.addBannedIp(Ljava/lang/String;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.__Tag
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIps
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile.__Tag
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile.myLastModified
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/MailUtil.javax.mail.Message$RecipientType.BCC
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/MailUtil.javax.mail.Message$RecipientType.CC
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/MailUtil.javax.mail.Message$RecipientType.TO
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/MailUtil.log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages$RollerMessage.__Descendant_Table[org/apache/roller/weblogger/util/RollerMessages$RollerMessage]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages$RollerMessage.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages$RollerMessage.__Dispatch_Table.getArgs()[Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages$RollerMessage.__Dispatch_Table.getKey()Ljava/lang/String;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Descendant_Table[org/apache/roller/weblogger/util/RollerMessages]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Dispatch_Table.addMessage(Ljava/lang/String;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Dispatch_Table.getErrorCount()I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Dispatch_Table.getErrors()Ljava/util/Iterator;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Dispatch_Table.getMessageCount()I
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/RollerMessages.__Dispatch_Table.getMessages()Ljava/util/Iterator;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.BR_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_A_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_BLOCKQUOTE_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_B_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_I_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_LI_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_OL_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_PRE_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_P_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.CLOSING_UL_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_A_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_BLOCKQUOTE_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_B_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_I_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_LI_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_OL_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_PRE_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_P_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.OPENING_UL_TAG_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/Utilities.QUOTE_PATTERN
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Descendant_Table[org/apache/roller/weblogger/util/cache/Cache]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Descendant_Table[org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Descendant_Table[org/apache/roller/weblogger/util/cache/LRUCacheImpl]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Dispatch_Table.put(Ljava/lang/String;Ljava/lang/Object;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/Cache.__Dispatch_Table.remove(Ljava/lang/String;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/CacheHandler.__Descendant_Table[org/apache/roller/weblogger/util/cache/CacheHandler]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/CacheHandler.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/CacheHandler.__Dispatch_Table.invalidate(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/CacheManager.cacheHandlers
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/CacheManager.log
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringCacheEntry.__Descendant_Table[org/apache/roller/weblogger/util/cache/ExpiringCacheEntry]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringCacheEntry.__Descendant_Table[others]
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringCacheEntry.__Dispatch_Table.getValue()Ljava/lang/Object;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringCacheEntry.__Dispatch_Table.hasExpired()Z
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl.__Dispatch_Table.put(Ljava/lang/String;Ljava/lang/Object;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl.__Dispatch_Table.remove(Ljava/lang/String;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/LRUCacheImpl.__Dispatch_Table.get(Ljava/lang/String;)Ljava/lang/Object;
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/LRUCacheImpl.__Dispatch_Table.put(Ljava/lang/String;Ljava/lang/Object;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/cache/LRUCacheImpl.__Dispatch_Table.remove(Ljava/lang/String;)V
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): request
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): response
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.authenticator
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.authenticator.__Tag
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.__Tag
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.__Tag
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.cache
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.hits
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.misses
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.puts
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.interval
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.threshold
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentValidationManager
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentValidationManager.__Tag
    //#input(void doPost(HttpServletRequest, HttpServletResponse)): this.commentValidationManager.validators
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): new HashSet(loadBannedIps#1) num objects
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIps
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile.myLastModified
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.hits
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.misses
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.puts
    //#output(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.removes
    //#new obj(void doPost(HttpServletRequest, HttpServletResponse)): new HashSet(loadBannedIps#1)
    //#pre[1] (void doPost(HttpServletRequest, HttpServletResponse)): log != null
    //#pre[21] (void doPost(HttpServletRequest, HttpServletResponse)): request != null
    //#pre[26] (void doPost(HttpServletRequest, HttpServletResponse)): init'ed(this.commentThrottle)
    //#pre[2] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(org/apache/roller/weblogger/util/IPBanList.instance.bannedIps)
    //#pre[3] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile.myLastModified)
    //#pre[4] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.clientHistoryCache.hits)
    //#pre[5] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.clientHistoryCache.misses)
    //#pre[6] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.clientHistoryCache.puts)
    //#pre[8] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager.log != null
    //#pre[10] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/GenericThrottle.log != null
    //#pre[11] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/I18nMessages.messagesMap != null
    //#pre[12] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/IPBanList.instance != null
    //#pre[13] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/IPBanList.instance.__Tag == org/apache/roller/weblogger/util/IPBanList
    //#pre[14] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile)
    //#pre[15] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile.__Tag == org/apache/roller/weblogger/util/IPBanList$ModifiedFile
    //#pre[16] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/IPBanList.log != null
    //#pre[17] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/MailUtil.log != null
    //#pre[18] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.cacheHandlers != null
    //#pre[19] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) org/apache/roller/weblogger/util/cache/CacheManager.log != null
    //#pre[22] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) response != null
    //#pre[24] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.authenticator != null
    //#pre[25] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.authenticator.__Tag in {org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentAuthenticator, org/apache/roller/weblogger/ui/rendering/plugins/comments/DefaultCommentAuthenticator, org/apache/roller/weblogger/ui/rendering/plugins/comments/MathCommentAuthenticator}
    //#pre[27] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentThrottle.__Tag == org/apache/roller/weblogger/util/GenericThrottle
    //#pre[28] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentThrottle.clientHistoryCache != null
    //#pre[29] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentThrottle.clientHistoryCache.__Tag in {org/apache/roller/weblogger/util/cache/Cache, org/apache/roller/weblogger/util/cache/ExpiringLRUCacheImpl, org/apache/roller/weblogger/util/cache/LRUCacheImpl}
    //#pre[30] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentThrottle.clientHistoryCache.cache != null
    //#pre[32] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.interval)
    //#pre[33] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.threshold)
    //#pre[34] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentValidationManager != null
    //#pre[35] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentValidationManager.__Tag == org/apache/roller/weblogger/ui/rendering/plugins/comments/CommentValidationManager
    //#pre[36] (void doPost(HttpServletRequest, HttpServletResponse)): (soft) this.commentValidationManager.validators != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): java.util.Iterator:next(...).__Tag@305 == org/apache/roller/weblogger/util/RollerMessages$RollerMessage
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): java.util.Iterator:next(...)@305 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): javax.servlet.http.HttpServletRequest:getRequestDispatcher(...)@273 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): javax.servlet.http.HttpServletRequest:getRequestDispatcher(...)@371 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): messageUtils.bundle != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle(...)@196 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.Weblogger:getIndexManager(...)@336 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@195 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@326 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@195 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@326 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@328 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@336 != null
    //#presumption(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogEntry(...)@204 != null
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): org/apache/roller/weblogger/util/IPBanList.instance.bannedIps == One-of{old org/apache/roller/weblogger/util/IPBanList.instance.bannedIps, &new HashSet(loadBannedIps#1)}
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): init'ed(org/apache/roller/weblogger/util/IPBanList.instance.bannedIps)
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(org/apache/roller/weblogger/util/IPBanList.instance.bannedIpsFile.myLastModified)
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.hits == One-of{old this.commentThrottle.clientHistoryCache.hits, old this.commentThrottle.clientHistoryCache.hits + 1, One-of{old this.commentThrottle.clientHistoryCache.hits, old this.commentThrottle.clientHistoryCache.hits + 1} - 1}
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.clientHistoryCache.hits)
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.misses == One-of{old this.commentThrottle.clientHistoryCache.misses, old this.commentThrottle.clientHistoryCache.misses + 1}
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.clientHistoryCache.misses)
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.puts == One-of{old this.commentThrottle.clientHistoryCache.puts, old this.commentThrottle.clientHistoryCache.puts + 1}
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): (soft) init'ed(this.commentThrottle.clientHistoryCache.puts)
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle.clientHistoryCache.removes == One-of{old this.commentThrottle.clientHistoryCache.removes, old this.commentThrottle.clientHistoryCache.removes + 1, One-of{old this.commentThrottle.clientHistoryCache.removes, old this.commentThrottle.clientHistoryCache.removes + 1} + 1}
    //#post(void doPost(HttpServletRequest, HttpServletResponse)): new HashSet(loadBannedIps#1) num objects <= 1
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.ResourceBundle:getString
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:getName
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.util.RollerMessages$RollerMessage
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:get
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:remove
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Map:remove
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Date
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:put
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:loadBannedIpsIfNeeded
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:contains
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.util.IPBanList$ModifiedFile:canWrite
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.FileWriter
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.PrintWriter:println
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.PrintWriter:close
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.util.IPBanList$ModifiedFile:lastModified
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:loadBannedIps
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.FileReader
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.BufferedReader:readLine
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.HashSet:add
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.io.BufferedReader:close
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:size
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:info
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.net.URLEncoder:encode
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.ResourceBundle:getBundle
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Locale:toString
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getSession
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpSession:getAttribute
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpServletRequest:getParameter
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.servlet.http.HttpSession:removeAttribute
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:validate
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.text.MessageFormat:format
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.startup.WebloggerStartup:getMailProvider
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.MailProvider:getSession
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.internet.MimeMessage
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.internet.InternetAddress
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Message:setFrom
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.logging.Log:isDebugEnabled
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Message:setRecipients
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Message:setSubject
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Message:setContent
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Message:setSentDate
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Message:getAllRecipients
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.SendFailedException
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.MailProvider:getTransport
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Transport:send
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.SendFailedException:setNextException
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.SendFailedException:getValidUnsentAddresses
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:javax.mail.Transport:close
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getCreator
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.User:getEmailAddress
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getId
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEmailComments
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEmailFromAddress
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.TreeSet
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getComments
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getEmail
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getNotify
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:matches
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:remove
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:toArray
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getName
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getContent
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.lang.StringUtils:replace
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.regex.Pattern:matcher
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.regex.Matcher:find
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.regex.Matcher:start
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.regex.Matcher:end
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.regex.Matcher:replaceAll
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getAnchor
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getWeblogCommentsURL
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getActionURL
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.commons.lang.StringUtils:equals
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getTitle
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getId
    //#unanalyzed(void doPost(HttpServletRequest, HttpServletResponse)): Effects-of-calling:invalidate
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): this.commentThrottle: Addr_Set{null}, Inverse{null}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): errorKey.mArgs@305: Addr_Set{null}, Inverse{null}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): java.lang.String:equals(...)@171: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): java.lang.String:equals(...)@323: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): java.util.Iterator:hasNext(...)@304: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): java.util.List:size(...)@70: {-2_147_483_648..0}, {1..4_294_967_295}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): javax.servlet.http.HttpServletRequest:getParameter(...)@169: Addr_Set{null}, Inverse{null}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty(...)@241: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty(...)@323: {1}, {0}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.pojos.Weblog:getCommentModerationRequired(...)@283: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.pojos.Weblog:getCommentModerationRequired(...)@335: {1}, {0}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.pojos.WeblogEntry:getCommentsStillAllowed(...)@260: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.pojos.WeblogEntry:isPublished(...)@260: {1}, {0}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.pojos.WeblogEntry:isPublished(...)@342: {0}, {1}
    //#test_vector(void doPost(HttpServletRequest, HttpServletResponse)): org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocale(...)@212: Addr_Set{null}, Inverse{null}
        String dispatch_url = null;
    //#CommentServlet.java:160: Warning: unused assignment
    //#    unused assignment into dispatch_url
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    Attribs:  Uncertain
        
        Weblog weblog = null;
    //#CommentServlet.java:162: Warning: unused assignment
    //#    unused assignment into weblog
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    Attribs:  Uncertain
        WeblogEntry entry = null;
    //#CommentServlet.java:163: Warning: unused assignment
    //#    unused assignment into entry
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    Attribs:  Uncertain
        
        String message = null;
        RollerMessages messages = new RollerMessages();
        
        // are we doing a preview?  or a post?
        String method = request.getParameter("method");
        final boolean preview;
        if (method != null && method.equals("preview")) {
            preview = true;
            messages.addMessage("commentServlet.previewCommentOnly");
            log.debug("Handling comment preview post");
    //#CommentServlet.java:174: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        } else {
            preview = false;
            log.debug("Handling regular comment post");
    //#CommentServlet.java:177: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        }
        
        // throttling protection against spammers
        if(commentThrottle != null &&
                commentThrottle.processHit(request.getRemoteAddr())) {
            
            log.debug("ABUSIVE "+request.getRemoteAddr());
    //#CommentServlet.java:184: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            IPBanList.getInstance().addBannedIp(request.getRemoteAddr());
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        
        WeblogCommentRequest commentRequest = null;
    //#CommentServlet.java:190: Warning: unused assignment
    //#    unused assignment into commentRequest
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    Attribs:  Uncertain
        try {
            commentRequest = new WeblogCommentRequest(request);
    //#CommentServlet.java:192: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest(HttpServletRequest)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest(HttpServletRequest)
            
            // lookup weblog specified by comment request
            UserManager uMgr = WebloggerFactory.getWeblogger().getUserManager();
    //#CommentServlet.java:195: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#CommentServlet.java:195: Warning: method not available
    //#    -- call on UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: UserManager org.apache.roller.weblogger.business.Weblogger:getUserManager()
            weblog = uMgr.getWebsiteByHandle(commentRequest.getWeblogHandle());
    //#CommentServlet.java:196: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogHandle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogHandle()
    //#CommentServlet.java:196: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle(String)
            
            if(weblog == null) {
                throw new WebloggerException("unable to lookup weblog: "+
                        commentRequest.getWeblogHandle());
            }
            
            // lookup entry specified by comment request
            entry = commentRequest.getWeblogEntry();
    //#CommentServlet.java:204: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogEntry()
            if(entry == null) {
                throw new WebloggerException("unable to lookup entry: "+
                        commentRequest.getWeblogAnchor());
            }
            
            // we know what the weblog entry is, so setup our urls
            dispatch_url = "/roller-ui/rendering/page/"+weblog.getHandle();
    //#CommentServlet.java:211: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getHandle()
            if(commentRequest.getLocale() != null) {
    //#CommentServlet.java:212: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocale()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocale()
                dispatch_url += "/"+commentRequest.getLocale();
    //#CommentServlet.java:213: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocale()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocale()
            }
            dispatch_url += "/entry/"+URLUtilities.encode(commentRequest.getWeblogAnchor());
    //#CommentServlet.java:215: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogAnchor()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getWeblogAnchor()
            
        } catch (Exception e) {
            // some kind of error parsing the request or looking up weblog
            log.debug("error creating page request", e);
    //#CommentServlet.java:219: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object, Throwable)
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        
        
        log.debug("Doing comment posting for entry = "+entry.getPermalink());
    //#CommentServlet.java:225: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getPermalink()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getPermalink()
    //#CommentServlet.java:225: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        // collect input from request params and construct new comment object
        // fields: name, email, url, content, notify
        // TODO: data validation on collected comment data
        WeblogEntryComment comment = new WeblogEntryComment();
    //#CommentServlet.java:230: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment()
        comment.setName(commentRequest.getName());
    //#CommentServlet.java:231: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getName()
    //#CommentServlet.java:231: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setName(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setName(String)
        comment.setEmail(commentRequest.getEmail());
    //#CommentServlet.java:232: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getEmail()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getEmail()
    //#CommentServlet.java:232: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setEmail(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setEmail(String)
        comment.setUrl(commentRequest.getUrl());
    //#CommentServlet.java:233: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getUrl()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getUrl()
    //#CommentServlet.java:233: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setUrl(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setUrl(String)
        comment.setContent(commentRequest.getContent());
    //#CommentServlet.java:234: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getContent()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getContent()
    //#CommentServlet.java:234: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setContent(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setContent(String)
        comment.setNotify(new Boolean(commentRequest.isNotify()));
    //#CommentServlet.java:235: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:isNotify()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:isNotify()
    //#CommentServlet.java:235: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setNotify(Boolean)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setNotify(Boolean)
        comment.setWeblogEntry(entry);
    //#CommentServlet.java:236: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setWeblogEntry(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setWeblogEntry(WeblogEntry)
        comment.setRemoteHost(request.getRemoteHost());
    //#CommentServlet.java:237: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setRemoteHost(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setRemoteHost(String)
        comment.setPostTime(new Timestamp(System.currentTimeMillis()));
    //#CommentServlet.java:238: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setPostTime(Timestamp)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setPostTime(Timestamp)
        
        // set comment content-type depending on if html is allowed
        if(WebloggerRuntimeConfig.getBooleanProperty("users.comments.htmlenabled")) {
    //#CommentServlet.java:241: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty(String)
            comment.setContentType("text/html");
    //#CommentServlet.java:242: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setContentType(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setContentType(String)
        } else {
            comment.setContentType("text/plain");
    //#CommentServlet.java:244: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setContentType(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setContentType(String)
        }
        
        // set whatever comment plugins are configured
        comment.setPlugins(WebloggerRuntimeConfig.getProperty("users.comments.plugins"));
    //#CommentServlet.java:248: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getProperty(String)
    //#CommentServlet.java:248: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setPlugins(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setPlugins(String)
        
        WeblogEntryCommentForm cf = new WeblogEntryCommentForm();
    //#CommentServlet.java:250: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm()
        cf.setData(comment);
    //#CommentServlet.java:251: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setData(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setData(WeblogEntryComment)
        if (preview) {
            cf.setPreview(comment);
    //#CommentServlet.java:253: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setPreview(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setPreview(WeblogEntryComment)
        }
        
        I18nMessages messageUtils = I18nMessages.getMessages(commentRequest.getLocaleInstance());
    //#CommentServlet.java:256: Warning: method not available
    //#    -- call on Locale org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocaleInstance()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: Locale org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocaleInstance()
    //#CommentServlet.java:256: ?precondition failure
    //#    org/apache/roller/weblogger/util/I18nMessages.getMessages: locale != null
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    basic block: bb_22
    //#    assertion: org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocaleInstance(...)@256 != null
    //#    callee: I18nMessages org/apache/roller/weblogger/util/I18nMessages.getMessages(Locale)
    //#    callee assertion: locale != null
    //#    callee file: I18nMessages.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 87
    //#    VN: org.apache.roller.weblogger.ui.rendering.util.WeblogCommentRequest:getLocaleInstance(...)@256
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain
        
        // check if comments are allowed for this entry
        // this checks site-wide settings, weblog settings, and entry settings
        if(!entry.getCommentsStillAllowed() || !entry.isPublished()) {
    //#CommentServlet.java:260: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.WeblogEntry:getCommentsStillAllowed()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.WeblogEntry:getCommentsStillAllowed()
    //#CommentServlet.java:260: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.WeblogEntry:isPublished()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.WeblogEntry:isPublished()
            error = messageUtils.getString("comments.disabled");
            
        // if this is a real comment post then authenticate request
        } else if(!preview && !this.authenticator.authenticate(request)) {
            error = messageUtils.getString("error.commentAuthFailed");
            log.debug("Comment failed authentication");
    //#CommentServlet.java:266: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        }
        
        // bail now if we have already found an error
        if(error != null) {
            cf.setError(error);
    //#CommentServlet.java:271: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setError(String)
            request.setAttribute("commentForm", cf);
            RequestDispatcher dispatcher = request.getRequestDispatcher(dispatch_url);
            dispatcher.forward(request, response);
            return;
        }
        
        int validationScore = commentValidationManager.validateComment(comment, messages);
        log.debug("Comment Validation score: " + validationScore);
    //#CommentServlet.java:279: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        
        if (!preview) {
            
            if (validationScore == 100 && weblog.getCommentModerationRequired()) {
    //#CommentServlet.java:283: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.Weblog:getCommentModerationRequired()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.Weblog:getCommentModerationRequired()
                // Valid comments go into moderation if required
                comment.setStatus(WeblogEntryComment.PENDING);
    //#CommentServlet.java:285: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
                message = messageUtils.getString("commentServlet.submittedToModerator");
            } else if (validationScore == 100) {
                // else they're approved
                comment.setStatus(WeblogEntryComment.APPROVED);
    //#CommentServlet.java:289: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
                message = messageUtils.getString("commentServlet.commentAccepted");
            } else {
                // Invalid comments are marked as spam
                log.debug("Comment marked as spam");
    //#CommentServlet.java:293: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                comment.setStatus(WeblogEntryComment.SPAM);
    //#CommentServlet.java:294: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
                error = messageUtils.getString("commentServlet.commentMarkedAsSpam");
                
                // add specific error messages if they exist
                if(messages.getErrorCount() > 0) {
                    Iterator errors = messages.getErrors();
                    RollerMessage errorKey = null;
    //#CommentServlet.java:300: Warning: unused assignment
    //#    unused assignment into errorKey
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    Attribs:  Uncertain
                    
                    StringBuffer buf = new StringBuffer();
                    buf.append("<ul>");
                    while(errors.hasNext()) {
                        errorKey = (RollerMessage)errors.next();
                        
                        buf.append("<li>");
                        if(errorKey.getArgs() != null) {
                            buf.append(messageUtils.getString(errorKey.getKey(), errorKey.getArgs()));
                        } else {
                            buf.append(messageUtils.getString(errorKey.getKey()));
                        }
                        buf.append("</li>");
                    }
                    buf.append("</ul>");
                    
                    error += buf.toString();
                }
                
            }
            
            try {               
                if(!WeblogEntryComment.SPAM.equals(comment.getStatus()) ||
    //#CommentServlet.java:323: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus()
    //#CommentServlet.java:323: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.config.WebloggerRuntimeConfig:getBooleanProperty(String)
                        !WebloggerRuntimeConfig.getBooleanProperty("comments.ignoreSpam.enabled")) {
                    
                    WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#CommentServlet.java:326: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#CommentServlet.java:326: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
                    mgr.saveComment(comment);
    //#CommentServlet.java:327: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
                    WebloggerFactory.getWeblogger().flush();
    //#CommentServlet.java:328: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#CommentServlet.java:328: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
                    
                    // Send email notifications only to subscribers if comment is 100% valid
                    boolean notifySubscribers = (validationScore == 100);
                    MailUtil.sendEmailNotification(comment, messages, messageUtils, notifySubscribers);
                    
                    // only re-index/invalidate the cache if comment isn't moderated
                    if(!weblog.getCommentModerationRequired()) {
    //#CommentServlet.java:335: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.Weblog:getCommentModerationRequired()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.Weblog:getCommentModerationRequired()
                        IndexManager manager = WebloggerFactory.getWeblogger().getIndexManager();
    //#CommentServlet.java:336: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#CommentServlet.java:336: Warning: method not available
    //#    -- call on IndexManager org.apache.roller.weblogger.business.Weblogger:getIndexManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: IndexManager org.apache.roller.weblogger.business.Weblogger:getIndexManager()
                        
                        // remove entry before (re)adding it, or in case it isn't Published
                        manager.removeEntryIndexOperation(entry);
    //#CommentServlet.java:339: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.search.IndexManager:removeEntryIndexOperation(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.search.IndexManager:removeEntryIndexOperation(WeblogEntry)
                        
                        // if published, index the entry
                        if (entry.isPublished()) {
    //#CommentServlet.java:342: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.WeblogEntry:isPublished()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.WeblogEntry:isPublished()
                            manager.addEntryIndexOperation(entry);
    //#CommentServlet.java:343: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.search.IndexManager:addEntryIndexOperation(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.search.IndexManager:addEntryIndexOperation(WeblogEntry)
                        }
                        
                        // Clear all caches associated with comment
                        CacheManager.invalidate(comment);
                    }
                    
                    // comment was successful, clear the comment form
                    cf = new WeblogEntryCommentForm();
    //#CommentServlet.java:351: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm()
                }
                
            } catch (WebloggerException re) {
                log.error("Error saving comment", re);
    //#CommentServlet.java:355: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
                error = re.getMessage();
    //#CommentServlet.java:356: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.WebloggerException:getMessage()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: String org.apache.roller.weblogger.WebloggerException:getMessage()
            }
        }
        
        
        // the work has been done, now send the user back to the entry page
        if (error != null) {
            cf.setError(error);
    //#CommentServlet.java:363: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setError(String)
        }
        if (message != null) {
            cf.setMessage(message);
    //#CommentServlet.java:366: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setMessage(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.rendering.util.WeblogEntryCommentForm:setMessage(String)
        }
        request.setAttribute("commentForm", cf);
        
        log.debug("comment processed, forwarding to "+dispatch_url);
    //#CommentServlet.java:370: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
    //#    method: void doPost(HttpServletRequest, HttpServletResponse)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
        RequestDispatcher dispatcher =
                request.getRequestDispatcher(dispatch_url);
        dispatcher.forward(request, response);
    }
    //#CommentServlet.java:374: end of method: void org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet.doPost(HttpServletRequest, HttpServletResponse)
    
}
    //#CommentServlet.java:: end of class: org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet
