mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-26 00:58:37 +02: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:
parent
22c8f7fb76
commit
f434789f34
@ -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)];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user