@@ -212,48 +212,52 @@ def __setOutputResume():
212212
213213 if os .path .exists (conf .sessionFile ):
214214 if not conf .flushSession :
215- readSessionFP = codecs .open (conf .sessionFile , "r" , UNICODE_ENCODING , 'replace' )
216- __url_cache = set ()
217- __expression_cache = {}
218-
219- for line in readSessionFP .readlines (): # xreadlines doesn't return unicode strings when codec.open() is used
220- if line .count ("][" ) == 4 :
221- line = line .split ("][" )
215+ try :
216+ readSessionFP = codecs .open (conf .sessionFile , "r" , UNICODE_ENCODING , 'replace' )
217+ __url_cache = set ()
218+ __expression_cache = {}
222219
223- if len (line ) != 5 :
224- continue
220+ for line in readSessionFP .readlines (): # xreadlines doesn't return unicode strings when codec.open() is used
221+ if line .count ("][" ) == 4 :
222+ line = line .split ("][" )
225223
226- url , _ , _ , expression , value = line
224+ if len (line ) != 5 :
225+ continue
227226
228- if not value :
229- continue
227+ url , _ , _ , expression , value = line
230228
231- if url [ 0 ] == "[" :
232- url = url [ 1 :]
229+ if not value :
230+ continue
233231
234- value = value .rstrip ('\r \n ' ) # Strips both chars independently
232+ if url [0 ] == "[" :
233+ url = url [1 :]
235234
236- if url not in ( conf .url , conf .hostname ):
237- continue
235+ value = value .rstrip ('\r \n ' ) # Strips both chars independently
238236
239- if url not in __url_cache :
240- kb .resumedQueries [url ] = {}
241- kb .resumedQueries [url ][expression ] = value
242- __url_cache .add (url )
243- __expression_cache [url ] = set (expression )
237+ if url not in ( conf .url , conf .hostname ):
238+ continue
244239
245- resumeConfKb (expression , url , value )
240+ if url not in __url_cache :
241+ kb .resumedQueries [url ] = {}
242+ kb .resumedQueries [url ][expression ] = value
243+ __url_cache .add (url )
244+ __expression_cache [url ] = set (expression )
246245
247- if expression not in __expression_cache [url ]:
248- kb .resumedQueries [url ][expression ] = value
249- __expression_cache [url ].add (value )
250- elif len (value ) >= len (kb .resumedQueries [url ][expression ]):
251- kb .resumedQueries [url ][expression ] = value
246+ resumeConfKb (expression , url , value )
252247
253- if kb .injection .place is not None and kb .injection .parameter is not None :
254- kb .injections .append (kb .injection )
248+ if expression not in __expression_cache [url ]:
249+ kb .resumedQueries [url ][expression ] = value
250+ __expression_cache [url ].add (value )
251+ elif len (value ) >= len (kb .resumedQueries [url ][expression ]):
252+ kb .resumedQueries [url ][expression ] = value
255253
256- readSessionFP .close ()
254+ if kb .injection .place is not None and kb .injection .parameter is not None :
255+ kb .injections .append (kb .injection )
256+ except IOError , msg :
257+ errMsg = "unable to properly open the session file (%s)" % msg
258+ raise sqlmapFilePathException , errMsg
259+ else :
260+ readSessionFP .close ()
257261 else :
258262 try :
259263 os .remove (conf .sessionFile )
0 commit comments