java/src/org/openantivirus/engine/credo StringsParser.java,1.6,1.7
Kurt Huwig <[email protected]> Sat, 22 May 2004 12:22:29 +0000
| Newsgroups | gmane.comp.security.virus.openantivirus.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/openantivirus/java/src/org/openantivirus/engine/credo
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9747/src/org/openantivirus/engine/credo
Modified Files:
StringsParser.java
Log Message:
Bugfix: some patterns were not detected due to bad optimizing
Speed improvements on multipart patterns
Index: StringsParser.java
===================================================================
RCS file: /cvsroot/openantivirus/java/src/org/openantivirus/engine/credo/StringsParser.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- StringsParser.java 20 May 2004 13:19:45 -0000 1.6
+++ StringsParser.java 22 May 2004 12:22:26 -0000 1.7
@@ -27,7 +27,6 @@
package org.openantivirus.engine.credo;
import java.io.*;
-import java.util.*;
import org.openantivirus.engine.censor.*;
@@ -51,51 +50,47 @@
final BufferedReader br = new BufferedReader(patternReader);
String sLine;
while ((sLine = br.readLine()) != null) {
- int equalsPos = sLine.indexOf('=');
- if (equalsPos == -1) {
- System.err.println("Malformed pattern line: " + sLine);
- continue;
- }
-
- final int offsetStart = sLine.lastIndexOf('[');
- final String sVirusName =
- new String(sLine.substring(0, offsetStart));
- final String sPattern = sLine.substring(equalsPos + 1);
-
- try {
- if (sPattern.indexOf('*') != -1) {
- final StringTokenizer stOffsets = new StringTokenizer(
- sLine.substring(offsetStart + 1, equalsPos - 1),
- "*");
-
- final int partCount = stOffsets.countTokens();
- int part = 0;
- for (StringTokenizer stPatterns = new StringTokenizer(
- sPattern, "*");
- stPatterns.hasMoreTokens();
- part++) {
- stringFinder.addString(
- new WildcardPattern(stPatterns.nextToken()),
- Integer.parseInt(stOffsets.nextToken()),
- new StringPartFoundListener(sVirusName,
- part,
- partCount));
- }
- } else {
- stringFinder.addString(
+ parseLine(sLine);
+ }
+ // br may not be closed!
+ }
+
+ private void parseLine(String line) {
+ final int equalsPos = line.indexOf('=');
+ if (equalsPos == -1) {
+ System.err.println("Malformed pattern line: " + line);
+ return;
+ }
+
+ final int offsetStart = line.lastIndexOf('[');
+ final String sPattern = line.substring(equalsPos + 1);
+ final PositionFoundListener pfl = new StringFoundListener(
+ new String(line.substring(0, offsetStart)));
+
+ try {
+ if (sPattern.indexOf('*') != -1) {
+ stringFinder.addMultipartString(
+ sPattern,
+ line.substring(offsetStart + 1, equalsPos - 1),
+ pfl);
+ } else {
+ final int offset = Integer.parseInt(
+ line.substring(offsetStart + 1, equalsPos - 1));
+ if (sPattern.indexOf('?') != -1) {
+ stringFinder.addWildcardString(
new WildcardPattern(sPattern),
- Integer.parseInt(
- sLine.substring(offsetStart + 1, equalsPos - 1)),
- new StringFoundListener(sVirusName));
+ offset,
+ pfl);
+ } else {
+ stringFinder.addString(sPattern, offset, pfl);
}
- } catch (Exception e) {
- System.err.println(sLine);
- e.printStackTrace();
}
+ } catch (Exception e) {
+ System.err.println("Malformed pattern line: " + line);
+ e.printStackTrace();
}
- // br may not be closed!
}
-
+
private static class StringFoundListener implements PositionFoundListener {
private final String virusName;
@@ -109,43 +104,4 @@
}
}
- private static class StringPartFoundListener
- implements PositionFoundListener {
- private static final Integer ZERO = new Integer(0);
-
- private final String virusName;
- private final int part, partCount;
-
- public StringPartFoundListener(String virusName,
- int part,
- int partCount) {
- this.virusName = virusName;
- this.part = part;
- this.partCount = partCount;
- }
-
- public void positionFound(PositionFoundEvent pfe)
- throws MalwareFoundException {
- final Integer foundPart =
- (Integer) pfe.entry.attributes.get(virusName);
-
- if (foundPart == null) {
- if (part != 0) {
- return;
- } else {
- pfe.entry.attributes.put(virusName, ZERO);
- }
- } else {
- if (foundPart.intValue() == part - 1) {
- if (part == partCount - 1) {
- throw new MalwareFoundException(virusName, pfe.entry);
- } else {
- pfe.entry.attributes.put(virusName, new Integer(part));
- }
- }
- }
-
-
- }
- }
}
-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g.
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click