[poppler] Compiling poppler with clang
Adam Reichold
adamreichold at myopera.com
Sun Nov 18 23:16:59 PST 2012
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
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.)
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
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)
iQEcBAEBAgAGBQJQqdzrAAoJEPSSjE3STU34RisH/iqlAtA62bwUMNG9Ym6iRQhk
7RXIqGED7gC7PNMp8gi/dGBH+ziRjVtQfag9oyq4L0QgqEkEHa4hH55WVSnaScik
8qZrRkh9w8XNcG7ROURRbWniKYM0cj8Ao24ps6nJr6GODAS82LpWycFUgz+W4v9J
lA0jvkzhpJoS700L5rwUkj5xh+2X98Qy556yt3Hew1T7M1pCOAEWGc794k56/d4q
je/zec2xL2oMGP8jrEr01GDqshg+z/+dAqrkg+yJ6M3CzpCvA3iB/kJEQZAMFT1g
Jy6o7tn41WTk2FYlWmgPxna6bA+GvR4JT8dxrA47zOcmqTVoOtOfpa0o9+Wfvss=
=4ghL
-----END PGP SIGNATURE-----
-------------- next part --------------
A non-text attachment was scrubbed...
Name: function_copy_constructor.patch
Type: text/x-patch
Size: 7995 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/poppler/attachments/20121119/7ac23790/attachment.bin>
More information about the poppler
mailing list