[poppler] Compiling poppler with clang

Albert Astals Cid aacid at kde.org
Thu Nov 22 11:30:42 PST 2012


El Dijous, 22 de novembre de 2012, a les 08:40:26, Adam Reichold va escriure:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Hello,
> 
> Somehow, I saw this one coming... :-) There were two calls to base
> constructors missing. Fixed and appended.
> 
> But the linked document still crashes Poppler. And for me, it does so
> with my patch applied or not. Master itself seems to crash in Splash,
> for example at:
> 
> 0 __memset_x86_64 /usr/lib/libc.so.6 0x7ffff5388a2a
> 1 Splash::clear Splash.cc:1929 0x7ffff5027693
> 2 SplashOutputDev::startPage SplashOutputDev.cc:1422 0x7ffff4f563cb
> 3 Gfx::Gfx Gfx.cc:564 0x7ffff4fa02e9
> 4 Page::createGfx Page.cc:486 0x7ffff4fd964b
> 5 Page::displaySlice Page.cc:515 0x7ffff4fd9898
> 6 Poppler::Page::renderToImage poppler-page.cc:264 0x7ffff7ba7220
> 
> This is
> 
> if (bitmap->alpha) {
>   memset(bitmap->alpha, alpha, bitmap->width * bitmap->height);
> }
> 
> in Splash::clear. I also encountered other crashes connected to the
> Splash bitmap data. I'd say we should figure out this problem before I
> continue to fool around with compiler warnings.

Interesting, the file works fine for me :S

Can you run valgrind on it?

Cheers,
  Albert

