One thing I forgot. PODOFO_Base14FontDef_FindBuiltinData is used on places
where return value is not deallocated. This would cause memory leaks. I am
sending better patch.

Metrics object is allocated and copy constructed from global only on places
where it will be eventually deallocated.

Still is good idea to have PODOFO_BUILTIN_FONTS const and
PODOFO_Base14FontDef_FindBuiltinData to return const pointer.


On Fri, Nov 16, 2018 at 5:56 PM Michal Sudolsky <sudols...@gmail.com> wrote:

> Fonts created for different documents should be independent. In other case
> you cannot do anything usable with them when using multiple threads.
>
> Code:
> ``` c++
> PdfMemDocument doc0;
> PdfFont *font0 = doc0.CreateFont("Helvetica");
> font0->SetFontSize(10);
>
> PdfMemDocument doc1;
> PdfFont *font1 = doc1.CreateFont("Helvetica");
> font1->SetFontSize(20);
>
> printf("font0 size %g\n", font0->GetFontSize());
> printf("font1 size %g\n", font1->GetFontSize());
> ```
>
> Output:
> ```
> font0 size 20
> font1 size 20
> ```
>
> What I would expect (or what happens when is font for example "Arial"):
> ```
> font0 size 10
> font1 size 20
> ```
>
> Fonts font0 and font1 are different objects but they share same m_pMetrics
> (in case of base 14 fonts) which is used for font size and other font
> settings. This is because PODOFO_Base14FontDef_FindBuiltinData is returning
> mutable pointer to static global array PODOFO_BUILTIN_FONTS.
>
> This is here probably from beginning.
>
> I am sending patch. Hopefully I did not forget something.
> PODOFO_Base14FontDef_FindBuiltinData is now returning newly allocated
> metrics object copy constructed from PODOFO_BUILTIN_FONTS[i]. I deleted
> destructor of PdfFontTypeBase14 so metrics object is properly deleted with
> font. I also changed PODOFO_BUILTIN_FONTS to const for sure that there is
> nothing else that changes it.
>
>

Attachment: patch.diff
Description: Binary data

_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to