[poppler] Compiling poppler with clang
Albert Astals Cid
aacid at kde.org
Sun Aug 26 15:56:06 PDT 2012
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.
>
> 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
More information about the poppler
mailing list