1515import os
1616import re
1717import socket
18+ import StringIO
1819import sys
1920import threading
2021import urllib2
@@ -523,6 +524,13 @@ def __setBulkMultipleTargets():
523524 f .close ()
524525
525526def __findPageForms ():
527+ class _ (StringIO .StringIO ):
528+ def __init__ (self , content , url ):
529+ StringIO .StringIO .__init__ (self , content )
530+ self ._url = url
531+ def geturl (self ):
532+ return self ._url
533+
526534 if not conf .forms :
527535 return
528536
@@ -532,19 +540,26 @@ def __findPageForms():
532540 infoMsg = "searching for forms"
533541 logger .info (infoMsg )
534542
535- response , _ = Request .queryPage (response = True )
543+ response , headers = Request .queryPage (response = True )
536544
537545 if response is None or isinstance (response , basestring ):
538546 errMsg = "can't do form parsing as no valid response "
539547 errMsg += "object found. please check previous log messages "
540548 errMsg += "for connection issues"
541549 raise sqlmapGenericException , errMsg
542550
551+ response = _ (response .read (), response .geturl ())
543552 try :
544553 forms = ParseResponse (response , backwards_compat = False )
545554 except ParseError :
546- errMsg = "badly formed HTML at the target url. can't parse forms"
547- raise sqlmapGenericException , errMsg
555+ errMsg = "badly formed HTML at the target url. will try to filter it"
556+ logger .error (errMsg )
557+ response .seek (0 )
558+ filtered = _ ("" .join (re .findall (r'<form.+?</form>' , response .read (), re .I | re .S )), response .geturl ())
559+ try :
560+ forms = ParseResponse (filtered , backwards_compat = False )
561+ except ParseError :
562+ raise sqlmapGenericException , "no success"
548563
549564 if forms :
550565 for form in forms :
0 commit comments