-
Notifications
You must be signed in to change notification settings - Fork 128
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
Fix stack overflow error due to invalid condition #38821
base: main
Are you sure you want to change the base?
Conversation
5c6585a
to
162a154
Compare
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.
Fix makes sense. I tested with one comma as suggested and then with several combinations of ,
and ;
, and it worked fine with no issues.
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.
Quick note on the code about using a constant instead of literals.
Additionally, It looks like this could benefit from a test or two - and it needs a release note as the bug was user-facing.
* | ||
* @param path The path to split. | ||
* @returns vector containing the split path. | ||
*/ | ||
std::vector<std::string> splitPath(const std::string &path) { | ||
std::vector<std::string> splitted; | ||
|
||
if (path.find(';') == std::string::npos) { // don't bother tokenizing | ||
if (path.find_first_of(";,") == std::string::npos) { // don't bother tokenizing |
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.
These two needing to be in sync has the potential to cause issues down the line. Can we make a constant called PATH_DELIMITERS
or something that can be used in both places so this is less likely to happen again?
60b2104
to
240c6a7
Compare
240c6a7
to
98b0d92
Compare
Description of work
This PR fixes a stack overflow error in
ConfigService
due to an invalid condition causing infinite recursion in the functionmakeAbsolute
.Fixes #38704
Further detail of work
In the
splitPath
function, the previous condition was only checking for the ";" delimiter. This causesmakeAbsolute
to call itself infinitely when the string contains only "," delimiters. I have corrected the function to include the "," delimiter, similar to the condition inmake absolute
, to ensure consistency.To test:
1- Run this line in the Python script area:
ConfigService.setDataSearchDirs("/archive/NDXSANS2D/user/masks/,/archive/NDXSANS2D/user/Masks/")
2- It should work well without a crash
3- Check the data search dirs in Manage directories to ensure the two paths have been added correctly
4- Try different paths with combinations of "," and ";"
Reviewer
Please comment on the points listed below (full description).
Your comments will be used as part of the gatekeeper process, so please comment clearly on what you have checked during your review. If changes are made to the PR during the review process then your final comment will be the most important for gatekeepers. In this comment you should make it clear why any earlier review is still valid, or confirm that all requested changes have been addressed.
Code Review
Functional Tests
Does everything look good? Mark the review as Approve. A member of
@mantidproject/gatekeepers
will take care of it.Gatekeeper
If you need to request changes to a PR then please add a comment and set the review status to "Request changes". This will stop the PR from showing up in the list for other gatekeepers.