Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dev: Make the use of stdio FILE robust. #622

Open
wants to merge 1 commit into
base: libpng18
Choose a base branch
from

Commits on Oct 15, 2024

  1. dev: Make the use of stdio FILE robust.

    ABI changes:
        The three API functions png_init_io, png_begin_read_from_stdio and
        png_image_write_to_stdio now require the host fread, fwrite and
        fflush functions where appropriate in addition to the host FILE.
    
        Internally libpng uses the provided functions for all operations on
        the FILE; it does not use the implementations available when libpng
        was built.
    
    API changes:
        The original APIs of the above three functions are now implemented
        as function-like macros which automatically pass the correct ISO-C
        functions.  This ensures that there are no net API changes and that
        the correct arguments are passed.
    
    Build changes:
        The read stdio functionality is now dependent on SEQUENTIAL_READ
        rather than READ.  This is done for clarity; the progressive read
        mechanism does not use FILE.
    
    Internal changes:
        png_struct::io_ptr has been supplemented with png_struct::stdio_ptr
        used when stdio is used directly by libpng for IO as opposed to
        caller-provided callbacks.
    
        Error checking has been added to detect mismatched use of the stdio
        (png_init_io etc) API with the callback (png_set_read_fn,
        png_set_write_fn APIs.)  Changing from one API to the other
        mid-stream should work but has not been tested and is not currently
        a documented option.
    
    The changes address an issue which is frequently encountered on
    Microsoft Windows systems because Windows NT DLLs each have their own
    ISO-C hosted environment.  This means that a FILE from one DLL cannot be
    used safely from a different DLL unless all access to the object is done
    using functionality from the creating DLL.  The problem is more general;
    passing objects across DLL or other boundaries is frequently supported
    but direct access to those objects' internal structure in the receiving
    environment is not safe.  Other such uses were address early on in the
    development of libpng, this addresses the main, almost certainly, sole
    remaining issue.
    
    The idea of adding additional function pointers png_init_io was
    suggested by github.com user pp383 in pull request pnggroup#208.
    
    Signed-off-by: John Bowler <[email protected]>
    jbowler committed Oct 15, 2024
    Configuration menu
    Copy the full SHA
    912c645 View commit details
    Browse the repository at this point in the history