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