• Show log

    Commit

  • Hash : 5d27b10f
    Author : Oleg Oshmyan
    Date : 2021-07-13T10:59:32

    [base] Fix `FT_Open_Face`'s handling of user-supplied streams. This was already true (though undocumented) most of the time, but not if `FT_NEW` inside `FT_Stream_New` failed or if the `FT_OPEN_XXX` flags were bad. Normally, `FT_Open_Face` calls `FT_Stream_New`, which returns the user-supplied stream unchanged, and in case of any subsequent error in `FT_Open_Face`, the stream is closed via `FT_Stream_Free`. Up to now, however, `FT_Stream_New` allocates a new stream even if it is already given one by the user. If this allocation fails, the user-supplied stream is not returned to `FT_Open_Face` and never closed. Moreover, the user cannot detect this situation: all they see is that `FT_Open_Face` returns `FT_Err_Out_Of_Memory`, but that can also happen after a different allocation fails within the main body of `FT_Open_Face`, when the user's stream has already been closed by `FT_Open_Face`. It is plausible that the user stream's `close` method frees memory allocated for the stream object itself, so the user cannot defensively free it upon `FT_Open_Face` failure lest it ends up doubly freed. All in all, this ends up leaking the memory/resources used by user's stream. Furthermore, `FT_Stream_New` simply returns an error if the `FT_OPEN_XXX` flags are unsupported, which can mean either an invalid combination of flags or a perfectly innocent `FT_OPEN_STREAM` on a FreeType build that lacks stream support. With this patch, the user-supplied stream is closed even in these cases, so the user can be sure that if `FT_Open_Face` failed, the stream is definitely closed. * src/base/ftobjs.c (FT_Stream_New): Don't allocate a buffer unnecessarily. Move error-handling code to make the control flow more obvious. Close user-supplied stream if the flags are unsupported. `FT_Stream_Open` always sets `pathname.pointer`, so remove the redundant (re)assignment. None of the `FT_Stream_Open...` functions uses `stream->memory`, so keep just one assignment at the end, shared among all possible control flow paths. ('Unsupported flags' that may need a stream closure can be either an invalid combination of multiple `FT_OPEN_XXX` mode flags or a clean `FT_OPEN_STREAM` flag on a FreeType build that lacks stream support.)

  • README

  • FreeType 2.10.4
    ===============
    
    Homepage: https://www.freetype.org
    
    FreeType is a freely available software library to render fonts.
    
    It  is  written  in  C,   designed  to  be  small,  efficient,  highly
    customizable,  and portable  while capable  of producing  high-quality
    output (glyph images) of most vector and bitmap font formats.
    
    Please   read  the   `docs/CHANGES`   file,   it  contains   IMPORTANT
    INFORMATION.
    
    Read the files `docs/INSTALL*`  for installation instructions; see the
    file `docs/LICENSE.TXT` for the available licenses.
    
    For using FreeType's git repository  instead of a distribution bundle,
    please read file `README.git`.
    
    The FreeType 2 API reference is located in directory `docs/reference`;
    use the file  `index.html` as the top entry point.   [Please note that
    currently  the search  function  for  locally installed  documentation
    doesn't work due to cross-site scripting issues.]
    
    Additional documentation is  available as a separate  package from our
    sites.  Go to
    
      https://download.savannah.gnu.org/releases/freetype/
    
    and download one of the following files.
    
      freetype-doc-2.10.4.tar.xz
      freetype-doc-2.10.4.tar.gz
      ftdoc2104.zip
    
    To view the documentation online, go to
    
      https://www.freetype.org/freetype2/docs/
    
    
    Mailing Lists
    -------------
    
    The preferred  way of  communication with the  FreeType team  is using
    e-mail lists.
    
      general use and discussion:      freetype@nongnu.org
      engine internals, porting, etc.: freetype-devel@nongnu.org
      announcements:                   freetype-announce@nongnu.org
      git repository tracker:          freetype-commit@nongnu.org
    
    The lists are moderated; see
    
      https://www.freetype.org/contact.html
    
    how to subscribe.
    
    
    Bugs
    ----
    
    Please submit bug reports at
    
      https://gitlab.freedesktop.org/freetype/freetype/-/issues
    
    Alternatively,    you    might    report    bugs    by    e-mail    to
    `freetype-devel@nongnu.org`.    Don't  forget   to  send   a  detailed
    explanation of the problem -- there  is nothing worse than receiving a
    terse message that only says 'it doesn't work'.
    
    
    Patches
    -------
    
    For larger changes please provide merge requests at
    
      https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests
    
    Alternatively, you can send patches to the `freetype-devel@nongnu.org`
    mailing list  -- and thank you  in advance for your  work on improving
    FreeType!
    
    Details on the process can be found here:
    
      https://www.freetype.org/developer.html#patches
    
    
    Enjoy!
    
    
      The FreeType Team
    
    ----------------------------------------------------------------------
    
    Copyright (C) 2006-2021 by
    David Turner, Robert Wilhelm, and Werner Lemberg.
    
    This  file is  part of  the FreeType  project, and  may only  be used,
    modified,  and distributed  under the  terms of  the  FreeType project
    license,  LICENSE.TXT.  By  continuing to  use, modify,  or distribute
    this file you  indicate that you have read  the license and understand
    and accept it fully.
    
    
    --- end of README ---