Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert two strings to bytestrings #53

Merged

Conversation

sldouglas-nist
Copy link
Contributor

The patch converts two strings to bytes in get_file_info.py. The regular expression, reg in ascii_strings of get_file_info.py is looking through buf, which was previously annotated as bytes, meaning that reg needs to be bytes. Note the following example with inlined comments.

t substitutes for reg, exp for ascii_re, and test for buf

    # String buffer and string regex
    >>> import re
    >>> t = "t"
    >>> test = "test"
    >>> exp = re.compile(t)
    >>> for match in exp.finditer(test):
    ...     print(match)
    ...
    <re.Match object; span=(0, 1), match='t'>
    <re.Match object; span=(3, 4), match='t'>

    # Current code state
    >>> test = b"test"
    >>> for match in reg.finditer(test):
    ...     print(match)
    ...
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: cannot use a string pattern on a bytes-like object

    # Modified code state
    >>> test = b"test"
    >>> t = b"t"
    >>> exp = re.compile(t)
    >>> for match in exp.finditer(test):
    ...     print(match)
    ...
    <re.Match object; span=(0, 1), match=b't'>
    <re.Match object; span=(3, 4), match=b't'>

The patch is written to pass mypy static type review when tested with the following:

    mypy list_mft.py MFTINDX.py

References:

The patch converts two strings to `bytes` in `get_file_info.py`. The
regular expression, `reg` in `ascii_strings` of `get_file_info.py` is
looking through `buf`, which was previously annotated as `bytes`,
meaning that `reg` needs to be `bytes`. Note the following example
with inlined comments.

`t` substitutes for `reg`, `exp` for `ascii_re`, and `test` for `buf`

```
    # String buffer and string regex
    >>> import re
    >>> t = "t"
    >>> test = "test"
    >>> exp = re.compile(t)
    >>> for match in exp.finditer(test):
    ...     print(match)
    ...
    <re.Match object; span=(0, 1), match='t'>
    <re.Match object; span=(3, 4), match='t'>

    # Current code state
    >>> test = b"test"
    >>> for match in reg.finditer(test):
    ...     print(match)
    ...
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: cannot use a string pattern on a bytes-like object

    # Modified code state
    >>> test = b"test"
    >>> t = b"t"
    >>> exp = re.compile(t)
    >>> for match in exp.finditer(test):
    ...     print(match)
    ...
    <re.Match object; span=(0, 1), match=b't'>
    <re.Match object; span=(3, 4), match=b't'>
```

The patch is written to pass mypy static type review when tested with
the following:
```bash
    mypy list_mft.py MFTINDX.py
```

References:
* https://docs.python.org/3/library/re.html#re.finditer

Disclaimer: Participation by NIST in the creation of the documentation
of mentioned software is not intended to imply a recommendation or
endorsement by the National Institute of Standards and Technology, nor
is it intended to imply that any specific software is necessarily the
best available for the purpose.

Licensing:
Portions of this patch contributed by NIST are governed by the NIST
Software Licensing Statement:

NIST-developed software is provided by NIST as a public service. You may
use, copy, and distribute copies of the software in any medium, provided
that you keep intact this entire notice. You may improve, modify, and
create derivative works of the software or any portion of the software,
and you may copy and distribute such modifications or works. Modified
works should carry a notice stating that you changed the software and
should note the date and nature of any such change. Please explicitly
acknowledge the National Institute of Standards and Technology as the
source of the software.

NIST-developed software is expressly provided "AS IS." NIST MAKES NO
WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT, OR ARISING BY OPERATION
OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
DATA ACCURACY. NIST NEITHER REPRESENTS NOR WARRANTS THAT THE OPERATION
OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT ANY DEFECTS
WILL BE CORRECTED. NIST DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS
REGARDING THE USE OF THE SOFTWARE OR THE RESULTS THEREOF, INCLUDING BUT
NOT LIMITED TO THE CORRECTNESS, ACCURACY, RELIABILITY, OR USEFULNESS OF
THE SOFTWARE.

You are solely responsible for determining the appropriateness of using
and distributing the software and you assume all risks associated with
its use, including but not limited to the risks and costs of program
errors, compliance with applicable laws, damage to or loss of data,
programs or equipment, and the unavailability or interruption of
operation. This software is not intended to be used in any situation
where a failure could cause risk of injury or damage to property. The
software developed by NIST employees is not subject to copyright
protection within the United States.

Reviewed-by: Alex Nelson <[email protected]>
Signed-off-by: Sheldon Douglas <[email protected]>
@sldouglas-nist sldouglas-nist changed the title Convert two strings to bytestings Convert two strings to bytestrings Jul 25, 2023
Copy link
Owner

@williballenthin williballenthin left a comment

Choose a reason for hiding this comment

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

looks great, thank you!

@sldouglas-nist
Copy link
Contributor Author

This PR's branch is caught up and ready for merge when possible.

@williballenthin williballenthin merged commit d8ce2ea into williballenthin:master Jul 25, 2023
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants