diff -rupN wrapper_3.5.25_src/src/c/logger.c wrapper_3.5.25_src_patched/src/c/logger.c --- wrapper_3.5.25_src/src/c/logger.c 2014-06-13 06:32:21.000000000 +0200 +++ wrapper_3.5.25_src_patched/src/c/logger.c 2014-09-11 15:21:51.616818788 +0200 @@ -2366,10 +2366,10 @@ int getLastError() { return GetLastError(); } #else +TCHAR* lastErrBuf = NULL; TCHAR* getLastErrorText() { #ifdef UNICODE char* c; - TCHAR* t; size_t req; c = strerror(errno); req = mbstowcs(NULL, c, MBSTOWCS_QUERY_LENGTH); @@ -2377,14 +2377,15 @@ TCHAR* getLastErrorText() { invalidMultiByteSequence(TEXT("GLET"), 1); return NULL; } - t = malloc(sizeof(TCHAR) * (req + 1)); - if (!t) { + if(lastErrBuf) free(lastErrBuf); + lastErrBuf = malloc(sizeof(TCHAR) * (req + 1)); + if (!lastErrBuf) { _tprintf(TEXT("Out of memory in logging code (%s)\n"), TEXT("GLET1")); return NULL; } - mbstowcs(t, c, req + 1); - t[req] = TEXT('\0'); /* Avoid bufferflows caused by badly encoded characters. */ - return t; + mbstowcs(lastErrBuf, c, req + 1); + lastErrBuf[req] = TEXT('\0'); /* Avoid bufferflows caused by badly encoded characters. */ + return lastErrBuf; #else return strerror(errno);