no longer attempting to unmarshall clipboard formats that aren't

known to the caller.  if the client supports more formats than
the server then the server could get a clipboard format greater
than kNumFormats.  with this change the server discards the
extra formats instead of crashing.
This commit is contained in:
crs 2002-07-23 15:34:05 +00:00
parent 8ada1e8a72
commit 57b64f1fe7
2 changed files with 9 additions and 5 deletions

View File

@ -146,9 +146,13 @@ CClipboard::unmarshall(const CString& data, Time time)
UInt32 size = readUInt32(index); UInt32 size = readUInt32(index);
index += 4; index += 4;
// save the data // save the data if it's a known format. if either the client
m_added[format] = true; // or server supports more clipboard formats than the other
m_data[format] = CString(index, size); // then one of them will get a format >= kNumFormats here.
if (format < static_cast<UInt32>(IClipboard::kNumFormats)) {
m_added[format] = true;
m_data[format] = CString(index, size);
}
index += size; index += size;
} }

View File

@ -17,9 +17,9 @@ public:
// data set via add() and retrieved via get() is in one of // data set via add() and retrieved via get() is in one of
// these formats. platform dependent clipboard subclasses // these formats. platform dependent clipboard subclasses
// can and should present any suitable formats derivable // can and should present any suitable formats derivable
// from these formats (e.g. UCS-16 encoded unicode). // from these formats (e.g. UTF-16 encoded unicode).
// //
// kText: UTF-8 encoded unicode (ISO-10646), newline is LF // kText: UTF-8 encoded unicode (ISO-10646), newline is LF.
enum EFormat { kText, kNumFormats }; enum EFormat { kText, kNumFormats };
// manipulators // manipulators