forked from enlightenment/efl
pdf: Fix page index and
The module was not able to load any PDF with a single page (since the index starts from 0, not 1 as it was assumed). Also, fix a CID where Coverity was very very right. Fixes CID 1356608: The operaton may have an undefined behavior or yield to an unexpected result. In poppler_load_image(int, int): A bit shift operation has a shift amount which is too large or has a negative value.
This commit is contained in:
parent
3d16cdc67e
commit
db27a6b940
|
@ -67,7 +67,7 @@ Eina_Bool poppler_init(const char *file, int page_nbr, int size_w, int size_h)
|
||||||
|
|
||||||
/* load the page */
|
/* load the page */
|
||||||
|
|
||||||
doc_page = doc->create_page(page_nbr + 1);
|
doc_page = doc->create_page(page_nbr);
|
||||||
if (!doc_page)
|
if (!doc_page)
|
||||||
goto del_pdfdoc;
|
goto del_pdfdoc;
|
||||||
|
|
||||||
|
@ -149,6 +149,9 @@ void poppler_load_image(int size_w EINA_UNUSED, int size_h EINA_UNUSED)
|
||||||
for (y = 0; y < crop_height; y++) \
|
for (y = 0; y < crop_height; y++) \
|
||||||
for (x = 0; x < crop_width; x++)
|
for (x = 0; x < crop_width; x++)
|
||||||
|
|
||||||
|
#define ARGB_JOIN(a,r,g,b) \
|
||||||
|
(((a) << 24) + ((r) << 16) + ((g) << 8) + (b))
|
||||||
|
|
||||||
if (out.format() == image::format_mono)
|
if (out.format() == image::format_mono)
|
||||||
{
|
{
|
||||||
//FIXME no idea what this format is like
|
//FIXME no idea what this format is like
|
||||||
|
@ -159,12 +162,8 @@ void poppler_load_image(int size_w EINA_UNUSED, int size_h EINA_UNUSED)
|
||||||
src = (RGB24*) out.data();
|
src = (RGB24*) out.data();
|
||||||
IMAGE_PIXEL_ITERATOR
|
IMAGE_PIXEL_ITERATOR
|
||||||
{
|
{
|
||||||
DATA32 d = 0xFF000000;
|
|
||||||
int pos = x+y*crop_width;
|
int pos = x+y*crop_width;
|
||||||
d |= src[pos][0] >> 8;
|
dst[pos] = ARGB_JOIN(0xFF, src[pos][0], src[pos][1], src[pos][2]);
|
||||||
d |= src[pos][1] >> 16;
|
|
||||||
d |= src[pos][2] >> 24;
|
|
||||||
dst[pos] = d;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (out.format() == image::format_argb32)
|
else if (out.format() == image::format_argb32)
|
||||||
|
|
Loading…
Reference in New Issue