[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/krita
From: Dmitry Kazakov <dimula73 () gmail ! com>
Date: 2010-09-25 14:59:17
Message-ID: 20100925145917.57A33AC857 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1179461 by dkazakov:
Fixed a bug in KisPerChannelFilter
We used to call data() method for a temporary QVector object. This
object would be removed right after making a deep copy of the source
vector. This led to reading free'd memory.
BUG:251624
M +2 -2 image/kis_cubic_curve.cpp
M +2 -2 image/kis_cubic_curve.h
M +2 -3 plugins/filters/colorsfilters/kis_perchannel_filter.cpp
--- trunk/koffice/krita/image/kis_cubic_curve.cpp #1179460:1179461
@@ -426,13 +426,13 @@
setPoints(points);
}
-QVector<quint16> KisCubicCurve::uint16Transfer(int size) const
+const QVector<quint16>& KisCubicCurve::uint16Transfer(int size) const
{
d->data->updateTransfer<quint16, int>(&d->data->u16Transfer, d->data->validU16Transfer, 0x0, 0xFFFF, size);
return d->data->u16Transfer;
}
-QVector<qreal> KisCubicCurve::floatTransfer(int size) const
+const QVector<qreal>& KisCubicCurve::floatTransfer(int size) const
{
d->data->updateTransfer<qreal, qreal>(&d->data->fTransfer, d->data->validFTransfer, 0.0, 1.0, size);
return d->data->fTransfer;
--- trunk/koffice/krita/image/kis_cubic_curve.h #1179460:1179461
@@ -54,8 +54,8 @@
int addPoint(const QPointF& point);
void removePoint(int idx);
public:
- QVector<quint16> uint16Transfer(int size = 256) const;
- QVector<qreal> floatTransfer(int size = 256) const;
+ const QVector<quint16>& uint16Transfer(int size = 256) const;
+ const QVector<qreal>& floatTransfer(int size = 256) const;
public:
QString toString() const;
void fromString(const QString&);
--- trunk/koffice/krita/plugins/filters/colorsfilters/kis_perchannel_filter.cpp #1179460:1179461
@@ -408,9 +408,8 @@
}
const quint16** transfers = new const quint16*[configBC->m_curves.size()];
- for(int i = 0; i < configBC->m_curves.size(); ++i)
- {
- transfers[i] = configBC->m_curves[i].uint16Transfer().data();
+ for(int i = 0; i < configBC->m_curves.size(); ++i) {
+ transfers[i] = configBC->m_curves[i].uint16Transfer().constData();
}
KoColorTransformation* t = cs->createPerChannelAdjustment(transfers);
delete transfers;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic