Commit 744febe0 authored by Friedemann Kleint's avatar Friedemann Kleint

Debugger/Dumpers: Perform checks on QList/QVector<RawPointer>.

Reviewed-by: default avatarhjk <qtc-committer@nokia.com>
parent 5bee5dea
......@@ -1618,9 +1618,11 @@ static void qDumpQList(QDumper &d)
const QListData &ldata = *reinterpret_cast<const QListData*>(d.data);
const QListData::Data *pdata =
*reinterpret_cast<const QListData::Data* const*>(d.data);
int nn = ldata.size();
const int nn = ldata.size();
if (nn < 0)
return;
const bool innerTypeIsPointer = isPointerType(d.innerType);
const int n = qMin(nn, 1000);
if (nn > 0) {
if (ldata.d->begin < 0)
return;
......@@ -1631,18 +1633,19 @@ static void qDumpQList(QDumper &d)
return;
#endif
qCheckAccess(ldata.d->array);
//qCheckAccess(ldata.d->array[0]);
//qCheckAccess(ldata.d->array[nn - 1]);
// Additional checks on pointer arrays
if (innerTypeIsPointer)
for (int i = 0; i != n; ++i)
if (const void *p = ldata.d->array + i + pdata->begin)
qCheckAccess(deref(p));
}
qCheckAccess(pdata);
int n = nn;
d.putItemCount("value", n);
d.putItem("valueeditable", "false");
d.putItem("numchild", n);
if (d.dumpChildren) {
unsigned innerSize = d.extraInt[0];
bool innerTypeIsPointer = isPointerType(d.innerType);
const unsigned innerSize = d.extraInt[0];
QByteArray strippedInnerType = stripPointerType(d.innerType);
// The exact condition here is:
......@@ -1653,8 +1656,6 @@ static void qDumpQList(QDumper &d)
bool isInternal = innerSize <= int(sizeof(void*))
&& isMovableType(d.innerType);
d.putItem("internal", (int)isInternal);
if (n > 1000)
n = 1000;
d.beginChildren(n ? d.innerType : 0);
for (int i = 0; i != n; ++i) {
d.beginHash();
......@@ -2917,23 +2918,21 @@ static void qDumpQVector(QDumper &d)
int nn = v->size;
if (nn < 0)
return;
if (nn > 0) {
//qCheckAccess(&vec.front());
//qCheckAccess(&vec.back());
}
const bool innerIsPointerType = isPointerType(d.innerType);
const unsigned innersize = d.extraInt[0];
const int n = qMin(nn, 1000);
// Check pointers
if (innerIsPointerType && nn > 0)
for (int i = 0; i != n; ++i)
if (const void *p = addOffset(v, i * innersize + typeddatasize))
qCheckAccess(deref(p));
int n = nn;
d.putItemCount("value", n);
d.putItem("valueeditable", "false");
d.putItem("numchild", n);
if (d.dumpChildren) {
QByteArray strippedInnerType = stripPointerType(d.innerType);
const char *stripped =
isPointerType(d.innerType) ? strippedInnerType.data() : 0;
if (n > 1000)
n = 1000;
const char *stripped = innerIsPointerType ? strippedInnerType.data() : 0;
d.beginChildren(d.innerType);
for (int i = 0; i != n; ++i) {
d.beginHash();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment