Browse Source

fix unsafe string handling in wxGetTranslation

0.8
s_nakamoto 15 years ago
parent
commit
9a33582204
  1. 18
      makefile.vc
  2. 2
      serialize.h
  3. 8
      util.cpp

18
makefile.vc

@ -36,7 +36,7 @@ all: bitcoin.exe
.cpp{obj}.obj: .cpp{obj}.obj:
cl $(CFLAGS) /Fo$@ %s cl $(CFLAGS) /Fo$@ %s
obj\util.obj: $(HEADERS) obj\util.obj: $(HEADERS)
@ -59,10 +59,10 @@ obj\ui.obj: $(HEADERS)
obj\uibase.obj: $(HEADERS) obj\uibase.obj: $(HEADERS)
obj\sha.obj: sha.cpp sha.h obj\sha.obj: sha.cpp sha.h
cl $(CFLAGS) /O2 /Fo$@ %s cl $(CFLAGS) /O2 /Fo$@ %s
obj\ui.res: ui.rc rc/bitcoin.ico rc/check.ico rc/send16.bmp rc/send16mask.bmp rc/send16masknoshadow.bmp rc/send20.bmp rc/send20mask.bmp rc/addressbook16.bmp rc/addressbook16mask.bmp rc/addressbook20.bmp rc/addressbook20mask.bmp obj\ui.res: ui.rc rc/bitcoin.ico rc/check.ico rc/send16.bmp rc/send16mask.bmp rc/send16masknoshadow.bmp rc/send20.bmp rc/send20mask.bmp rc/addressbook16.bmp rc/addressbook16mask.bmp rc/addressbook20.bmp rc/addressbook20mask.bmp
rc $(INCLUDEPATHS) $(WXDEFS) /Fo$@ %s rc $(INCLUDEPATHS) $(WXDEFS) /Fo$@ %s
OBJS= \ OBJS= \
obj\util.obj \ obj\util.obj \
@ -75,11 +75,11 @@ OBJS= \
obj\init.obj obj\init.obj
bitcoin.exe: $(OBJS) obj\ui.obj obj\uibase.obj obj\sha.obj obj\ui.res bitcoin.exe: $(OBJS) obj\ui.obj obj\uibase.obj obj\sha.obj obj\ui.res
link /nologo /DEBUG /SUBSYSTEM:WINDOWS /OUT:$@ $(LIBPATHS) $** $(LIBS) link /nologo /DEBUG /SUBSYSTEM:WINDOWS /OUT:$@ $(LIBPATHS) $** $(LIBS)
.cpp{obj\nogui}.obj: .cpp{obj\nogui}.obj:
cl $(CFLAGS) /DwxUSE_GUI=0 /Fo$@ %s cl $(CFLAGS) /DwxUSE_GUI=0 /Fo$@ %s
obj\nogui\util.obj: $(HEADERS) obj\nogui\util.obj: $(HEADERS)
@ -98,10 +98,10 @@ obj\nogui\rpc.obj: $(HEADERS)
obj\nogui\init.obj: $(HEADERS) obj\nogui\init.obj: $(HEADERS)
bitcoind.exe: $(OBJS:obj\=obj\nogui\) obj\sha.obj obj\ui.res bitcoind.exe: $(OBJS:obj\=obj\nogui\) obj\sha.obj obj\ui.res
link /nologo /DEBUG /OUT:$@ $(LIBPATHS) $** $(LIBS) link /nologo /DEBUG /OUT:$@ $(LIBPATHS) $** $(LIBS)
clean: clean:
-del /Q obj\* -del /Q obj\*
-del *.ilk -del *.ilk
-del *.pdb -del *.pdb

2
serialize.h

@ -20,7 +20,7 @@ class CDataStream;
class CAutoFile; class CAutoFile;
static const int VERSION = 207; static const int VERSION = 207;
static const char* pszSubVer = ".0"; static const char* pszSubVer = ".1";

8
util.cpp

@ -445,17 +445,17 @@ const char* wxGetTranslation(const char* pszEnglish)
return (*mi).second; return (*mi).second;
// wxWidgets translation // wxWidgets translation
const char* pszTranslated = wxGetTranslation(wxString(pszEnglish, wxConvUTF8)).utf8_str(); wxString strTranslated = wxGetTranslation(wxString(pszEnglish, wxConvUTF8));
// We don't cache unknown strings because caller might be passing in a // We don't cache unknown strings because caller might be passing in a
// dynamic string and we would keep allocating memory for each variation. // dynamic string and we would keep allocating memory for each variation.
if (strcmp(pszEnglish, pszTranslated) == 0) if (strcmp(pszEnglish, strTranslated.utf8_str()) == 0)
return pszEnglish; return pszEnglish;
// Add to cache, memory doesn't need to be freed. We only cache because // Add to cache, memory doesn't need to be freed. We only cache because
// we must pass back a pointer to permanently allocated memory. // we must pass back a pointer to permanently allocated memory.
char* pszCached = new char[strlen(pszTranslated)+1]; char* pszCached = new char[strlen(strTranslated.utf8_str())+1];
strcpy(pszCached, pszTranslated); strcpy(pszCached, strTranslated.utf8_str());
mapCache[pszEnglish] = pszCached; mapCache[pszEnglish] = pszCached;
return pszCached; return pszCached;
} }

Loading…
Cancel
Save