Can you please explain, why is it bad? Pointer to string buffer goes "as is" to 3d party function, and even with explicit flag (there is one) not to make a copy in data structures created somewhere in 3d party code: "if FALSE, wrap the user's pixel buffer, otherwise, make a deep copy". I was actually proud because of this "no copying, low memory, fast code" thing. All works as expected, no leaks with long running code, no failures, etc. After images are saved, piddles themselves are not needed (nor checked what happened to them). The only issue was when identical piddles happened in original list, then every other channel was mirrored, but I don't know if it means buffer itself gets modified or image coder gets confused.
And thank you for C recipe for forcing a copy.