Zero-sized destination buffers when converting to UTF-8 shouldn't overflow. stable-2.0
authorRyan C. Gordon <icculus@icculus.org>
Fri, 20 Aug 2010 02:46:14 -0400
branchstable-2.0
changeset 1095 69b884a15de1
parent 1088 d19e235efe5f
child 1132 ff6943f29c3e
Zero-sized destination buffers when converting to UTF-8 shouldn't overflow. (transplanted from 12c87d886a75)
physfs.h
physfs_unicode.c
--- a/physfs.h	Wed Apr 07 12:34:31 2010 -0400
+++ b/physfs.h	Fri Aug 20 02:46:14 2010 -0400
@@ -2272,7 +2272,7 @@
  *
  * 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.
@@ -2294,7 +2294,7 @@
  *
  * 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.
@@ -2317,7 +2317,7 @@
  *
  * 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.
@@ -2343,7 +2343,7 @@
  *
  * 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.
@@ -2369,7 +2369,7 @@
  *
  * 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
--- a/physfs_unicode.c	Wed Apr 07 12:34:31 2010 -0400
+++ b/physfs_unicode.c	Fri Aug 20 02:46:14 2010 -0400
@@ -305,6 +305,7 @@
 } /* utf8fromcodepoint */
 
 #define UTF8FROMTYPE(typ, src, dst, len) \
+    if (len == 0) return; \
     len--;  \
     while (len) \
     { \