diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c index ae9abe2c61..e5a51f6562 100644 --- a/src/stdlib/SDL_iconv.c +++ b/src/stdlib/SDL_iconv.c @@ -801,15 +801,15 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb return NULL; } - stringsize = inbytesleft > 4 ? inbytesleft : 4; - string = (char *)SDL_malloc(stringsize + 1); + stringsize = inbytesleft; + string = (char *)SDL_malloc(stringsize + sizeof(Uint32)); if (string == NULL) { SDL_iconv_close(cd); return NULL; } outbuf = string; outbytesleft = stringsize; - SDL_memset(outbuf, 0, 4); + SDL_memset(outbuf, 0, sizeof(Uint32)); while (inbytesleft > 0) { const size_t oldinbytesleft = inbytesleft; @@ -819,7 +819,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 + 1); + string = (char *)SDL_realloc(string, stringsize + sizeof(Uint32)); if (string == NULL) { SDL_free(oldstring); SDL_iconv_close(cd); @@ -827,7 +827,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb } outbuf = string + (outbuf - oldstring); outbytesleft = stringsize - (outbuf - string); - SDL_memset(outbuf, 0, 4); + SDL_memset(outbuf, 0, sizeof(Uint32)); continue; } case SDL_ICONV_EILSEQ: @@ -846,7 +846,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb break; } } - *outbuf = '\0'; + SDL_memset(outbuf, 0, sizeof(Uint32)); SDL_iconv_close(cd); return string;