-
Notifications
You must be signed in to change notification settings - Fork 7
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
Self-reference to $this
in PelIfd::$maker_notes
#6
Comments
saemy
added a commit
to saemy/pel
that referenced
this issue
Oct 4, 2023
`PelIfd::$maker_notes["parent"]` is always `$this` (there is only one caller of `PelIfd::setMakerNotes()`). However, adding `$this` to the array leads to a reference of a `PelIfd` instance to itself. As a result that `PelIfd` instance can not be cleaned up right away after all references to it go away (as the ref_count remains at 1 - the one to itself). Only at garbage collection time the garbage cycle is detected and that instance is cleaned up. This is an issue in case big images are processed one after another. In that scenario `PelIfd::$maker_notes['data']` contains the full image data (i.e. multiple MB) and is only released upon garbage collection time - which is not right away. Garbage memory is piling up and running out of memory is easily possible and the program might crash with `"Fatal error: Allowed memory size of xxx bytes exhausted"`. Removes the self-reference in the `PelIfd::$maker_notes` array. fixes: FileEye#6
The same thing! |
@devbranch-vitaliy Can you share one of those images s.t. I can try to reproduce? Thank you. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
PelIfd::$maker_notes["parent"]
is always$this
(there is only one caller ofPelIfd::setMakerNotes()
). However, adding$this
to the array leads to a reference of aPelIfd
instance to itself. As a result thatPelIfd
instance can not be cleaned up right away after all references to it go away (as the ref_count remains at 1 - the one to itself). Only at garbage collection time the garbage cycle is detected and that instance is cleaned up.This is an issue in case big images are processed one after another. In that scenario
PelIfd::$maker_notes['data']
contains the full image data (i.e. multiple MB) and is only released upon garbage collection time - which is not right away. Garbage memory is piling up and running out of memory is easily possible and the program might crash with"Fatal error: Allowed memory size of xxx bytes exhausted"
.The text was updated successfully, but these errors were encountered: