diff --git a/lib/core/common.py b/lib/core/common.py index 3e0e10a28..4f05fa90b 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -59,6 +59,7 @@ from lib.core.settings import DESCRIPTION from lib.core.settings import IS_WIN from lib.core.settings import PLATFORM from lib.core.settings import SITE +from lib.core.settings import ERROR_PARSING_REGEXES from lib.core.settings import SQL_STATEMENTS from lib.core.settings import SUPPORTED_DBMS from lib.core.settings import UNKNOWN_DBMS_VERSION @@ -1584,7 +1585,7 @@ def extractErrorMessage(page): retVal = None if isinstance(page, basestring): - for regex in (r"[^<]*(fatal|error|warning|exception)[^<]*:?\s+(?P.+?)", r"
  • Error Type:
    (?P.+?)
  • "): + for regex in ERROR_PARSING_REGEXES: match = re.search(regex, page, re.DOTALL | re.IGNORECASE) if match: @@ -1661,6 +1662,7 @@ def logHTTPTraffic(requestLogMsg, responseLogMsg): kb.locks.logLock.release() +# cross-linked method def getPageTemplate(payload, place): pass diff --git a/lib/core/settings.py b/lib/core/settings.py index 69ccaa521..ac04c12d9 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -160,3 +160,9 @@ SQL_STATEMENTS = { "commit ", "rollback ", ), } + +ERROR_PARSING_REGEXES = ( + r"[^<]*(fatal|error|warning|exception)[^<]*:?\s+(?P.+?)", + r"
  • Error Type:
    (?P.+?)
  • ", + r"error '[0-9a-f]{8}'((<[^>]+>)|\s)+(?P[^<>]+)" + ) diff --git a/lib/request/basic.py b/lib/request/basic.py index a313489be..ba1f6df49 100644 --- a/lib/request/basic.py +++ b/lib/request/basic.py @@ -14,10 +14,12 @@ import re import StringIO import zlib +from lib.core.common import extractErrorMessage from lib.core.common import getCompiledRegex from lib.core.common import getUnicode from lib.core.common import isWindowsDriveLetterPath from lib.core.common import posixToNtSlashes +from lib.core.common import sanitizeAsciiString from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger @@ -133,3 +135,14 @@ def decodePage(page, contentEncoding, contentType): page = getUnicode(page, charset) return page + +def processResponse(page, responseHeaders): + page = sanitizeAsciiString(page) + page = getUnicode(page) + parseResponse(page, responseHeaders) + if conf.parseErrors: + msg = extractErrorMessage(page) + + if msg: + logger.info("parsed error message: '%s'" % msg) + return page diff --git a/lib/request/connect.py b/lib/request/connect.py index f66e313fc..4c7c1e82b 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -20,7 +20,6 @@ from lib.core.agent import agent from lib.core.common import average from lib.core.common import calculateDeltaSeconds from lib.core.common import clearConsoleLine -from lib.core.common import extractErrorMessage from lib.core.common import getCurrentThreadData from lib.core.common import getFilteredPageContent from lib.core.common import getUnicode @@ -33,7 +32,6 @@ from lib.core.common import urlEncodeCookieValues from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger -from lib.core.common import sanitizeAsciiString from lib.core.enums import HTTPMETHOD from lib.core.enums import NULLCONNECTION from lib.core.enums import PLACE @@ -43,7 +41,7 @@ from lib.core.settings import MIN_TIME_RESPONSES from lib.core.threads import getCurrentThreadData from lib.request.basic import decodePage from lib.request.basic import forgeHeaders -from lib.request.basic import parseResponse +from lib.request.basic import processResponse from lib.request.direct import direct from lib.request.comparison import comparison from lib.request.methodrequest import MethodRequest @@ -270,9 +268,7 @@ class Connect: else: debugMsg = "got HTTP error code: %d (%s)" % (code, status) logger.debug(debugMsg) - page = sanitizeAsciiString(page) - page = getUnicode(page) - parseResponse(page, responseHeaders) + page = processResponse(page, responseHeaders) return page, responseHeaders except (urllib2.URLError, socket.error, socket.timeout, httplib.BadStatusLine, httplib.IncompleteRead), e: @@ -316,9 +312,7 @@ class Connect: socket.setdefaulttimeout(conf.timeout) - page = sanitizeAsciiString(page) - page = getUnicode(page) - parseResponse(page, responseHeaders) + page = processResponse(page, responseHeaders) responseMsg += "[#%d] (%d %s):\n" % (threadData.lastRequestUID, code, status) if responseHeaders: @@ -332,12 +326,6 @@ class Connect: logger.log(7, responseMsg) - if conf.parseErrors: - msg = extractErrorMessage(page) - - if msg: - logger.info("parsed error message: '%s'" % msg) - return page, responseHeaders @staticmethod