@@ -2554,7 +2554,7 @@ def initCommonOutputs():
25542554 if line not in kb .commonOutputs [key ]:
25552555 kb .commonOutputs [key ].add (line )
25562556
2557- def getFileItems (filename , commentPrefix = '#' , unicoded = True , lowercase = False , unique = False ):
2557+ def getFileItems (filename , commentPrefix = '#' , unicoded = True , lowercase = False , unique = False , raiseOnError = True ):
25582558 """
25592559 Returns newline delimited items contained inside file
25602560
@@ -2567,7 +2567,7 @@ def getFileItems(filename, commentPrefix='#', unicoded=True, lowercase=False, un
25672567 if filename :
25682568 filename = filename .strip ('"\' ' )
25692569
2570- checkFile (filename )
2570+ checkFile (filename , raiseOnError = raiseOnError )
25712571
25722572 try :
25732573 with openFile (filename , 'r' , errors = "ignore" ) if unicoded else open (filename , 'r' ) as f :
@@ -5599,18 +5599,34 @@ def checkSums():
55995599
56005600 retVal = True
56015601
5602- if paths .get ("DIGEST_FILE" ):
5603- for entry in getFileItems (paths .DIGEST_FILE ):
5604- match = re .search (r"([0-9a-f]+)\s+([^\s]+)" , entry )
5605- if match :
5606- expected , filename = match .groups ()
5607- filepath = os .path .join (paths .SQLMAP_ROOT_PATH , filename ).replace ('/' , os .path .sep )
5608- if not checkFile (filepath , False ):
5609- continue
5610- with open (filepath , "rb" ) as f :
5611- content = f .read ()
5612- if not hashlib .sha256 (content ).hexdigest () == expected :
5613- retVal &= False
5614- break
5602+ for entry in getFileItems (paths .DIGEST_FILE , raiseOnError = False ):
5603+ file_data = entry .split ()
5604+ if len (file_data ) == 2 and len (file_data [0 ]) == 64 :
5605+ filepath = os .path .join (paths .SQLMAP_ROOT_PATH , file_data [1 ]).replace ('/' , os .path .sep )
5606+ content = openFile (filepath , 'rb' , None ).read ()
5607+ if not hashlib .sha256 (content ).hexdigest () == file_data [0 ]:
5608+ retVal &= False
5609+ break
56155610
56165611 return retVal
5612+
5613+
5614+ def updateSums ():
5615+ # Read existing entries to maintain file order
5616+ entries = []
5617+ for entry in getFileItems (paths .DIGEST_FILE ):
5618+ file_data = entry .split ()
5619+ if len (file_data ) == 2 and len (file_data [0 ]) == 64 :
5620+ filepath = os .path .join (paths .SQLMAP_ROOT_PATH , file_data [1 ]).replace ('/' , os .path .sep )
5621+ content = openFile (filepath , 'rb' , None ).read ()
5622+ newline = "%s %s\n " % (
5623+ hashlib .sha256 (content ).hexdigest (),
5624+ file_data [1 ].encode ('utf-8' ).decode ('utf-8' ),
5625+ )
5626+ entries .append (newline )
5627+
5628+
5629+ # Write updated hashes back to file
5630+ if entries :
5631+ with open (paths .DIGEST_FILE , "w" ) as f :
5632+ f .write ("" .join (entries ))
0 commit comments