Cleanup if early return from opj_j2k_copy_default_tcp_and_create_tcd().

The opj_j2k_copy_default_tcp_and_create_tcp() function memcpy's a top-level
struct, and then replaces pointers to memory owned by the original struct
with new blocks of memory. Unfortunately, an early return can leave the
copy with pointers to memory it doesn't own, which causes problems when
cleaning up the partially-initialized struct.

The referenced bug is triggered when we get a return at original
line 7969 or 7385 due to OOM.

Moral of the story: creating a "copy constructor" equivalent
based on memcpy() instead of copying field by field for structs
containing pointers is usually a bad idea.

BUG=486538
R=jun_fang@foxitsoftware.com

Review URL: https://codereview.chromium.org/1138033007
1 file changed