diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java index cd7f725644..d97a31a6ff 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchResultFactory.java @@ -177,17 +177,11 @@ public class KeywordSearchResultFactory extends ChildFactory { //use Lucene query to get files with regular expression match result final String keywordQuery = thing.getName(); LuceneQuery filesQuery = new LuceneQuery(keywordQuery); + filesQuery.escape(); List matches = filesQuery.performQuery(); //get unique match result files - Set uniqueMatches = new TreeSet(new Comparator() { - - @Override - public int compare(FsContent fsc1, FsContent fsc2) { - return (int) (fsc1.getId() - fsc2.getId()); - - } - }); + Set uniqueMatches = new TreeSet(); uniqueMatches.addAll(matches); int resID = 0; @@ -212,8 +206,14 @@ public class KeywordSearchResultFactory extends ChildFactory { //TODO option in GUI to include approximate matches (faster) boolean matchFound = false; if (contentStr != null) {//if not null, some error getting from Solr, handle it by not filtering out - final String keywordQuery = thing.getName(); - Pattern p = Pattern.compile(keywordQuery, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); + //perform java regex to validate match from Solr + String origQuery = thingContent.getQuery(); + + //escape the regex query because it may contain special characters from the previous match + //since it's a match result, we can assume literal pattern + origQuery = Pattern.quote(origQuery); + Pattern p = Pattern.compile(origQuery, Pattern.CASE_INSENSITIVE | Pattern.DOTALL); + Matcher m = p.matcher(contentStr); matchFound = m.find(); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.form index 57a7e9b7cd..9abdd7745a 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.form @@ -1,10 +1,7 @@
- - - - + @@ -23,20 +20,24 @@ - - - - + + + + + + + + + + + - - - diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.java index ef2cab2559..f220da5a05 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchSimpleTopComponent.java @@ -30,7 +30,6 @@ public class KeywordSearchSimpleTopComponent extends TopComponent implements Key public KeywordSearchSimpleTopComponent() { initComponents(); setName("Simple"); - buttonGroup1.add(chRegex); searchButton.setEnabled(false); putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE); @@ -81,16 +80,18 @@ public class KeywordSearchSimpleTopComponent extends TopComponent implements Key .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(queryLabel) - .addGap(62, 62, 62) - .addComponent(chRegex)) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE) - .addComponent(searchButton) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(queryLabel) + .addGap(50, 50, 50) + .addComponent(chRegex)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE) + .addComponent(searchButton)) + .addContainerGap()) .addGroup(layout.createSequentialGroup() .addComponent(filesIndexedNameLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(filesIndexedValLabel))) - .addContainerGap()) + .addComponent(filesIndexedValLabel)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java index c79d88d168..aa514a23e2 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java @@ -66,6 +66,7 @@ public class LuceneQuery implements KeywordSearchQuery { * @param query * @return matches List */ + @Override public List performQuery() throws RuntimeException { List matches = new ArrayList();