-
Notifications
You must be signed in to change notification settings - Fork 51
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
Use-after-free (?) in overwriteIndexFromFile #882
Comments
OK, I can reproduce this with nothing more than my clone of git-meta itself:
|
I still get this with the latest node-git release (0.28.0-alpha.20), which is a little frustrating - I was hoping it was something like nodegit/nodegit#1833 but apparently not (or maybe it secretly is, and that fix wasn't quite sufficient). Some other notes:
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is documented in more detail internally at http://jira/SDLC-37809, and I'll try to extract a public test case, but after switching to Node 18, we're seeing what appears to be memory corruption in libgit2, which as best as I can tell is because overwriteIndexFromFile in node/lib/util/git_util.js opens up a NodeGit
Index
object (newIndex
), stores the pointers to theIndexEntry
objects it contains, and then allows theIndex
object to be freed. This mostly manifests as libgit2 complaining the file mode is zero, sometimes as libgit2 complaining a path is invalid, and at least once as a segfault in strcmp.I suspect this isn't happening in the public repo's CI because we're not triggering the same memory-allocation patterns - the internal repo has about 15K submodules and is also using a pre-commit hook, both of which appear to be necessary.
Modifying the code to intentionally leak
newIndex
seems to avoid the memory corruption. I'm not actually sure how to properly do this with the exposed nodegit API, since there doesn't appear to be a deep-copy function onIndexEntry
.The text was updated successfully, but these errors were encountered: