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

[3.12] gh-102511: Fix os.path.normpath() for UNC paths on Windows. #119394

Closed
wants to merge 7 commits into from

Conversation

nineteendo
Copy link
Contributor

@nineteendo nineteendo commented May 22, 2024

@nineteendo
Copy link
Contributor Author

nineteendo commented May 22, 2024

Fixes ntpath.normpath('//?/UNC/server/share/..') and makes it easier to back port an upcoming pull request.
If you don't want to use the C implementation of os.path.splitroot() when available, I can leave it out.

@nineteendo nineteendo marked this pull request as ready for review May 22, 2024 12:48
@zooba
Copy link
Member

zooba commented May 22, 2024

I want to hold this for a bit until we're confident in the change in later versions. Virtually every time we touch this kind of code, we introduce new failures or vulnerabilities, so let's keep it restricted to prerelease versions for now.

I'd say after 3.13.0b3 is released we'll reconsider, but that's because I'm hopeful we'll get a decent amount of people trying out those betas. If it seems like nobody is using them, we'll push this further.

@zooba zooba self-assigned this May 22, 2024
@nineteendo nineteendo marked this pull request as draft May 22, 2024 19:05
@erlend-aasland
Copy link
Contributor

@zooba, why is this being considered for 3.12?

@zooba
Copy link
Member

zooba commented May 31, 2024

@erlend-aasland For the reasons nineteendo mentioned above:

Fixes ntpath.normpath('//?/UNC/server/share/..') and makes it easier to back port an upcoming pull request.

Performance optimisations are usually okay in bugfix releases as well, provided they aren't changing public APIs, but generally aren't deemed worth the churn on their own. In this case, keeping the implementation consistent pushes it over the edge, IMHO.

@erlend-aasland
Copy link
Contributor

Performance optimisations are usually okay in bugfix releases [...]

We normally do not backport performance optimisations unless we're talking about performance degradations that classify as bugs.

@erlend-aasland
Copy link
Contributor

Quoting the devguide, for visibility:

The only changes allowed to occur in a maintenance branch without debate are bug fixes, test improvements, and edits to the documentation. Also, a general rule for maintenance branches is that compatibility must not be broken at any point between sibling micro releases (3.5.1, 3.5.2, etc.). For both rules, only rare exceptions are accepted and must be discussed first.

@nineteendo
Copy link
Contributor Author

nineteendo commented May 31, 2024

I don't see the problem here. We are fixing a bug, while at the same time improving the performance of os.path.splitroot(). I specifically asked whether it's OK to use the C implementation of os.path.splitroot():

If you don't want to use the C implementation of os.path.splitroot() when available, I can leave it out.

@zooba
Copy link
Member

zooba commented May 31, 2024

A performance-optimisation for performation-optimisation's sake, I agree. This is also ensuring that the code remains the same between supported versions, which makes backporting easier.

If the concern is the description of the fix, we can change it for 3.12. It won't match the description of the equivalent code that's already in 3.13, but that doesn't bother me.

@nineteendo nineteendo changed the title [3.12] gh-102511: Speed up os.path.splitroot() with native helpers (GH-118089) [3.12] gh-102511: Fix os.path.normpath() for UNC paths on Windows. May 31, 2024
@gpshead
Copy link
Member

gpshead commented May 31, 2024

This needs unittests ensuring that the C and Python versions of the functions have identical behavior (in main, not just in this backport).

If you want to propose this for backporting, it helps to make the change easy to understand what changed from a simple GH diff view. To do that, please don't indent the existing Python splitroot() implementations. Keep those at the top level, just renaming them to _py_splitroot, and using the conditional import logic only to assign/redefine the appropriate function to the splitroot name within the new code. This is also needed for testing purposes so that both versions exist. Work all that out in main first.

@gpshead
Copy link
Member

gpshead commented May 31, 2024

The Issue and the change in main/3.13 do not mention anything about a bug being fixed in the Issue, PR description, or commit message.

What was the bug?

Please make sure the Issue explains what the bug was and new desired behavior is, and that the NEWS entry in main/3.13 is fixed to describe the bugfix before considering a backport.

@nineteendo
Copy link
Contributor Author

What was the bug?

>>> ntpath.normpath('//?/UNC/server/share/../..')
'\\\\?\\UNC\\' # instead of '\\\\?\\UNC\\server\\share\\'

Copy link

cpython-cla-bot bot commented Oct 14, 2024

All commit authors signed the Contributor License Agreement.
CLA signed

@nineteendo nineteendo force-pushed the backport-10bb90e-3.12 branch from 91cc736 to 9b930a5 Compare October 14, 2024 06:25
@nineteendo nineteendo force-pushed the backport-10bb90e-3.12 branch from 3308d41 to 43993c5 Compare October 14, 2024 06:33
@nineteendo nineteendo marked this pull request as ready for review October 14, 2024 06:37
@nineteendo
Copy link
Contributor Author

Steve, can we re-consider now? I've waited a bit longer until 3.13 was released.

@erlend-aasland
Copy link
Contributor

The 3.12 bug-fix-window is considerably smaller now, implying that the code-remains-the-same argument of #119394 (comment) is considerably weakened.

@zooba
Copy link
Member

zooba commented Oct 16, 2024

The 3.12 bug-fix-window is considerably smaller now, implying that the code-remains-the-same argument...

I'd rate this code as security-sensitive, meaning it's more likely to get fixes that we'd have to backport throughout all security releases. But that also suggests we shouldn't be changing it for an issue that already existed in case we create a new issue. Plus it means a backport would likely need customisation for older versions anyway. The one year window where it's definitely worth it (after 3.11 is EOL) isn't very long, and the bug wasn't reported specifically, but was discovered.

I'm leaning towards status quo (don't merge), just because we apparently haven't upset anyone yet (except perhaps nineteendo, sorry) and not changing things rarely makes it worse.

@nineteendo
Copy link
Contributor Author

I'm leaning towards status quo (don't merge), just because we apparently haven't upset anyone yet (except perhaps nineteendo, sorry) and not changing things rarely makes it worse.

It's fine, I'm just happy I can finally delete this branch and forget about it.

@nineteendo nineteendo closed this Oct 16, 2024
@nineteendo nineteendo deleted the backport-10bb90e-3.12 branch October 16, 2024 20:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants