Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions floss/language/cli_common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import logging
import argparse

import pefile


def add_common_args(parser: argparse.ArgumentParser, default_min_length: int):
parser.add_argument("path", help="file or path to analyze")
parser.add_argument(
"-n",
"--minimum-length",
dest="min_length",
type=int,
default=default_min_length,
help="minimum string length",
)

logging_group = parser.add_argument_group("logging arguments")
logging_group.add_argument("-d", "--debug", action="store_true", help="enable debugging output on STDERR")
logging_group.add_argument(
"-q",
"--quiet",
action="store_true",
help="disable all status output except fatal errors",
)


def configure_logging(debug):
level = logging.DEBUG if debug else logging.INFO
logging.basicConfig(level=level)
logging.getLogger().setLevel(level)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The configure_logging function doesn't handle the --quiet argument. It should set the logging level to CRITICAL when quiet is true to suppress all but fatal errors. Additionally, the call to logging.getLogger().setLevel(level) is redundant because logging.basicConfig() already configures the root logger's level. I've updated the function to handle this, removed the redundant call, and added type hints for clarity.

Suggested change
def configure_logging(debug):
level = logging.DEBUG if debug else logging.INFO
logging.basicConfig(level=level)
logging.getLogger().setLevel(level)
def configure_logging(debug: bool, quiet: bool):
level = logging.CRITICAL if quiet else (logging.DEBUG if debug else logging.INFO)
logging.basicConfig(level=level)



def open_pe_or_none(path: str, logger: logging.Logger):
try:
return pefile.PE(path)
except pefile.PEFormatError as err:
logger.debug(f"NOT a valid PE file: {err}")
return None
32 changes: 5 additions & 27 deletions floss/language/go/coverage.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from floss.utils import get_static_strings
from floss.results import StaticString, StringEncoding
from floss.language.utils import get_extract_stats
from floss.language.cli_common import add_common_args, open_pe_or_none, configure_logging
from floss.language.go.extract import extract_go_strings

logger = logging.getLogger(__name__)
Expand All @@ -32,36 +33,13 @@

def main():
parser = argparse.ArgumentParser(description="Get Go strings")
parser.add_argument("path", help="file or path to analyze")
parser.add_argument(
"-n",
"--minimum-length",
dest="min_length",
type=int,
default=MIN_STR_LEN,
help="minimum string length",
)
logging_group = parser.add_argument_group("logging arguments")
logging_group.add_argument("-d", "--debug", action="store_true", help="enable debugging output on STDERR")
logging_group.add_argument(
"-q",
"--quiet",
action="store_true",
help="disable all status output except fatal errors",
)
add_common_args(parser, default_min_length=MIN_STR_LEN)
args = parser.parse_args()

if args.debug:
logging.basicConfig(level=logging.DEBUG)
logging.getLogger().setLevel(logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
logging.getLogger().setLevel(logging.INFO)
configure_logging(debug=args.debug)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To correctly handle the --quiet command-line flag, you need to pass args.quiet to the updated configure_logging function.

Suggested change
configure_logging(debug=args.debug)
configure_logging(debug=args.debug, quiet=args.quiet)


try:
pe = pefile.PE(args.path)
except pefile.PEFormatError as err:
logger.debug(f"NOT a valid PE file: {err}")
pe = open_pe_or_none(args.path, logger)
if pe is None:
return 1

path = pathlib.Path(args.path)
Expand Down
34 changes: 6 additions & 28 deletions floss/language/rust/coverage.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

from floss.strings import extract_ascii_unicode_strings
from floss.language.utils import get_extract_stats
from floss.language.cli_common import add_common_args, open_pe_or_none, configure_logging
from floss.language.rust.extract import extract_rust_strings

logger = logging.getLogger(__name__)
Expand All @@ -32,36 +33,13 @@

def main():
parser = argparse.ArgumentParser(description="Get Rust strings")
parser.add_argument("path", help="file or path to analyze")
parser.add_argument(
"-n",
"--minimum-length",
dest="min_length",
type=int,
default=MIN_STR_LEN,
help="minimum string length",
)
logging_group = parser.add_argument_group("logging arguments")
logging_group.add_argument("-d", "--debug", action="store_true", help="enable debugging output on STDERR")
logging_group.add_argument(
"-q",
"--quiet",
action="store_true",
help="disable all status output except fatal errors",
)
add_common_args(parser, default_min_length=MIN_STR_LEN)
args = parser.parse_args()

if args.debug:
logging.basicConfig(level=logging.DEBUG)
logging.getLogger().setLevel(logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
logging.getLogger().setLevel(logging.INFO)

try:
pe = pefile.PE(args.path)
except pefile.PEFormatError as err:
logger.debug(f"NOT a valid PE file: {err}")
configure_logging(debug=args.debug)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To correctly handle the --quiet command-line flag, you need to pass args.quiet to the updated configure_logging function.

Suggested change
configure_logging(debug=args.debug)
configure_logging(debug=args.debug, quiet=args.quiet)


pe = open_pe_or_none(args.path, logger)
if pe is None:
return 1

path = pathlib.Path(args.path)
Expand Down