[ 
https://issues.apache.org/jira/browse/LUCENE-825?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael McCandless resolved LUCENE-825.
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2
    Lucene Fields: [New, Patch Available]  (was: [Patch Available, New])

Thanks Tim.  Keep the patches coming!

> NullPointerException from SegmentInfos.FindSegmentsFile.run() if 
> FSDirectory.list() returns NULL 
> -------------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-825
>                 URL: https://issues.apache.org/jira/browse/LUCENE-825
>             Project: Lucene - Java
>          Issue Type: Bug
>    Affects Versions: 2.1
>            Reporter: Tim Brennan
>         Assigned To: Michael McCandless
>             Fix For: 2.2
>
>
> Found this bug while running unit tests to verify an upgrade of our system 
> from 1.4.3 to 2.1.0.  This bug did *not* occur during 1.4.3, it is new to 2.x 
> (I'm pretty sure it's 2.1-only)
> If the index directory gets deleted out from under Lucene after the 
> FSDirectory has been created, then attempts to open an IndexWriter or 
> IndexReader will result in an NPE.  Lucene should be throwing an IOException 
> in this case.
> Repro:
>     1) Create an FSDirectory pointing somewhere in the filesystem (e.g. 
> /foo/index/1)
>     2) rm -rf the parent dir (rm -rf /foo/index)
>     3) Try to open an IndexReader
> Result: NullPointerException on line "for(int i=0;i<files.length;i++) { " -- 
> 'files' is NULL.
>  
> Expect: IOException
> ....  
> This is happening because of a missing NULL check in 
> SegmentInfos$FindSegmentsFile.run():
>         if (0 == method) {
>           if (directory != null) {
>             files = directory.list();
>           } else {
>             files = fileDirectory.list();
>           }
>           gen = getCurrentSegmentGeneration(files);
>           if (gen == -1) {
>             String s = "";
>             for(int i=0;i<files.length;i++) { 
>               s += " " + files[i];
>             }
>             throw new FileNotFoundException("no segments* file found: files:" 
> + s);
>           }
>         }
> The FSDirectory constructor will make sure the index dir exists, but if it is 
> for some reason deleted out from underneath Lucene after the FSDirectory is 
> instantiated, then java.io.File.list() will return NULL.  Probably better to 
> fix FSDirectory.list() to just check for null and return a 0-length array:
> (in org/apache/lucene/store/FSDirectory.java)
> 314c314,317
> <         return directory.list(IndexFileNameFilter.getFilter());
> ---
> >     String[] toRet = directory.list(IndexFileNameFilter.getFilter());
> >     if (toRet == null)
> >         return new String[]{};
> >     return toRet;

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to