[poppler] poppler/Stream.cc
Albert Astals Cid
aacid at kde.org
Sat May 26 08:59:52 UTC 2018
El dimecres, 23 de maig de 2018, a les 21:46:02 CEST, Adam Reichold va escriure:
> Hello again,
>
> attached the patch. It declares inputBuf as unsigned so all bit shifts
> happen on unsigned values. ctest at least seems to be happy.
Interestingly the automagic fuzzer service says that the issue with LZWStream::getCode doing left shift on negative values has been fixed by a commit in this range
https://cgit.freedesktop.org/poppler/poppler/diff/?id2=76820f5ab932a9ed18913bc7d1a452ddf060c133&id=f966b9096d046aaee4891de11f74207218cc929b
So i guess for not better not to touch this code.
Thanks for the patch though :)
Cheers,
Albert
>
> It does build without the casts as well but I am not completely sure
> about the language legalese behind this and hence left them in and also
> for explicitness.
>
> Proper fix would probably be to converted all of the LZW decoding to use
> unsigned values.
>
> Best regards,
> Adam
>
> Am 23.05.2018 um 21:24 schrieb Albert Astals Cid:
> > El dimecres, 23 de maig de 2018, a les 8:57:27 CEST, Adam Reichold va
> >
> > escriure:
> >> Hello,
> >>
> >> maybe the simplest solution would to turn inputBuf into an unsigned int
> >> and convert to signed int after extracting the bits out of it?
> >
> > Yeah that sounds like a plan, could you try to produce a patch so i can
> > run it through regtest?
> >
> > Cheers,
> >
> > Albert
> >>
> >> Best regards,
> >> Adam
> >>
> >> Am 23.05.2018 um 00:24 schrieb Albert Astals Cid:
> >>> poppler/Stream.cc | 4 +---
> >>> 1 file changed, 1 insertion(+), 3 deletions(-)
> >>>
> >>> New commits:
> >>> commit 58e056c4b15f262b7715f8061d6885eb80044d0d
> >>> Author: Albert Astals Cid <aacid at kde.org>
> >>> Date: Wed May 23 00:23:19 2018 +0200
> >>>
> >>> Revert 31c3832b996acbf04ea833e304d7d21ac4533a57
> >>>
> >>> So shifting left negative values is undefined behaviour according to
> >>> the
> >>> spec but if we don't do it we break, so we seem to be depending on
> >>> this
> >>> undefined behaviour, will try to figure out a better fix
> >>>
> >>> diff --git a/poppler/Stream.cc b/poppler/Stream.cc
> >>> index b6bfd838..4f075c12 100644
> >>> --- a/poppler/Stream.cc
> >>> +++ b/poppler/Stream.cc
> >>> @@ -1445,9 +1445,7 @@ int LZWStream::getCode() {
> >>>
> >>> while (inputBits < nextBits) {
> >>>
> >>> if ((c = str->getChar()) == EOF)
> >>>
> >>> return EOF;
> >>>
> >>> - if (likely(inputBuf >= 0)) {
> >>> - inputBuf = (inputBuf << 8) | (c & 0xff);
> >>> - }
> >>> + inputBuf = (inputBuf << 8) | (c & 0xff);
> >>>
> >>> inputBits += 8;
> >>>
> >>> }
> >>> code = (inputBuf >> (inputBits - nextBits)) & ((1 << nextBits) - 1);
> >>>
> >>> _______________________________________________
> >>> poppler mailing list
> >>> poppler at lists.freedesktop.org
> >>> https://lists.freedesktop.org/mailman/listinfo/poppler
More information about the poppler
mailing list