summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2013-07-01 11:43:56 +0200
committerhjk <hjk121@nokiamail.com>2013-07-01 14:21:43 +0200
commitabc6e351b8a151926233b86105ddc200b3bd589d (patch)
tree2cf05962d6e5e2ca4961f3609c3146d2c2803755 /src
parent0292600c729886fb20ba79c1efabaf960c67ba4b (diff)
downloadqt-creator-abc6e351b8a151926233b86105ddc200b3bd589d.tar.gz
Debugger: Make QImage dumper work with release versions
This accidentally also allows non-debug Qt users to reproduce the http://blog.qt.digia.com/blog/2010/04/22/peek-and-poke-vol-3/ smiley drawing. Change-Id: Ica436f55494d012d5516ef9d00d6310f2ac2d4ee Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/imageviewer.cpp1
-rw-r--r--src/plugins/debugger/watchhandler.cpp21
2 files changed, 16 insertions, 6 deletions
diff --git a/src/plugins/debugger/imageviewer.cpp b/src/plugins/debugger/imageviewer.cpp
index db7f722e4a..26d96ad406 100644
--- a/src/plugins/debugger/imageviewer.cpp
+++ b/src/plugins/debugger/imageviewer.cpp
@@ -69,6 +69,7 @@ void ImageWidget::setImage(const QImage &image)
{
setFixedSize(image.size() + QSize(2, 2));
m_image = image;
+ update();
}
void ImageWidget::mousePressEvent(QMouseEvent *ev)
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index f400a43129..0616add575 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -1679,28 +1679,37 @@ void WatchHandler::showEditValue(const WatchData &data)
showSeparateWidget(l);
m_model->m_editHandlers[key] = l;
}
- int width = 0, height = 0, format = 0;
+ int width = 0, height = 0, nbytes = 0, format = 0;
QByteArray ba;
uchar *bits = 0;
if (data.editformat == DisplayImageData) {
ba = QByteArray::fromHex(data.editvalue);
+ QTC_ASSERT(ba.size() > 16, return);
const int *header = (int *)(ba.data());
if (!ba.at(0) && !ba.at(1)) // Check on 'width' for Python dumpers returning 4-byte swapped-data.
- swapEndian(ba.data(), ba.size());
- bits = 12 + (uchar *)(ba.data());
+ swapEndian(ba.data(), 16);
+ bits = 16 + (uchar *)(ba.data());
width = header[0];
height = header[1];
- format = header[2];
+ nbytes = header[2];
+ format = header[3];
} else if (data.editformat == DisplayImageFile) {
QTextStream ts(data.editvalue);
QString fileName;
- ts >> width >> height >> format >> fileName;
+ ts >> width >> height >> nbytes >> format >> fileName;
QFile f(fileName);
f.open(QIODevice::ReadOnly);
ba = f.readAll();
bits = (uchar*)ba.data();
+ nbytes = width * height;
}
- l->setImage(QImage(bits, width, height, QImage::Format(format)));
+ QTC_ASSERT(0 < width && width < 10000, return);
+ QTC_ASSERT(0 < height && height < 10000, return);
+ QTC_ASSERT(0 < nbytes && nbytes < 10000 * 10000, return);
+ QTC_ASSERT(0 < format && format < 32, return);
+ QImage im(width, height, QImage::Format(format));
+ qMemCopy(im.bits(), bits, nbytes);
+ l->setImage(im);
showSeparateWidget(l);
}
break;