Fix undefined behaviour in TQClipboardWatcher::format

This relates to Bug 1820
pull/2/head
Timothy Pearson 10 years ago
parent 3a40adfa91
commit dc8f537180

@ -166,7 +166,7 @@ public:
QByteArray getDataInFormat(Atom fmtatom) const; QByteArray getDataInFormat(Atom fmtatom) const;
Atom atom; Atom atom;
QValueList<const char *> formatList; mutable QValueList<const char *> formatList;
}; };
@ -1304,7 +1304,6 @@ const char* QClipboardWatcher::format( int n ) const
// server round trips... // server round trips...
static Atom xa_targets = *qt_xdnd_str_to_atom( "TARGETS" ); static Atom xa_targets = *qt_xdnd_str_to_atom( "TARGETS" );
QClipboardWatcher *that = (QClipboardWatcher *) this;
QByteArray ba = getDataInFormat(xa_targets); QByteArray ba = getDataInFormat(xa_targets);
if (ba.size() > 0) { if (ba.size() > 0) {
Atom *unsorted_target = (Atom *) ba.data(); Atom *unsorted_target = (Atom *) ba.data();
@ -1337,21 +1336,21 @@ const char* QClipboardWatcher::format( int n ) const
VQDEBUG(" format: %s", qt_xdnd_atom_to_str(target[i])); VQDEBUG(" format: %s", qt_xdnd_atom_to_str(target[i]));
if ( target[i] == XA_PIXMAP ) if ( target[i] == XA_PIXMAP )
that->formatList.append("image/ppm"); formatList.append("image/ppm");
else if ( target[i] == XA_STRING ) else if ( target[i] == XA_STRING )
that->formatList.append( "text/plain;charset=ISO-8859-1" ); formatList.append( "text/plain;charset=ISO-8859-1" );
else if ( target[i] == qt_utf8_string ) else if ( target[i] == qt_utf8_string )
that->formatList.append( "text/plain;charset=UTF-8" ); formatList.append( "text/plain;charset=UTF-8" );
else if ( target[i] == xa_text || else if ( target[i] == xa_text ||
target[i] == xa_compound_text ) target[i] == xa_compound_text )
that->formatList.append( "text/plain" ); formatList.append( "text/plain" );
else else
that->formatList.append(qt_xdnd_atom_to_str(target[i])); formatList.append(qt_xdnd_atom_to_str(target[i]));
} }
delete []target; delete []target;
QDEBUG("QClipboardWatcher::format: %d formats available", QDEBUG("QClipboardWatcher::format: %d formats available",
int(that->formatList.count())); int(formatList.count()));
} }
} }

@ -139,8 +139,9 @@ bool QMimeSource::provides(const char* mimeType) const
{ {
const char* fmt; const char* fmt;
for (int i=0; (fmt = format(i)); i++) { for (int i=0; (fmt = format(i)); i++) {
if ( !qstricmp(mimeType,fmt) ) if ( !qstricmp(mimeType,fmt) ) {
return TRUE; return TRUE;
}
} }
return FALSE; return FALSE;
} }

Loading…
Cancel
Save