diff options
author | Oliver Chang <ochang@chromium.org> | 2016-08-16 12:52:24 -0700 |
---|---|---|
committer | Oliver Chang <ochang@chromium.org> | 2016-08-16 12:52:24 -0700 |
commit | fe9485fff248dd04a0643e4ce2309aec7ae237e1 (patch) | |
tree | 6d9f9a1a315f637cfb77c894c26da9c7c90076d8 /third_party/libopenjpeg20/0021-tcd_init_tile_negative.patch | |
parent | 3cde1a2d144e562b8bf3c8009039ca1cf67a8b44 (diff) | |
download | pdfium-fe9485fff248dd04a0643e4ce2309aec7ae237e1.tar.xz |
Merge 2 CLs to M53.
TBR=tsepez@chromium.org
Remove another potential stale CJS_Timer usage
Fix memory ownership model for PDFium timers.
The |app| class owns the CJS_Timer as part of its vector<unique_ptr>
to them.
The CJS_Timer "owns" its slot in the global ID to timer map, and
removes itself when it is destroyed. Nothing else deletes
from the global map. Deleting from the global map is
accompanied by a callback to the embedder to clear its
resources.
Next, the proper way to remove a CJS_Timer is by going
through the app, and having the app erase its unique ptr,
which then deletes the CJS_Timer, which in turn cleans up the
global map. Provide a CJS_Timer::Cancel static method to
do this conveniently.
There is a alternate path to the CJS_timer via JS and its
CJS_TimerObj. CJS_TimerObj owns a TimerObj that currently
points to the CJS_Timer. If the timer fires, and cleans
itself up, this can go stale.
Make the TimerObj maintain a weak reference via global
timer ID rather than a direct pointer to the CJS_Timer, so
that if the timer fires and is destroyed, future attempts
to cancel find nothing.
There is another path, where if the JS timer object is GC'd, then we
just clean up its CJS_TimerObj without touching
the actual CJS_Timers. We could make this match the spec
by calling into the new cancel routine as described above,
but it seems weird to have a timer depend on whether a gc
happened or not.
A subsequent CL will rename these objects to more closely
match the conventions used by the other JS wrappers.
BUG=634716
Review-Url: https://codereview.chromium.org/2221513002
(cherry picked from commit 8ca63de14d522d3d259d74fa43b28b05b02728e8)
openjpeg: Prevent negative x, y values in opj_tcd_init_tile
BUG=632622
Review-Url: https://codereview.chromium.org/2223303002
(cherry picked from commit b6befb2ed2485a3805cddea86dc7574510178ea9)
Review URL: https://codereview.chromium.org/2251703003 .
Diffstat (limited to 'third_party/libopenjpeg20/0021-tcd_init_tile_negative.patch')
-rw-r--r-- | third_party/libopenjpeg20/0021-tcd_init_tile_negative.patch | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/third_party/libopenjpeg20/0021-tcd_init_tile_negative.patch b/third_party/libopenjpeg20/0021-tcd_init_tile_negative.patch new file mode 100644 index 0000000000..33694f81fc --- /dev/null +++ b/third_party/libopenjpeg20/0021-tcd_init_tile_negative.patch @@ -0,0 +1,21 @@ +diff --git a/third_party/libopenjpeg20/tcd.c b/third_party/libopenjpeg20/tcd.c +index 9270efe..06eee4e 100644 +--- a/third_party/libopenjpeg20/tcd.c ++++ b/third_party/libopenjpeg20/tcd.c +@@ -706,9 +706,16 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, + l_tx0 = l_cp->tx0 + p * l_cp->tdx; /* can't be greater than l_image->x1 so won't overflow */ + l_tile->x0 = (OPJ_INT32)opj_uint_max(l_tx0, l_image->x0); + l_tile->x1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, l_cp->tdx), l_image->x1); ++ if (l_tile->x0 < 0 || l_tile->x1 < 0) { ++ return OPJ_FALSE; ++ } ++ + l_ty0 = l_cp->ty0 + q * l_cp->tdy; /* can't be greater than l_image->y1 so won't overflow */ + l_tile->y0 = (OPJ_INT32)opj_uint_max(l_ty0, l_image->y0); + l_tile->y1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, l_cp->tdy), l_image->y1); ++ if (l_tile->y0 < 0 || l_tile->y1 < 0) { ++ return OPJ_FALSE; ++ } + + /* testcase 1888.pdf.asan.35.988 */ + if (l_tccp->numresolutions == 0) { |