KIO::PreviewJob pixmaps + Qt4.5 crashes
aleixpol at kde.org
Sun Mar 15 13:16:18 GMT 2009
On Fri, Mar 13, 2009 at 8:57 PM, Aleix Pol <aleixpol at kde.org> wrote:
> On Fri, Mar 13, 2009 at 5:51 PM, Hans Meine <hans_meine at gmx.net> wrote:
>> On Friday 13 March 2009 15:14:33 Aleix Pol wrote:
>> > > #3) The other response is likely right. I bet the following accesses
>> > > deleted memory with the Raster engine:
>> > >
>> > > const int w = 16, h = 16;
>> > > QRgb* data = new QRgb[w*h*4];
>> > > std::memset(data, 0, w*h*4);
>> > > QImage* i = new QImage(data, w, h,
>> > > QPixmap p = QPixmap::fromImage(*i);
>> > > delete i;
>> > > //Do stuff with p here
>> > >
>> > > There seems to be no deep copy going on here (and coincidentally,
>> > > QImage::convertToFormat docs lie --- it doesn't always return a copy)
>> > Yes it is possible, but I don't know where this copy happens at all.
>> Exactly, Maskim (and I) pointed out that there *is* no copy.
>> AFAICS, it would be enough to detach the QImage, alas detach() is
>> How about
>> QImage* i = new QImage((const QRgb *)data, w, h,
>> (void)i.bits(); // detach from data
>> if the above is the actual code?
>> BTW: It probably works with OpenGL for you, because OpenGL is another
>> client/server system, i.e. the data is copied into an OpenGL-managed
>> area (possibly even the graphics card's memory).
> Is there a way to make sure what graphicssystem is being used?
> I haven't asked for raster at any moment...
> I only want it to work :S
> Plus we should warn the user the usage of raster.
Ok, so i recompiled Qt and now it works, i suppose I had my installation
kind of messed (and this made Qt run with raster, which i don't get why).
But of course, KIO::PreviewJob is still broken with raster which, even if it
doesn't really bother me, makes me wonder what will be the bug behaviour on
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the kde-core-devel