mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-12-19 10:33:40 +08:00
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.
This commit is contained in:
committed by
Sam Lantinga
parent
5fb5586233
commit
5f5abb6805
@@ -662,7 +662,7 @@ extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf,
|
|||||||
size_t * outbytesleft);
|
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.
|
* string that must be freed with SDL_free() or NULL on error.
|
||||||
*
|
*
|
||||||
* \since This function is available since SDL 3.0.0.
|
* \since This function is available since SDL 3.0.0.
|
||||||
|
|||||||
@@ -808,7 +808,7 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
stringsize = inbytesleft > 4 ? inbytesleft : 4;
|
stringsize = inbytesleft > 4 ? inbytesleft : 4;
|
||||||
string = (char *)SDL_malloc(stringsize);
|
string = (char *)SDL_malloc(stringsize + 1);
|
||||||
if (string == NULL) {
|
if (string == NULL) {
|
||||||
SDL_iconv_close(cd);
|
SDL_iconv_close(cd);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -825,7 +825,7 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
|
|||||||
{
|
{
|
||||||
char *oldstring = string;
|
char *oldstring = string;
|
||||||
stringsize *= 2;
|
stringsize *= 2;
|
||||||
string = (char *)SDL_realloc(string, stringsize);
|
string = (char *)SDL_realloc(string, stringsize + 1);
|
||||||
if (string == NULL) {
|
if (string == NULL) {
|
||||||
SDL_free(oldstring);
|
SDL_free(oldstring);
|
||||||
SDL_iconv_close(cd);
|
SDL_iconv_close(cd);
|
||||||
@@ -851,6 +851,7 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*outbuf = '\0';
|
||||||
SDL_iconv_close(cd);
|
SDL_iconv_close(cd);
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
|
|||||||
Reference in New Issue
Block a user