What follows is a list of currently known issues with the StdLib package.
Please see the separate file "Fixes.txt" for a list of issues that have been fixed.

  Status Key:
    Open          Problem is unresolved and final disposition unknown.
    Verified      Problem has been reproduced.
    Understood    Root cause of problem is understood.
    Document      Problem is to be fixed through improved documentation.
    Fixed         Problem has been resolved and changes committed.

SocketLib
=============
ID      Category                           TOOLs       Reported       Status
----  ------------------------            --------  --------------  -----------
 13:  EFIAPI usage                                      2013-01-15   Understood
      Mismatch between functions declared EFIAPI but not defined EFIAPI.

 14:  EFIAPI usage                                      2013-01-15   Understood
      Function pointer type PFN_NET_CONFIGURE is NOT defined as EFIAPI but is
      used to point to EFIAPI functions.  This causes conflicts and results in
      improper operation.

 15:  Build Error                                       2013-09-20   Open
      Predicates in ns_addr.c and res_mkupdate.c need to also include explicit
      comparisons if an assignment side-effect is used.  Otherwise a warning
      will be generated which is promoted to a fatal error.

StdLib Issues
=============
ID      Category                           TOOLs       Reported       Status
----  ------------------------            --------  --------------  -----------
  3:  Usage Clarification                                     2012   Document
      Clarify that the current StdLib may not be used for developing drivers.

  5:  Error message Quality during execution                  2012   Verified
      Performing filesystem operations when a filesystem driver has not been
      linked into the application results in hangs or error messages that are
      misleading or unclear as to the cause.

  6:  Application error return                                2012   Verified
      On error, applications will sometimes return large positive numbers.

  9:  chdir/cwd not in EFI Shell                              2012   Understood
      The chdir and getcwd functions only work if one is using the UEFI Shell.

 10:  No current volume/directory at app. startup.            2012   Understood
      If the Shell does not have a current volume or directory, file operations
      may hang or fail.

 12:  Differentiate between binary and text streams.     Aug. 2013   Understood
      Implement differentiated text streams as specified by section 7.19.2 Streams,
      of the C standard.

 16:  Build Error                                       2013-08-12   Understood
      LibC/Stdio/vsnprintf_ss.c:145: (error) Uninitialized variable: n
      _DIAGASSERT expressions not appropriate for the UEFI environment.


PosixLib
=============
ID      Category                           TOOLs       Reported       Status
----  ------------------------            --------  --------------  -----------
