1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-26 15:23:48 +01:00

Fix crash in new binary AutoSave

Would happen when writing tags with a value whose length was greater
than 65535 due to the use of shorts.  Now uses int instead.
This commit is contained in:
Leland Lucius
2015-07-08 10:13:34 -05:00
parent 22c8f7fb76
commit f434789f34

View File

@@ -457,7 +457,7 @@ void AutoSaveFile::WriteAttr(const wxString & name, const wxString & value)
mBuffer.PutC(FT_String); mBuffer.PutC(FT_String);
WriteName(name); WriteName(name);
short len = value.Length() * sizeof(wxChar); int len = value.Length() * sizeof(wxChar);
mBuffer.Write(&len, sizeof(len)); mBuffer.Write(&len, sizeof(len));
mBuffer.Write(value.c_str(), len); mBuffer.Write(value.c_str(), len);
@@ -525,7 +525,7 @@ void AutoSaveFile::WriteData(const wxString & value)
{ {
mBuffer.PutC(FT_Data); mBuffer.PutC(FT_Data);
short len = value.Length() * sizeof(wxChar); int len = value.Length() * sizeof(wxChar);
mBuffer.Write(&len, sizeof(len)); mBuffer.Write(&len, sizeof(len));
mBuffer.Write(value.c_str(), len); mBuffer.Write(value.c_str(), len);
@@ -535,7 +535,7 @@ void AutoSaveFile::Write(const wxString & value)
{ {
mBuffer.PutC(FT_Raw); mBuffer.PutC(FT_Raw);
short len = value.Length() * sizeof(wxChar); int len = value.Length() * sizeof(wxChar);
mBuffer.Write(&len, sizeof(len)); mBuffer.Write(&len, sizeof(len));
mBuffer.Write(value.c_str(), len); mBuffer.Write(value.c_str(), len);
@@ -595,6 +595,7 @@ void AutoSaveFile::CheckSpace(wxMemoryOutputStream & os)
void AutoSaveFile::WriteName(const wxString & name) void AutoSaveFile::WriteName(const wxString & name)
{ {
wxASSERT(name.Length() * sizeof(wxChar) <= SHRT_MAX);
short len = name.Length() * sizeof(wxChar); short len = name.Length() * sizeof(wxChar);
short id; short id;
@@ -771,7 +772,7 @@ bool AutoSaveFile::Decode(const wxString & fileName)
case FT_String: case FT_String:
{ {
short len; int len;
in.Read(&id, sizeof(id)); in.Read(&id, sizeof(id));
in.Read(&len, sizeof(len)); in.Read(&len, sizeof(len));
@@ -866,7 +867,7 @@ bool AutoSaveFile::Decode(const wxString & fileName)
case FT_Data: case FT_Data:
{ {
short len; int len;
in.Read(&len, sizeof(len)); in.Read(&len, sizeof(len));
wxChar *val = new wxChar[len / sizeof(wxChar)]; wxChar *val = new wxChar[len / sizeof(wxChar)];
@@ -879,7 +880,7 @@ bool AutoSaveFile::Decode(const wxString & fileName)
case FT_Raw: case FT_Raw:
{ {
short len; int len;
in.Read(&len, sizeof(len)); in.Read(&len, sizeof(len));
wxChar *val = new wxChar[len / sizeof(wxChar)]; wxChar *val = new wxChar[len / sizeof(wxChar)];