Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9433bbe

Browse files
committed
memory optimization for reflective removal mechanism (there was no need for \n\r in the first place as there was no re.S flag used - also, one re.sub "flags <-> count" bug fixed)
1 parent 7d131d1 commit 9433bbe

2 files changed

Lines changed: 10 additions & 10 deletions

File tree

lib/core/common.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
from lib.core.settings import ML
117117
from lib.core.settings import MIN_TIME_RESPONSES
118118
from lib.core.settings import PAYLOAD_DELIMITER
119-
from lib.core.settings import REFLECTED_NON_ALPHA_NUM_REGEX
119+
from lib.core.settings import REFLECTED_REPLACEMENT_REGEX
120120
from lib.core.settings import REFLECTED_MAX_REGEX_PARTS
121121
from lib.core.settings import REFLECTED_VALUE_MARKER
122122
from lib.core.settings import TIME_STDEV_COEFF
@@ -2627,17 +2627,17 @@ def removeReflectiveValues(content, payload, suppressWarning=False):
26272627
if all([content, payload]) and isinstance(content, unicode) and kb.reflectiveMechanism:
26282628
payload = getUnicode(urldecode(payload.replace(PAYLOAD_DELIMITER, '')))
26292629

2630-
regex = r"\b%s\b" % filterStringValue(payload, r'[A-Za-z0-9]', REFLECTED_NON_ALPHA_NUM_REGEX.encode("string-escape"))
2630+
regex = filterStringValue(payload, r'[A-Za-z0-9]', REFLECTED_REPLACEMENT_REGEX.encode("string-escape"))
26312631

2632-
while 2 * REFLECTED_NON_ALPHA_NUM_REGEX in regex:
2633-
regex = regex.replace(2 * REFLECTED_NON_ALPHA_NUM_REGEX, REFLECTED_NON_ALPHA_NUM_REGEX)
2632+
while 2 * REFLECTED_REPLACEMENT_REGEX in regex:
2633+
regex = regex.replace(2 * REFLECTED_REPLACEMENT_REGEX, REFLECTED_REPLACEMENT_REGEX)
26342634

2635-
if all(part.lower() in content.lower() for part in regex.strip('\\b').split(REFLECTED_NON_ALPHA_NUM_REGEX)): # fast optimization check
2636-
parts = regex.split(REFLECTED_NON_ALPHA_NUM_REGEX)
2635+
if all(part.lower() in content.lower() for part in regex.split(REFLECTED_REPLACEMENT_REGEX)): # fast optimization check
2636+
parts = regex.split(REFLECTED_REPLACEMENT_REGEX)
26372637
if len(parts) > REFLECTED_MAX_REGEX_PARTS: # preventing CPU hogs
2638-
regex = "%s.+?%s" % (REFLECTED_NON_ALPHA_NUM_REGEX.join(parts[:REFLECTED_MAX_REGEX_PARTS / 2]), REFLECTED_NON_ALPHA_NUM_REGEX.join(parts[-REFLECTED_MAX_REGEX_PARTS / 2:]))
2638+
regex = "%s.+?%s" % (REFLECTED_REPLACEMENT_REGEX.join(parts[:REFLECTED_MAX_REGEX_PARTS / 2]), REFLECTED_REPLACEMENT_REGEX.join(parts[-REFLECTED_MAX_REGEX_PARTS / 2:]))
26392639

2640-
retVal = re.sub(regex, REFLECTED_VALUE_MARKER, content, re.I)
2640+
retVal = re.sub(r"(?i)\b%s\b" % regex, REFLECTED_VALUE_MARKER, content)
26412641

26422642
if retVal != content:
26432643
kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT] += 1

lib/core/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@
329329
# Mark used for replacement of reflected values
330330
REFLECTED_VALUE_MARKER = '__REFLECTED_VALUE__'
331331

332-
# Regular expression used for marking non-alphanum characters
333-
REFLECTED_NON_ALPHA_NUM_REGEX = r'[^\r\n]+?'
332+
# Regular expression used for replacing non-alphanum characters
333+
REFLECTED_REPLACEMENT_REGEX = r'.+'
334334

335335
# Maximum number of alpha-numerical parts in reflected regex (for speed purposes)
336336
REFLECTED_MAX_REGEX_PARTS = 10

0 commit comments

Comments
 (0)