/****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one   *
 * or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information        *
 * regarding copyright ownership.  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.                                           *
 ****************************************************************/



package org.apache.james.transport.matchers;

import org.apache.oro.text.regex.MalformedPatternException;
import javax.mail.MessagingException;

/**
 * Initializes RegexMatcher with regular expressions from a file.
 *
 */
public class FileRegexMatcher extends GenericRegexMatcher {
    
    /**
     * @see org.apache.james.transport.matchers.GenericRegexMatcher#init()
     */
    public void init() throws MessagingException {
        try {
            java.io.RandomAccessFile patternSource = new java.io.RandomAccessFile(getCondition(), "r");
            int lines = 0;
            while(patternSource.readLine() != null) lines++;
            patterns = new Object[lines][2];
            patternSource.seek(0);
            for (int i = 0; i < lines; i++) {
                String line = patternSource.readLine();
                patterns[i][0] = line.substring(0, line.indexOf(':'));
                patterns[i][1] = line.substring(line.indexOf(':')+1);
            }
            compile(patterns);
        }
        catch (java.io.FileNotFoundException fnfe) {
            throw new MessagingException("Could not locate patterns.", fnfe);
        }
        catch (java.io.IOException ioe) {
            throw new MessagingException("Could not read patterns.", ioe);
        }
        catch(MalformedPatternException mp) {
            throw new MessagingException("Could not initialize regex patterns", mp);
        }
    }
}

@@ -1231,16 +1231,45 @@
 chers;%0A%0A
+import java.io.IOException;%0A%0A
 import o
@@ -1647,26 +1647,8 @@
 n %7B%0A
-        try %7B%0A    
     
@@ -1691,16 +1691,64 @@
 Source =
+ null;%0A        try %7B%0A            patternSource =
  new jav
@@ -2207,32 +2207,42 @@
 );%0A            %7D
+          
 %0A            com
@@ -2257,16 +2257,35 @@
 terns);%0A
+                  %0A
         
@@ -2685,16 +2685,238 @@
 %22, mp);%0A
+        %7D finally %7B%0A            if (patternSource != null) %7B%0A                // close the file%0A                try %7B%0A%09%09    patternSource.close();%0A%09%09%7D catch (IOException e) %7B%0A%09%09    // just ignore on close%0A%09%09%7D%0A            %7D%0A
         

Fix a minor leak which was caused by not closing a RandomAccesFile after reading