Skip to content

Fix an issue with z_filelib:os_filename/1 and embedded single quotes - #125

Merged
mworrell merged 1 commit into
masterfrom
os-filename-single-quote
Jul 10, 2026
Merged

mworrell merged 1 commit into
masterfrom
os-filename-single-quote

Conversation

@mworrell

Copy link
Copy Markdown
Member

This pull request refactors and improves the os_filename/1 function in z_filelib.erl to provide more robust and accurate escaping of filenames for both Unix and Windows systems. It also adds comprehensive unit tests to verify the new behavior. The most important changes are:

Filename escaping improvements

  • Refactored the os_filename/1 function to delegate to OS-specific escaping logic, handling Unix and Windows filename escaping separately for improved correctness and maintainability. The function now properly quotes and escapes filenames according to the target OS conventions.
  • Added a new internal API, os_filename/2, to allow explicit selection of the target OS family (Unix or Windows) for filename escaping.

Testing

  • Added a new test module z_filelib_test.erl with thorough unit tests for both Unix and Windows variants of os_filename/2, covering a variety of edge cases and special characters.

Code organization

  • Updated the module export logic to conditionally export os_filename/2 only in test builds, ensuring it is available for testing but not exposed in production.

Copilot AI review requested due to automatic review settings July 10, 2026 13:05
@mworrell mworrell self-assigned this Jul 10, 2026

Copilot AI left a comment

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.

Pull request overview

This pull request updates z_filelib:os_filename/1 to perform OS-appropriate filename quoting/escaping (Unix vs. Windows), and adds EUnit coverage to validate edge cases like embedded quotes and trailing backslashes.

Changes:

  • Refactors os_filename/1 to delegate to OS-family-specific escaping via a new internal os_filename/2.
  • Implements correct Unix single-quote escaping ('\'') and Windows backslash/quote escaping rules inside double quotes.
  • Adds a dedicated z_filelib_test.erl EUnit module covering Unix and Win32 cases, including embedded quotes and backslash edge cases.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
src/z_filelib.erl Refactors filename quoting/escaping into OS-specific implementations and adds test-only export for os_filename/2.
test/z_filelib_test.erl Adds EUnit tests for Unix and Win32 escaping behavior, including embedded quote and trailing backslash scenarios.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@mworrell
mworrell merged commit 67dead5 into master Jul 10, 2026
4 checks passed
@mworrell
mworrell deleted the os-filename-single-quote branch July 10, 2026 13:21
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