-
-
Notifications
You must be signed in to change notification settings - Fork 33.6k
gh-142315: Don't pass the "real path" of Pdb script target to system functions #142371
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
base: main
Are you sure you want to change the base?
Conversation
Or... maybe I just mention the issue in a comment above the affected lines -- this will be my escape hatch to not write tests 💡 |
ac11ff4 to
682069d
Compare
682069d to
7050770
Compare
|
Ok, this one is clean and works! |
7767efa to
d9932f5
Compare
|
Thanks for the contrib!
My preference would be to create a regression test. It seems it shouldn't be too hard to create or identify a pseudofs object to pass in and catch the SystemExit. I'll work on one. I saw in email that @johnslavik did some analysis on the root cause in readpath/readlink. It'd be nice to get that published somewhere. Even if there's nothing wrong with Python's wrapper around realpath, it may still be worth filing an issue to capture the investigation and consider updating the docs to flag this potential issue. |
| self._target = os.path.realpath(target) | ||
|
|
||
| if not os.path.exists(self._target): | ||
| if not os.path.exists(target): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm thinking we should have a one-line change in the constructor, something like:
| if not os.path.exists(target): | |
| self._target = self._safe_realpath(target) | |
| if not os.path.exists(self._target): |
Then, _safe_realpath would have the logic and a docstring instead of a comment describing why it exists and how it protects against non-existent readlink targets (the code below).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And maybe it will help with the test, yeah :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm worried safe_realpath could be confusing near the current safe_path(-P) comment. I'll fixup that comment to reduce confusion.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jaraco To not change the behavior out of scope of the issue, I'd have to keep the file existence validation invoked prior to calling _safe_realpath anyway. os.path.realpath does suppress OSError, but I'd not mess with that if we can avoid double-checking.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change done.
|
I've created #142383 with a test. Assuming that test is failing as expected, I'll try merging it with this fix. |
60aa009 to
e42ba5e
Compare
e42ba5e to
5b12904
Compare
|
I think I like it the way it is now. It's a problem of maintaining the equivalence invariant -- easy to follow. |
Oh the irony that this was never a real path.
I need to figure out how to test this -- it's a regression, after all, so no excuses this time.
CC @ZeroIntensity
needs backport to 3.13,needs backport to 3.14