Przeglądaj źródła

Zero-sized destination buffers when converting to UTF-8 shouldn't overflow.

Ryan C. Gordon 15 lat temu
rodzic
commit
77d16c2bed
2 zmienionych plików z 6 dodań i 5 usunięć
  1. 5 5
      src/physfs.h
  2. 1 0
      src/physfs_unicode.c

+ 5 - 5
src/physfs.h

@@ -2320,7 +2320,7 @@ PHYSFS_DECL void PHYSFS_enumerateFilesCallback(const char *dir,
  *
  * Strings that don't fit in the destination buffer will be truncated, but
  *  will always be null-terminated and never have an incomplete UTF-8
- *  sequence at the end.
+ *  sequence at the end. If the buffer length is 0, this function does nothing.
  *
  *   \param src Null-terminated source string in UCS-4 format.
  *   \param dst Buffer to store converted UTF-8 string.
@@ -2342,7 +2342,7 @@ PHYSFS_DECL void PHYSFS_utf8FromUcs4(const PHYSFS_uint32 *src, char *dst,
  *
  * Strings that don't fit in the destination buffer will be truncated, but
  *  will always be null-terminated and never have an incomplete UCS-4
- *  sequence at the end.
+ *  sequence at the end. If the buffer length is 0, this function does nothing.
  *
  *   \param src Null-terminated source string in UTF-8 format.
  *   \param dst Buffer to store converted UCS-4 string.
@@ -2365,7 +2365,7 @@ PHYSFS_DECL void PHYSFS_utf8ToUcs4(const char *src, PHYSFS_uint32 *dst,
  *
  * Strings that don't fit in the destination buffer will be truncated, but
  *  will always be null-terminated and never have an incomplete UTF-8
- *  sequence at the end.
+ *  sequence at the end. If the buffer length is 0, this function does nothing.
  *
  * Please note that UCS-2 is not UTF-16; we do not support the "surrogate"
  *  values at this time.
@@ -2391,7 +2391,7 @@ PHYSFS_DECL void PHYSFS_utf8FromUcs2(const PHYSFS_uint16 *src, char *dst,
  *
  * Strings that don't fit in the destination buffer will be truncated, but
  *  will always be null-terminated and never have an incomplete UCS-2
- *  sequence at the end.
+ *  sequence at the end. If the buffer length is 0, this function does nothing.
  *
  * Please note that UCS-2 is not UTF-16; we do not support the "surrogate"
  *  values at this time.
@@ -2417,7 +2417,7 @@ PHYSFS_DECL void PHYSFS_utf8ToUcs2(const char *src, PHYSFS_uint16 *dst,
  *
  * Strings that don't fit in the destination buffer will be truncated, but
  *  will always be null-terminated and never have an incomplete UTF-8
- *  sequence at the end.
+ *  sequence at the end. If the buffer length is 0, this function does nothing.
  *
  * Please note that we do not supply a UTF-8 to Latin1 converter, since Latin1
  *  can't express most Unicode codepoints. It's a legacy encoding; you should

+ 1 - 0
src/physfs_unicode.c

@@ -305,6 +305,7 @@ static void utf8fromcodepoint(PHYSFS_uint32 cp, char **_dst, PHYSFS_uint64 *_len
 } /* utf8fromcodepoint */
 
 #define UTF8FROMTYPE(typ, src, dst, len) \
+    if (len == 0) return; \
     len--;  \
     while (len) \
     { \