> 
> Regards, Adam.
> 
> Am 21.11.2012 23:27, schrieb Albert Astals Cid:
> > El Dimarts, 20 de novembre de 2012, a les 08:05:56, Adam Reichold
> > va escriure: Hello Albert,
> > 
> > I am beginning to understand why one would not touch this, if it
> > isn't necessary. :-(
> > 
> > I redid the changes and found that I missed to copy
> > "SampledFunction::nSamples". Sorry. Tested it against the PDF file
> > you linked.
> > 
> >> Now crashes in http://www.it.piaggio.com/media/mp3hybdepita.pdf
> >> 
> >> Cheers, Albert
> > 
> > On a different but related topic: I tested the first patch using
> > the test data repository and "make check", but the number of
> > documents in this set seems limited. But be more helpful (I am also
> > thinking of Thomas' threading patches), is they a way to get or
> > automatically generate the collection of PDF files covered by the
> > bug tracker? (Or whatever else you use for full regression
> > testing.)
> > 
> > Best regards, Adam.
> > 
> > Am 19.11.2012 22:44, schrieb Albert Astals Cid:
> >>>> El Dilluns, 19 de novembre de 2012, a les 08:16:59, Adam
> >>>> Reichold va escriure: Hello Albert,
> >>>> 
> >>>> I am sorry about that. It seems like my editor messed up with
> >>>> the spaces since it seems to apply using
> >>>> "--ignore-space-change". I tried to reformat the patch using
> >>>> said option, hopefully this helps. (It still has some
> >>>> whitespace warnings but no more errors.)
> >>>> 
> >>>>> Can you have a look at
> >>>>> https://bugs.freedesktop.org/attachment.cgi?id=18330
> >>>>> 
> >>>>> The dash line that divides the the green rectangular area
> >>>>> changes from grayish to black when applying your patch.
> >>>>> 
> >>>>> Cheers, Albert
> >>>> 
> >>>> Regards, Adam.
> >>>> 
> >>>> On 18.11.2012 23:01, Albert Astals Cid wrote:
> >>>>>>> El Dimecres, 14 de novembre de 2012, a les 18:48:26,
> >>>>>>> Adam Reichold va escriure: Hello again,
> >>>>>>> 
> >>>>>>> The attached patch should rework the function copy
> >>>>>>> constructors.
> >>>>>>> 
> >>>>>>>> Doesn't seem to apply on current master, can you
> >>>>>>>> please rebase it and make sure it applies?
> >>>>>>>> 
> >>>>>>>> Cheers, Albert
> >>>>>>> 
> >>>>>>> Best regards, Adam.
> >>>>>>> 
> >>>>>>> On 14.11.2012 12:58, Albert Astals Cid wrote:
> >>>>>>>>>> El Dimecres, 14 de novembre de 2012, a les
> >>>>>>>>>> 07:28:21, Adam Reichold va escriure: Hello
> >>>>>>>>>> Albert,
> >>>>>>>>>> 
> >>>>>>>>>> Before I try the other classes, could you have a
> >>>>>>>>>> look at the
> >>>>>>>>>> 
> >>>>>>>>>> attached patch for SampledFunction and tell if
> >>>>>>>>>> this is what
> >>>>>>>>>> 
> >>>>>>>>>> you are looking for?
> >>>>>>>>>> 
> >>>>>>>>>> Would something like memcpy(sampleSize,
> >>>>>>>>>> func->sampleSize, funcMaxInputs * sizeof(int));
> >>>>>>>>>> be preferred to the plain for-loops?
> >>>>>>>>>> 
> >>>>>>>>>>> Yes. it's what the other functions use, right?
> >>>>>>>>>> 
> >>>>>>>>>> Regards, Adam.
> >>>>>>>>>> 
> >>>>>>>>>> P.S.: By the way, is there a reason to use the
> >>>>>>>>>> signature Function(const Function*) for the "what
> >>>>>>>>>> would be a copy constructor" instead of
> >>>>>>>>>> "Function(const Function&)"?
> >>>>>>>>>> 
> >>>>>>>>>>> No clue, ask the guy that wrote them (hint,
> >>>>>>>>>>> he's not around)
> >>>>>>>>>>> 
> >>>>>>>>>>> Cheers, Albert
> >>>>>>>>>> 
> >>>>>>>>>> On 13.11.2012 23:28, Albert Astals Cid wrote:
> >>>>>>>>>>>>> El Dilluns, 27 d'agost de 2012, a les
> >>>>>>>>>>>>> 22:31:13, Albert Astals Cid
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> va escriure:
> >>>>>>>>>>>>>> El Dilluns, 27 d'agost de 2012, a les
> >>>>>>>>>>>>>> 08:29:40, Thomas Freitag va
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> escriure:
> >>>>>>>>>>>>>>> On 27.08.2012 00:56, Albert Astals Cid
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>> El Diumenge, 26 d'agost de 2012, a
> >>>>>>>>>>>>>>>> les 15:48:37, He Liu va
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>> escriure:
> >>>>>>>>>>>>>>>>>>> 5. vtable pointer will be
> >>>>>>>>>>>>>>>>>>> overwritten
> >>>>>>>>>>>>>>>>>>> Function.cc:422:10: warning:
> >>>>>>>>>>>>>>>>>>> destination for this 'memcpy'
> >>>>>>>>>>>>>>>>>>> call is a pointer to dynamic
> >>>>>>>>>>>>>>>>>>> class 'SampledFunction';
> >>>>>>>>>>>>>>>>>>> vtable pointer will be
> >>>>>>>>>>>>>>>>>>> overwritten
> >>>>>>>>>>>>>>>>>>> [-Wdynamic-class-memaccess]
> >>>>>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>>>> memcpy(this, func,
> >>>>>>>>>>>>>>>>>>> sizeof(SampledFunction));
> >>>>>>>>>>>>>>>>>>> ~~~~~~ ^
> >>>>>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>>>> Function.cc:422:10: note:
> >>>>>>>>>>>>>>>>>>> explicitly cast the pointer to
> >>>>>>>>>>>>>>>>>>> silence this warning
> >>>>>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>>>> At least categrory 5. sound
> >>>>>>>>>>>>>>>>>>> serious to me, I would never
> >>>>>>>>>>>>>>>>>>> have copied instances of C++
> >>>>>>>>>>>>>>>>>>> objects in that way, because it
> >>>>>>>>>>>>>>>>>>> depends on the compiler and the
> >>>>>>>>>>>>>>>>>>> class if this causes problems
> >>>>>>>>>>>>>>>>>>> on runtime, s. i.e.
> >>>>>>>>>>>>>>>>>>> http://weseetips.com/tag/afx_zero_init_object/,
> 
> Note this is memset-ing to 0, not memcpy-ing a
> 
> >>>>>>>>>>>>>>>>>> class to itself. To be honest i
> >>>>>>>>>>>>>>>>>> agree memcpy'in a SampledFunction
> >>>>>>>>>>>>>>>>>> to a SampledFunction is ugly, but
> >>>>>>>>>>>>>>>>>> i fail to see why it would not
> >>>>>>>>>>>>>>>>>> work.
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> It works, at least with the actual
> >>>>>>>>>>>>>>> used compilers. But it works only,
> >>>>>>>>>>>>>>> because the allocated members of
> >>>>>>>>>>>>>>> SampledFunction are overwriten after
> >>>>>>>>>>>>>>> doing the memcpy. And this behaviour
> >>>>>>>>>>>>>>> makes it just more ugly in my eyes. And
> >>>>>>>>>>>>>>> this is the same with the other
> >>>>>>>>>>>>>>> memcpy's in ExponentialFunction,
> >>>>>>>>>>>>>>> StitchingFunction and
> >>>>>>>>>>>>>>> PostScriptFunction. And it will work
> >>>>>>>>>>>>>>> till such time as everybody who changes
> >>>>>>>>>>>>>>> the class will not forget to do it in
> >>>>>>>>>>>>>>> the same way. So if You are not willing
> >>>>>>>>>>>>>>> to change it (or let somebody else
> >>>>>>>>>>>>>>> change it, I know, never change running
> >>>>>>>>>>>>>>> code), we could use the hint:
> >>>>>>>>>>>>>>> explicitly cast the pointer to silence
> >>>>>>>>>>>>>>> this warning.
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>> I'm fine with someone fixing the code.
> >>>>>>>>>>>>>> Less warnings is always good, but for
> >>>>>>>>>>>>>> master, there's no need to introduce a
> >>>>>>>>>>>>>> pontential breaker just because clang
> >>>>>>>>>>>>>> complains.
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> So at the end noone volunteered to
> >>>>>>>>>>>>> re-rewite those functions not to use memcpy
> >>>>>>>>>>>>> over classes with virtuals?
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> Cheers, Albert
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>>> Cheers, Albert
> >>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>> Cheers, Thomas
> >>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> Hi Albert,
> >>>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> :-)
> >>>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> A pointer of type SampleFunction*
> >>>>>>>>>>>>>>>>> could be pointing to an instance of
> >>>>>>>>>>>>>>>>> a SampleFunction sub-class, which
> >>>>>>>>>>>>>>>>> has different vtable contents.
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>> No, it could not, SampledFunction
> >>>>>>>>>>>>>>>> does not have any childs and the
> >>>>>>>>>>>>>>>> function doing that memcopy is
> >>>>>>>>>>>>>>>> private anyway.
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> As a result, one could construct a
> >>>>>>>>>>>>>>>>> SampleFunction with
> >>>>>>>>>>>>>>>>> SampleFunction(SampleFunction *)
> >>>>>>>>>>>>>>>>> using a pointer to a sub-class
> >>>>>>>>>>>>>>>>> instance, and overwrite the
> >>>>>>>>>>>>>>>>> SampleFunction's vtable address
> >>>>>>>>>>>>>>>>> with the sub-class's vtable
> >>>>>>>>>>>>>>>>> address.
> >>>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> I am not sure if it will lead to
> >>>>>>>>>>>>>>>>> any bugs/vulnerabilities in this
> >>>>>>>>>>>>>>>>> case, but it is not safe practice
> >>>>>>>>>>>>>>>>> in general.
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>> Sure, i never said it was. I'm just
> >>>>>>>>>>>>>>>> saying i don't see why it would not
> >>>>>>>>>>>>>>>> work in our case.
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> Since the vtable structure depends
> >>>>>>>>>>>>>>>>> on how the compiler is implemented,
> >>>>>>>>>>>>>>>>> memcpy or memset on object pointers
> >>>>>>>>>>>>>>>>> will generally lead to undefined
> >>>>>>>>>>>>>>>>> behaviors.
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>> I'm far from a compiler expert, but
> >>>>>>>>>>>>>>>> one would hope that for a given class
> >>>>>>>>>>>>>>>> the compiler stores always the
> >>>>>>>>>>>>>>>> "stuff" in the same order in memory,
> >>>>>>>>>>>>>>>> so again, i fail to see why this
> >>>>>>>>>>>>>>>> should fail in our case.
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>> Cheers,
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>> Albert
> >>>>>>>>>>>>>>>> 
> >>>>>>>>>>>>>>>>> Thanks.
> >>>>>>>>>>>>>>>>> _______________________________________________
> 
> poppler mailing list poppler at lists.freedesktop.org
> 
> >>>>>>>>>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> > 
> > _______________________________________________ poppler
> > 
> >>>>>>>>>>>>>>>> mailing list
> >>>>>>>>>>>>>>>> poppler at lists.freedesktop.org
> >>>>>>>>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
> .
> 
> >>>>>>>>>>>>>>> _______________________________________________
> > 
> > poppler mailing list poppler at lists.freedesktop.org
> > 
> >>>>>>>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
> _______________________________________________ poppler
> 
> >>>>>>>>>>>>>> mailing list
> >>>>>>>>>>>>>> poppler at lists.freedesktop.org
> >>>>>>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
> _______________________________________________ poppler
> 
> >>>>>>>>>>>>> mailing list poppler at lists.freedesktop.org
> >>>>>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> > 
> > _______________________________________________ poppler
> > 
> >>>>>>>>>> mailing list poppler at lists.freedesktop.org
> >>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
> _______________________________________________ poppler
> 
> >>>>>>> mailing list poppler at lists.freedesktop.org
> >>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> >>>> 
> >>>> _______________________________________________ poppler
> >>>> mailing list poppler at lists.freedesktop.org
> >>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> > 
> > _______________________________________________ poppler mailing
> > list poppler at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/poppler
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.19 (GNU/Linux)
> 
> iQEcBAEBAgAGBQJQrdbqAAoJEPSSjE3STU34XlgH/A6URICsLt1L+ovPJMYwrNJm
> 4gaGM/a5TV4x3scmHrieSHpAWxaX+ra9y2dHZCz6DWLuJnh84sGyuTiN2qlXUH3z
> 1LdUaB8NX04gAr7R2Vqn+qC0/LKeMak55udc0ZD10ROSqkzO6pE8b9T4Hf1a+hPe
> ZzAcH6wva8CVRYxdILCzJSvOLn8tQoPPOMQN63ePBQ+JgzVS8Dnp4uXn+4jDON1V
> a550RXEO3wJvuifh4DBsYpIoaOlOBDw7k2tJqJGdaXjRmAuulXNql97aFM80XOJ0
> T1MWesOH+MBS51f+ai16Z7rhP7UW3d14Vhv19N0BoaLwnYPLKWDZCbh/M3smVlI=
> =MiU1
> -----END PGP SIGNATURE-----


More information about the poppler mailing list