Source code for boofuzz.primitives.from_file

import glob
from io import open

from .base_primitive import BasePrimitive


[docs] class FromFile(BasePrimitive): """Cycles through a list of "bad" values from a file(s). Takes filename and open the file(s) to read the values to use in fuzzing process. filename may contain glob characters. :type name: str, optional :param name: Name, for referencing later. Names should always be provided, but if not, a default name will be given, defaults to None :type default_value: bytes :param default_value: Default bytes value :type filename: str :param filename: Filename pattern to load all fuzz value :type max_len: int, optional :param max_len: Maximum string length, defaults to 0 :type fuzzable: bool, optional :param fuzzable: Enable/disable fuzzing of this primitive, defaults to true """ def __init__(self, name=None, default_value=b"", filename=None, max_len=0, *args, **kwargs): super(FromFile, self).__init__(name=name, default_value=default_value, *args, **kwargs) self._filename = filename self._fuzz_library = [] if self._filename is not None: list_of_files = glob.glob(self._filename) for fname in list_of_files: with open(fname, "rb") as _file_handle: self._fuzz_library.extend(list(filter(None, _file_handle.read().splitlines()))) # TODO: Make this more clear if max_len > 0: # If any of our strings are over max_len if any(len(s) > max_len for s in self._fuzz_library): # Pull out only the ones that aren't self._fuzz_library = list(set([s for s in self._fuzz_library if len(s) <= max_len]))