SDL: Always allocate zt in output of SDL_iconv_string() (2660d)

From 2660da6f5c845a19b898ae67dfad821baa346046 Mon Sep 17 00:00:00 2001
From: Eddy Jansson <[EMAIL REDACTED]>
Date: Tue, 28 Feb 2023 17:50:26 +0100
Subject: [PATCH] Always allocate zt in output of SDL_iconv_string()

Before this, the function could not be used on buffers,
as it would not account for the zero-termination unless
it was included in the input.

(cherry picked from commit 5f5abb680523e1adedd3fca2a8e252db01fc1c52)
---
 include/SDL_stdinc.h   | 2 +-
 src/stdlib/SDL_iconv.c | 5 +++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/include/SDL_stdinc.h b/include/SDL_stdinc.h
index f46a728f6f1b..182ed86ee371 100644
--- a/include/SDL_stdinc.h
+++ b/include/SDL_stdinc.h
@@ -688,7 +688,7 @@ extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf,
                                          size_t * outbytesleft);
 
 /**
- * This function converts a string between encodings in one pass, returning a
+ * This function converts a buffer or string between encodings in one pass, returning a
  * string that must be freed with SDL_free() or NULL on error.
  *
  * \since This function is available since SDL 2.0.0.
diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c
index a42f2639d3a8..9448afcf5856 100644
--- a/src/stdlib/SDL_iconv.c
+++ b/src/stdlib/SDL_iconv.c
@@ -811,7 +811,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
     }
 
     stringsize = inbytesleft > 4 ? inbytesleft : 4;
-    string = (char *)SDL_malloc(stringsize);
+    string = (char *)SDL_malloc(stringsize + 1);
     if (string == NULL) {
         SDL_iconv_close(cd);
         return NULL;
@@ -828,7 +828,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
         {
             char *oldstring = string;
             stringsize *= 2;
-            string = (char *)SDL_realloc(string, stringsize);
+            string = (char *)SDL_realloc(string, stringsize + 1);
             if (string == NULL) {
                 SDL_free(oldstring);
                 SDL_iconv_close(cd);
@@ -855,6 +855,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
             break;
         }
     }
+    *outbuf = '\0';
     SDL_iconv_close(cd);
 
     return string;