diff --git a/lib/parse/html.py b/lib/parse/html.py index e13b79f64..7a20e6529 100644 --- a/lib/parse/html.py +++ b/lib/parse/html.py @@ -26,20 +26,23 @@ class htmlHandler(ContentHandler): def __init__(self, page): ContentHandler.__init__(self) - self.__dbms = None - self.__page = page + self._dbms = None + self._page = page self.dbms = None + def _markAsErrorPage(self): + threadData = getCurrentThreadData() + threadData.lastErrorPage = (threadData.lastRequestUID, self._page) + def startElement(self, name, attrs): if name == "dbms": - self.__dbms = attrs.get("value") + self._dbms = attrs.get("value") elif name == "error": - if re.search(attrs.get("regexp"), self.__page, re.I): - self.dbms = self.__dbms - threadData = getCurrentThreadData() - threadData.lastErrorPage = (threadData.lastRequestUID, self.__page) + if re.search(attrs.get("regexp"), self._page, re.I): + self.dbms = self._dbms + self._markAsErrorPage() def htmlParser(page): """ @@ -59,4 +62,8 @@ def htmlParser(page): else: kb.lastParserStatus = None + # generic SQL warning/error messages + if re.search(r"SQL (warning|error|syntax)", page, re.I): + handler._markAsErrorPage() + return handler.dbms diff --git a/lib/request/comparison.py b/lib/request/comparison.py index 1b373e72e..f06c55bb1 100644 --- a/lib/request/comparison.py +++ b/lib/request/comparison.py @@ -29,7 +29,8 @@ from lib.core.settings import UPPER_RATIO_BOUND from lib.core.threads import getCurrentThreadData def comparison(page, headers, code=None, getRatioValue=False, pageLength=None): - return _adjust(_comparison(page, headers, code, getRatioValue, pageLength), getRatioValue) + _ = _adjust(_comparison(page, headers, code, getRatioValue, pageLength), getRatioValue) + return _ def _adjust(condition, getRatioValue): if not any([conf.string, conf.regexp, conf.code]): @@ -37,7 +38,7 @@ def _adjust(condition, getRatioValue): # PAYLOAD.WHERE.NEGATIVE response is considered as True; in switch based approach negative logic is not # applied as that what is by user considered as True is that what is returned by the comparison mechanism # itself - retVal = not (condition or False) if kb.negativeLogic else condition + retVal = not condition if kb.negativeLogic and condition is not None else condition else: retVal = condition if not getRatioValue else (MAX_RATIO if condition else MIN_RATIO) @@ -67,7 +68,7 @@ def _comparison(page, headers, code, getRatioValue, pageLength): if page: # In case of an DBMS error page return None - if not kb.negativeLogic and kb.errorIsNone and (wasLastRequestDBMSError() or wasLastRequestHTTPError()): + if kb.errorIsNone and (wasLastRequestDBMSError() or wasLastRequestHTTPError()): return None # Dynamic content lines to be excluded before comparison