Hi,

There were added two "FIXME" comments like this:

- if( rhs.m_pStream && m_pOwner )
- m_pStream = m_pOwner->CreateStream( *(rhs.m_pStream) );
+ // FIXME:
+ // Copying stream is currently broken:
+ // 1) PdfVecObjects::CreateStream( const PdfStream & ) is broken as it
just returns NULL
+ // 2) Stream should be copyable also when m_pOwner is NULL (which is the
case for copy constructor)
+ //if( rhs.m_pStream && m_pOwner )
+ // m_pStream = m_pOwner->CreateStream( *(rhs.m_pStream) );

Does this fix Introduce some new breakage or was such situation also before?


On Mon, Oct 28, 2019 at 11:22 PM Francesco Pretto <cez...@gmail.com> wrote:

> Dear Dominik, Matthew, Zyx, and all PoDoFo develpers,
>
> I kindly ask some of you to review this work as I consider it
> important for the future of PoDoFo. It has been extensively tested for
> almost one year with important number of automatic test cases (100+)
> by very different users. High quality standards have been followed
> while designing/developing it and I haven't performed a single
> modification on this feature/rework after the last iteration so I
> still consider it robust enough to be merged as is, if the new
> suggested API is accepted. Also I can take care of the merge into
> trunk if there's positive feedback about. So far it still applies cleanly
> with just a minimal conflict with a recent bug fix.
>
> Regards,
> Francesco
>
>
>
> On Wed, 15 May 2019 at 18:22, Francesco Pretto <cez...@gmail.com> wrote:
> >
> > Hello,
> >
> > a branch[1] has been created to add automatic ownership handling
> > to PdfObject. The issue with current handling of PdfObject ownership
> > is that it's inconsistent and hacky: objects retrieved directly
> > from PdfDictionary or PdfArray won't have owner set, even if one
> > PdfObject is actually storing these containers. The hack currently
> > performed is to set the owner when retrieving objects trough
> > PdfObject::GetIndirectKey(), but this work only for dictionaries
> > (not arrays) and looks fragile as the objects inside dictionaries
> > have inconsistent state despite being part of the document hierarchy.
> >
> > The patch introduce a mechanism to maintain the ownership of PdfObject
> > automatically by:
> > - Adding PdfObject ownership to both PdfDictionary and PdfArray by
> > inheriting a common PdfOwnedDataType;
> > - Adding a proper semantics for setting owner of PdfObjects: copying
> > objects won't copy owner (it will stay NULL) and assigning objects will
> > keep current owner;
> > - Inserting an object into a PdfDctionary or a PdfArray will set the
> > ownership in the copied object recursively.
> >
> > Some convenience method are also added to PdfArray and PdfDictionaries:
> > - PdfDictionary::FindKey(key) : find objects following references,
> > same as previous PdfObject::GetIndirectKey();
> > - PdfDictionary::FindKeyParent(key): find objects following references
> > and "/Parent" references. Useful for PdfField and super classes;
> > - PdfArray::FindAt(idx) : find objects following references.
> >
> > The patch introduces some ABI changes to add some common base class
> > functionalities to PdfDictionary, PdfArray. It's also potentially API
> > breaking since PdfObject::SetOwner() is now private. Of course it's
> > possible to leave it public but I don't recommend it since owner handling
> > should be totally hidden to API user and the compilation fix
> > is just to remove the call.
> >
> > The branch applies consists of 3 commits:
> >    1) PdfArray: Removed inheritance from std::vector
> >    2) PdfObject: Introduced automatic ownership handling
> >    3) PdfFontFactory: Fix lookup Type 0 fonts with inline DescendantFonts
> >      array
> >
> > 1) Clean PdfArray from fishy inheritance from std::vector and follows
> > approach of PdfDictionary to just wrap it preserving API compatibility.
> > 2) is the core change while 3) is the first PoDoFo bug fixed taking
> > advantage of the change that allows to fix it without hacks.
> >
> > I have been tested this change for several months now. I also ran
> > the changeset against unit tests and it succeeded.
> >
> > Next steps could be:
> > - Extensively use PdfDictionary::FindKeyParent(key) in PdfField and super
> > classes to support fields hierarchies;
> > - Evaluate deprecation of PdfObject::GetIndirectKey() as same
> > functionality is now provided directly inside PdfDictionary in
> > a more consistent API.
> >
> > Attached is the class diagram of the proposed PdfOwnedDatatype and the
> > whole change as a single patch against trunk r1990.
> >
> > [1]
> https://svn.code.sf.net/p/podofo/code/podofo/branches/ObjectAutoOwnership
>
>
> _______________________________________________
> Podofo-users mailing list
> Podofo-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/podofo-users
>
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to