å°ãåã«ãç¡æã®ã°ã©ãã£ã«ã«ãšãã£ã¿ãŒKrita 4.0ã®æ°ããããŒãžã§ã³ããªãªãŒã¹ãããŸããã PVS-Studioã䜿çšããŠãã®ãããžã§ã¯ãã確èªãããšããæ¥ãŸããã
ã¯ããã«
éçºè
ã2015幎ã«
Krita 2.9.2ã®ããŒãžã§ã³ã§ãã§ã«PVS-Studioã䜿çšãã
ããã§ ãšã©ãŒãæ£åžžã«ä¿®æ£ããããšã¯æ³šç®ã«å€ããŸãã ãã ããæããã«ãã¢ãã©ã€ã¶ãŒã¯äœ¿çšãããŠããŸããã éçºè
ãåŒãç¶ãPVS-Studioã䜿çšããå Žåããã®èšäºã§èª¬æãããšã©ãŒã¯ãªãªãŒã¹ã«å«ãŸããªãããããã¹ãŠã®èšäºã§å®æçãªãã§ãã¯ãéèŠã§ãããšèšããŸãã
圹ã«ç«ããªãç¯å²ããŒã¹
PVS-StudioèŠåïŒ V714倿°è¡ã¯åç
§ã«ãã£ãŠforeachã«ãŒãã«æž¡ãããŸãããããã®å€ã¯ã«ãŒãå
ã§å€æŽãããŸãã kis_algebra_2d.cpp 532
DecomposedMatix::DecomposedMatix(const QTransform &t0) { .... if (!qFuzzyCompare(t.m33(), 1.0)) { const qreal invM33 = 1.0 / t.m33(); for (auto row : rows) {
ãã®äŸã§ã¯ãããã°ã©ããŒã¯æããã«ã
è¡ã³ã³ãããŒã®åèŠçŽ ã«
invM33ãæããããšãæãã§ããŸããããããã¯èµ·ãããŸããã ã«ãŒãã®åå埩ã§ã
rowãšããååã®æ°ãã倿°ãäœæããããã®åŸåçŽã«ç Žæ£ãããŸãã ãšã©ãŒãä¿®æ£ããã«ã¯ãã³ã³ããã«ä¿åãããŠããèŠçŽ ãžã®ãªã³ã¯ãäœæããå¿
èŠããããŸãã
for (auto &row : rows) { row *= invM33; }
ééã£ãæ¡ä»¶
PVS-Studio èŠå ïŒ V547åŒ 'j == 0'ã¯åžžã«falseã§ãã KoColorSpace.cpp 218
QPolygonF KoColorSpace::estimatedTRCXYY() const { .... for (int j = 5; j>0; j--) { channelValuesF.fill(0.0); channelValuesF[i] = ((max / 4)*(5 - j)); if (colorModelId().id() != "XYZA") { fromNormalisedChannelsValue(data, channelValuesF); convertPixelsTo(....); xyzColorSpace->normalisedChannelsValue(....); } if (j == 0) {
ããã°ã©ã ã¯ãæ¡ä»¶
j == 0ã§ãããã¯ã«å
¥ãããšã¯ãããŸããããã®æ¡ä»¶ã¯ãäžèšã®
forã«ãŒãã§å¶é
j> 0ã課ããããŠãã
ãã ãåžžã«falseã§ãã
ããã§ãã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V547åŒ 'x <0'ã¯åžžã«falseã§ãã kis_selection_filters.cpp 334
- V547åŒ 'y <0'ã¯åžžã«falseã§ãã kis_selection_filters.cpp 342
PVS-StudioèŠåïŒ V560æ¡ä»¶åŒã®äžéšã¯åžžã«çã§ãã KoTextLayoutArea.cpp 1622
qreal KoTextLayoutArea::addLine(QTextLine &line, FrameIterator *cursor, KoTextBlockData &blockData) { if (!d->documentLayout->changeTracker() || !d->documentLayout->changeTracker()->displayChanges()
ããèŠããšããã®è€éãªæ¡ä»¶ã®äžã«ãã©ãŒã ã®ãã§ãã¯ãããããšã«æ°ä»ãã§ããã
ïŒïŒA || aïŒ ïŒ
d->documentLayout->changeTracker()->displayChanges() || !d->documentLayout->changeTracker()->displayChanges()
ãã®ãããªæ¡ä»¶ã¯åžžã«çã§ãããã¢ãã©ã€ã¶ãŒãå ±åããããã«ããã®å€§ããªãã§ãã¯å
šäœãç¡æå³ã«ãªãã®ã¯ãã®ããã§ãã
PVS-Studioã® èŠå ïŒ V547åŒ 'n == 128'ã¯åžžã«falseã§ãã compression.cpp 110
PVS-Studio èŠå ïŒ V547åŒ 'n> 128'ã¯åžžã«falseã§ãã compression.cpp 112
quint32 decode_packbits(const char *src, char* dst, quint16 packed_len, quint32 unpacked_len) { qint32 n; .... while (unpack_left > 0 && pack_left > 0) { n = *src; src++; pack_left--; if (n == 128)
ãã®äŸã§ã¯ã
srcãã€ã³ã¿ãŒãéåç
§ããŠååŸãã
const charåã®å€ã
qint32åã®å€æ°
nã«æžã蟌ãŸããããã倿°
nã®æå¹ãªå€ã®ç¯å²
ã¯æ¬¡ã®ãšãã
ã§ã ã[-128; 127]ã æ¬¡ã«ã倿°
nãæ°å€128ãšæ¯èŒãããŸã
ã ããã®ãã§ãã¯ã®çµæãåžžã«
falseã§ããããšã¯æããã§ãã
泚ïŒãããžã§ã¯ãã¯
-funsigned-charãªãã§ãã«ããããŸãã
PVS-StudioèŠåïŒ V590 'state ==ïŒ-3ïŒã®æ€æ»ãæ€èšããŠãã ãã|| stateïŒ= 0 'åŒã 衚çŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã psd_pixel_utils.cpp 335
psd_status psd_unzip_without_prediction(psd_uchar *src_buf, psd_int src_len, psd_uchar *dst_buf, psd_int dst_len) { do { state = inflate(&stream, Z_PARTIAL_FLUSH); if(state == Z_STREAM_END) break; if(state == Z_DATA_ERROR || state != Z_OK)
ããã§ã¯ã2çªç®ã®æ¡ä»¶ãããŸãã«ãè³¢æã§ããã æ£ãããªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãããšä»®å®ããŸãã
do { state = inflate(&stream, Z_PARTIAL_FLUSH); if(state != Z_OK) break; } while (stream.avail_out > 0);
PVS-StudioèŠåïŒ V547åŒã¯åžžã«falseã§ãã SvgTextEditor.cpp 472
void SvgTextEditor::setTextWeightDemi() { if (m_textEditorWidget.richTextEdit->textCursor() .charFormat().fontWeight() > QFont::Normal && m_textEditorWidget.richTextEdit->textCursor() .charFormat().fontWeight() < QFont::Normal) {
ã¢ãã©ã€ã¶ãŒã¯ããã©ãŒã
ïŒa> b && a <bïŒã®æ¡ä»¶ãæ€åºããŸããããããã¯æããã«åœã§ãã èè
ãæ£ç¢ºã«äœãæžãããã£ãã®ããèšãã®ã¯éæ¹ã«æ®ããŠããŸããããã®ã³ãŒãã¯ééããªãééãã§ãããä¿®æ£ããå¿
èŠããããŸãã
ãŸã¶ã
PVS-StudioèŠåïŒ V547åŒã¯åžžã«çã§ãã ããã§ã¯ãããããã&&ãæŒç®åã䜿çšããå¿
èŠããããŸãã KoResourceItemChooser.cpp 408
void KoResourceItemChooser::updatePreview(KoResource *resource) { .... if (image.format() != QImage::Format_RGB32 ||
ããã°ã©ããŒããã¹ãç¯ãã
&&æŒç®åã®ä»£ããã«
||æŒç®åãæžãã ã圌ã®ç¶æ
ã®ãã¹ãŠãç¡æå³ã«ãªã£ãããã æ¬¡ã®åœ¢åŒã®æ¡ä»¶ã倿ããŸããïŒ
aïŒ= const_1 || aïŒ= const_2ãããã¯åžžã«çã§ãã
PVS-StudioèŠåïŒ V547åŒã¯åžžã«çã§ãã ããã§ã¯ãããããã&&ãæŒç®åã䜿çšããå¿
èŠããããŸãã KoSvgTextShapeMarkupConverter.cpp 1000
QString KoSvgTextShapeMarkupConverter::style(....) { .... if (format.underlineStyle() != QTextCharFormat::NoUnderline || format.underlineStyle() != QTextCharFormat::SpellCheckUnderline) { .... } .... }
ã±ãŒã¹ã¯åã®ã±ãŒã¹ã«äŒŒãŠããŸãïŒåœŒãã¯è«çæŒç®åãæ··ããŠ
&&ã®ä»£ããã«
||ãæžããŸãã ã
PVS-StudioèŠåïŒ V501 ã||ãã®å·ŠåŽãšå³åŽã«åäžã®ãµãåŒãã»ã³ãµãŒïŒFUZZY_PER_DABãtrueïŒãããããŸã æŒç®åã kis_pressure_size_option.cpp 43
void KisPressureSizeOption::lodLimitations(....) const { if (sensor(FUZZY_PER_DAB, true) || sensor(FUZZY_PER_DAB, true)) { l->limitations << KoID("size-fade", i18nc("....")); } if (sensor(FADE, true)) { l->blockers << KoID("....")); } }
ã¢ãã©ã€ã¶ãŒã¯ããªãã¬ãŒã¿ãŒã®å·Šå³
||ã®ç¶æ³ãæ€åºããŸãã åãåŒãèŠã€ãããŸããã
DynamicSensorTypeåæãèŠããšïŒ
enum DynamicSensorType { FUZZY_PER_DAB, FUZZY_PER_STROKE, SPEED, FADE, .... UNKNOWN = 255 };
å³åŽã«ããããã
FUZZY_PER_DABã§ã¯ãªã
FUZZY_PER_STROKEãæžããããšæã£ãŠããããšãæããã«ãªããŸãã
éçã¢ãã©ã€ã¶ãŒã¯ããã®ãããªãšã©ãŒãèŠã€ããã®ã«é©ããŠããŸãããç¹ã«å€æ°ã®å€æŽã衚瀺ããå¿
èŠãããå Žåã¯ãã³ãŒãã¬ãã¥ãŒãèŠèœãšããã¡ã§ãã
ã³ããŒè²Œãä»ããšã©ãŒ

PVS-Studio èŠå ïŒ V583 ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«åãå€ãè¿ããŸãïŒd-> paragraphStylesDotXmlStyles.valuesïŒïŒã KoTextSharedLoadingData.cpp 594
QList<KoParagraphStyle *> KoTextSharedLoadingData::paragraphStyles(bool stylesDotXml) const { return stylesDotXml ? d->paragraphStylesDotXmlStyles.values() : d->paragraphStylesDotXmlStyles.values();
ããã§ã¯ããããããäžé
æŒç®åã®
thenãããã¯ãã³ããŒããåŒã³åºãããã¡ãœããã®ååã倿Žããã®ãå¿ãããããæ¡ä»¶ã«é¢ä¿ãªããåžžã«åäžã®å€ãè¿ãããŸãã
åã®æ¹æ³ã«ãã倿ïŒ
KoParagraphStyle * KoTextSharedLoadingData::paragraphStyle(const QString &name, bool stylesDotXml) const { return stylesDotXml ? d->paragraphStylesDotXmlStyles.value(name) : d->paragraphContentDotXmlStyles.value(name); }
elseãããã¯ã§ã
paragraphStylesDotXmlStylesã®ä»£ããã«
paragraphContentDotXmlStylesãèšè¿°ããŸãã
èŠåPVS-StudioïŒ V583 ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«åãå€qFloorïŒaxisïŒãè¿ããŸãã kis_transform_worker.cc 456
void mirror_impl(KisPaintDeviceSP dev, qreal axis, bool isHorizontal) { .... int leftCenterPoint = qFloor(axis) < axis ? qFloor(axis) : qFloor(axis);
åã®æäœãšéåžžã«ãã䌌ãå¥ã®æäœã ããããæåã®äžé
æŒç®åã®thenãããã¯ã§ã
qFloorïŒaxisïŒã§ã¯ãªã
qCeilïŒaxisïŒãæžãããã£ãã®ããããã§ã¯äžè¬çã«æ¡ä»¶ã
äžèŠã§ãã
PVS-StudioèŠåïŒ V656倿°ãvxãããvyãã¯ãåã颿°ã®åŒã³åºããéããŠåæåãããŸãã ãããããšã©ãŒãŸãã¯æé©åãããŠããªãã³ãŒãã§ãã è¡ã確èªããŠãã ããïŒ218ã219ãKarbonSimplifyPath.cpp 219
bool KarbonSimplifyPath::isSufficentlyFlat(QPointF curve[4]) { qreal ux = 3 * curve[1].x() - 2 * curve[0].x() - curve[3].x(); qreal uy = 3 * curve[1].y() - 2 * curve[0].y() - curve[3].y(); qreal vx = 3 * curve[2].x() - 2 * curve[3].x() - curve[0].x();
ãã®ã³ãŒãã¯ããªãçãããèŠããŸããã»ãšãã©ã®å Žåã
vyã®åŒãæžããšãã«åã®è¡
ãã³ããŒãããã
xïŒïŒã®åŒã³åºãã
yïŒïŒã«å€æŽããã®ãå¿ããŠããããã§ãã ããã«ãŸã ãšã©ãŒããªãå Žåã¯ã次ã®ããã«ã³ãŒããæžãçŽãããšããå§ãããŸãã
qreal vx = 3 * curve[2].x() - 2 * curve[3].x() - curve[0].x(); qreal vy = vx;
PVS-StudioèŠåïŒ V581äºãã«äžŠãã§ãããifãã¹ããŒãã¡ã³ãã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ675ã679ãKoTableCellStyle.cpp 679
void KoTableCellStyle::loadOdfProperties( KoShapeLoadingContext &context, KoStyleStack &styleStack) { .... if (styleStack.hasProperty(KoXmlNS::style, "print-content")) { setPrintContent(styleStack.property(KoXmlNS::style, "print-content") == "true"); } if (styleStack.hasProperty(KoXmlNS::style, "repeat-content"))
åããã§ãã¯ã2åå®è¡ãããŸãã ãã®æ¹æ³ã§ã¯ãäœåãªãã®ãã³ããŒããããäœããæ··ããŸãã ãšã©ãŒããªããã°ãéè€ã³ãŒããåé€ãã䟡å€ããããŸãã
PVS-StudioèŠåïŒ V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã kis_processing_applicator.cpp 227
void KisProcessingApplicator::applyVisitorAllFrames(....) { KisLayerUtils::FrameJobs jobs; if (m_flags.testFlag(RECURSIVE)) { KisLayerUtils::updateFrameJobsRecursive(&jobs, m_node);
ã»ãšãã©ã®å Žåãããã§ã³ãŒãã
thenãããã¯ãã
elseãããã¯ã«ã³ããŒããåŒã³åºãããã¡ãœããã倿Žããã®ãå¿ããŠããŸããã ãããžã§ã¯ãã®ã³ãŒããã倿ãããšã
elseãã©ã³ãã§ã¯ããããã
KisLayerUtils :: updateFrameJobsãæžããããšæã£ãŠã
ãŸãã ã
æ¡ä»¶ã®éè€ïŒæ¡ä»¶ã®ãšã©ãŒïŒ
PVS-Studio èŠå ïŒ V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ããã§ãã¯ããŠãã ããïŒ255ã269ãKoInlineTextObjectManager.cpp 255
void KoInlineTextObjectManager::documentInformationUpdated( const QString &info, const QString &data) { if (info == "title")
ããã§ã¯ãåããã§ãã¯ã2åå®è¡ãããŸãã ããããã2çªç®ã®ã±ãŒã¹ã§ã¯ã
ãsender-titleãã®ãããªãã®ãæžãå¿
èŠããããŸããã
åæå®æ°ãæäœãããšãã®ãšã©ãŒ
PVS-StudioèŠåïŒ V768åæå®æ°ãBatchModeãã¯ããŒã«åã®å€æ°ãšããŠäœ¿çšãããŸãã KisMainWindow.cpp 811
bool KisMainWindow::openDocument(const QUrl &url, OpenFlags flags) { if (!QFile(url.toLocalFile()).exists()) { if (!flags && BatchMode) {
BatchModeã¯ãå€ã
0x2ã® OpenFlagåæ
èŠçŽ ã§ãã
enum OpenFlag { None = 0, Import = 0x1, BatchMode = 0x2, RecoveryFile = 0x4 };
ãã ãããã®äŸã§ã¯ã倿°ã§ãããã®ããã«åäœããŸãã ãã®çµæãæ¡ä»¶ã®äžéšãåžžã«çã§ããããšãããããŸããã
ãã®å Žåãäžèšã®ã³ãŒãã§ã¯ã
BatchModeã§æ£ããåäœã
ãŸã ã
if (flags & BatchMode) { newdoc->setFileBatchMode(true); }
ãããããæ¬¡ã®ãããªãã®ãæžãããã£ããšçµè«ä»ããããšãã§ããŸãã
bool KisMainWindow::openDocument(const QUrl &url, OpenFlags flags) { if (!QFile(url.toLocalFile()).exists()) { if (!(flags & BatchMode)) {
PVS-StudioèŠåïŒ V768åæå®æ° 'State_Active'ã¯ããŒã«åã®å€æ°ãšããŠäœ¿çšãããŸãã KisOpenPane.cpp 104
void paint(....) const override { QStyledItemDelegate::paint(painter, option, index); if(!(option.state & (int)(QStyle::State_Active &&
ãã®å Žåãã©ããããæŒç®åã¯æ··ä¹±ããŠããã
|ã®ä»£ããã« ãã¹ã¯å
ã§ã¯ã
&&æŒç®åã䜿çšãããŸããã ä¿®æ£ãããããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
void paint(....) const override { QStyledItemDelegate::paint(painter, option, index); if(!(option.state & (int)(QStyle::State_Active | QStyle::State_Enabled))) { .... } }
çãããåå²ãåœãŠ
PVS-StudioèŠåïŒ V519 ãå€ã倿°ã«ã¯é£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ61ã66ãkis_draggable_tool_button.cpp 66
int KisDraggableToolButton::continueDrag(const QPoint &pos) { .... if (m_orientation == Qt::Horizontal) { value = diff.x();
å€å€æ°ã«ã¯æ¡ä»¶å
ã®å€ãå²ãåœãŠãããŸããããã®åŸããã«äžæžããããŸãã ãããããäœããã®ééãããããŸãã
PVS-StudioèŠåïŒ V519 ãuf.fã倿°ã«ã¯é£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªïŒ263ã265ãlut.h 265
PVS-StudioèŠåïŒ V519 ãuf.fã倿°ã«ã¯é£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªïŒ271ã273ãlut.h 273
LutKey<float>(float min, float max, float precision) : m_min(min), m_max(max), m_precision(precision) { .... if(m_min > 0 && m_max > 0) { uf.f = m_min;
倿°
uf.fã«ã¯ãç°ãªãå€ãé£ç¶ããŠ2åå²ãåœãŠãããŸãã ããã¯çããããã®ã§ãããä»ã®å€æ°ã«å€ãå²ãåœãŠããå¯èœæ§ããããŸãã
ããããã¹ããããããŸãã
PVS-StudioèŠåïŒ V646ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ã®æ€æ»ãæ€èšããŠãã ããã ãelseãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãã SvgStyleWriter.cpp 82
void SvgStyleWriter::saveSvgBasicStyle(KoShape *shape, SvgSavingContext &context) { if (!shape->isVisible(false)) { .... } if (shape->transparency() > 0.0) {
ããã§ã
elseããŒã¯ãŒããå¿ããŠããå¯èœæ§ããã
ãŸã ã ããã§ãšã©ãŒãçºçããŠããªããŠããã¢ãã©ã€ã¶ãŒãä»ã®ããã°ã©ããŒãæ··ä¹±ãããªãããã«ãã³ãŒãã®ãã©ãŒãããã調æŽãã䟡å€ããããŸãã
åæ§ã®èŠåïŒ
- V646ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ã®æ€æ»ãæ€èšããŠãã ããã ãelseãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãã transform_stroke_strategy.cpp 166
ãã«ãã€ã³ã¿ãŒã®åé¡

PVS-StudioèŠåïŒ V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãlããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ428ã429ãkis_node_manager.cpp 428
void KisNodeManager::moveNodeAt(....) { .... KisLayer *l = qobject_cast<KisLayer*>(parent.data()); KisSelectionMaskSP selMask = l->selectionMask();
ããã§ã¯ããã€ã³ã¿ãŒ
lãæåã«éåç
§ãããæ¬¡ã«
nullptrããã§ãã¯ãããŸãã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããåŸé
ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ164ã166ãkis_gradient_chooser.cc 164
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_currentShapeããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ316ã325ãArtisticTextTool.cpp 316
- V595 nullpaintrã«å¯ŸããŠæ€èšŒãããåã«ããpainterïŒïŒããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ87ã89ãkis_grid_paintop.cpp 87
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_optionsWidgetããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ193ã202ãkis_tool_move.cc 193
- ....
PVS-StudioèŠåïŒ V1004 nullptrã«å¯ŸããŠæ€èšŒãããåŸã 'sb'ãã€ã³ã¿ãŒãå®å
šã«äœ¿çšãããŸããã§ããã è¡ã確èªããŠãã ããïŒ665ã670ãKisView.cpp 670
void KisView::slotSavingStatusMessage(const QString &text, int timeout, bool isAutoSaving) { QStatusBar *sb = statusBar(); if (sb)
ã¢ãã©ã€ã¶ãŒã¯ã
nullptrããã§ãã¯ããåŸããã®
sbãã€ã³ã¿ãŒã®äœ¿çšãå®å
šã§ãªããšèŠãªããŸãã å®éããã€ã³ã¿ãŒãnullã®å ŽåïŒãã®ãããªæ¡ä»¶ã¯äžèšã®ããã«èšè¿°ãããŠããããèš±å¯ãããŸãïŒã
sb-> isHiddenïŒïŒãåŒã³åºããããšãnullãã€ã³ã¿ãŒã®éåç
§ãçºçããå¯èœæ§ããããŸãã ä¿®æ£ãšããŠã
nullptrã®ãã§ãã¯ã2çªç®ã®æ¡ä»¶ã«è¿œå ããããäœããã®åœ¢ã§ãã®ç¶æ³ãåŠçã§ããŸãã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V1004 nullptrã«å¯ŸããŠæ€èšŒãããåŸããd-> viewManagerããã€ã³ã¿ãŒãå®å
šã«äœ¿çšãããŸããã§ããã è¡ã確èªïŒ338ã365ãKisView.cpp 365
PVS-StudioèŠåïŒ V522ãã«ãã€ã³ã¿ãŒãã¹ããããã®
éåç
§ãè¡ãããå ŽåããããŸãã kis_spriter_export.cpp 568
KisImportExportFilter::ConversionStatus KisSpriterExport::convert( KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP ) { .... SpriterSlot *slot = 0;
ãã®äŸã§ã¯ãnull
ã¹ããããã€ã³ã¿ãŒã®éåç
§ãçºçããããšãä¿èšŒãããŠããããããæªå®çŸ©ã®ããã°ã©ã ã®åäœã«ã€ãªãããŸãã
ã¡ã¢ãªãªãŒã¯
PVS-StudioèŠåïŒ V773 'svgSymbol'ãã€ã³ã¿ãŒãè§£æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã SvgParser.cpp 681
bool SvgParser::parseSymbol(const KoXmlElement &e) { .... KoSvgSymbol *svgSymbol = new KoSvgSymbol();
ãã®äŸã§ã¯ãã¡ãœãããçµäºãããšãã«ã
svgSymbolã«å²ãåœãŠãããã¡ã¢ãªãè§£æŸããã®ãå¿ããŠããŸããã ããã¯ã¡ã¢ãªãªãŒã¯ã§ãã ãããžã§ã¯ãã«ã¯å€ãã®åæ§ã®ãªãŒã¯ããããŸããããããã¯åãã¿ã€ãã§ããããããããã«ã€ããŠã¯èª¬æããŸããã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V773ãppmFlowããã€ã³ã¿ãŒãè§£æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã kis_ppm_import.cpp 249
- V773 'keyShortcut'ãã€ã³ã¿ãŒãè§£æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã kis_input_manager_p.cpp 443
- V773ãlayerRecordããã€ã³ã¿ãŒãè§£æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã psd_layer_section.cpp 109
- V773ãfilterStackããã€ã³ã¿ãŒãè§£æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã FilterEffectResource.cpp 139
- ....
æ°ããåŸã«nullptrããã§ãã¯ããŸã
PVS-StudioèŠåïŒ V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããcharStyleããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã CharacterGeneral.cpp 153
bool KoPathShape::separate(QList<KoPathShape*> & separatedPaths) { .... Q_FOREACH (KoSubpath* subpath, d->subpaths) { KoPathShape *shape = new KoPathShape(); if (! shape) continue;
èšäºã®ãã®ã»ã¯ã·ã§ã³ã¯ããã§ã«æä¹
çã«ãªã£ãŠããããã§ãã
newæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããŠããå Žåã
nullptrãžã®ãã€ã³ã¿ããã§ãã¯ããŠãæå³ããããŸããã ã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå ŽåãnewæŒç®åã¯äŸå€
std :: bad_allocïŒïŒãã¹ããŒãã
nullptrãè¿ããŸããã ãã®ã³ãŒããä¿®æ£ããã«ã¯ãäŸå€ãã³ãã©ãŒã远å ãããã
newïŒstd :: nothrowïŒã䜿çšããŸãã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããfactoryããã€ã³ã¿ãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã TestKoShapeFactory.cpp 36
- V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããparStyleããã€ã³ã¿ãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã ParagraphGeneral.cpp 199
- V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããsplineããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã multi_bspline_create.cpp 460
- V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããm_currentStrategyããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã ConnectionTool.cpp 333
- ....
ãªãã¡ã¯ã¿ãªã³ã°
PVS-StudioèŠåïŒ V728éå°ãªãã§ãã¯ãç°¡çŽ åã§ããŸãã ã||ã æŒç®åã¯å察ã®è¡šçŸãïŒnodeJugglerããšãnodeJugglerãã«å²ãŸããŠããŸãã kis_node_manager.cpp 809
if (!nodeJuggler ||
ãã®ãããªæ€èšŒã¯åçŽåã§ããŸãã
if (!nodeJuggler || (nodeJuggler->isEnded() || !nodeJuggler->canMergeAction(actionName))) { .... }
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V728éå°ãªãã§ãã¯ãç°¡çŽ åã§ããŸãã ã||ã æŒç®åã¯å察ã®åŒãïŒm_currentFilterConfigWidgetããšãm_currentFilterConfigWidgetãã«å²ãŸããŠããŸãã kis_filter_option.cpp 111
èŠåPVS-StudioïŒ V501 '&&'æŒç®åã®å·Šå³ã«åãéšååŒããããŸãïŒïŒIterator.atEndïŒïŒ&&ïŒIterator.atEndïŒïŒKoTextDebug.cpp 867
void KoTextDebug::dumpFrame(const QTextFrame *frame, QTextStream &out) { .... QTextFrame::iterator iterator = frame->begin(); for (; !iterator.atEnd() && !iterator.atEnd(); ++iterator) {
forã«ãŒãã®ç¶æ
ã§ãšã©ãŒããã§ãã¯ãã䟡å€ããããŸãã ãšã©ãŒããªãå Žåã¯ãéè€ãã§ãã¯ãåé€ããå¿
èŠããããŸãã
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V501 '&&'æŒç®åã®å·Šå³ã«åãéšååŒããããŸãïŒïŒIterator.atEndïŒïŒ&&ïŒIterator.atEndïŒïŒKoTextDebug.cpp 909
PVS-StudioèŠåïŒ V799 ãcmdã倿°ã¯ãã¡ã¢ãªãå²ãåœãŠãããåŸã¯äœ¿çšãããŸããã ãã®å€æ°ã®äœ¿çšã確èªããããšãæ€èšããŠãã ããã kis_all_filter_test.cpp 154
bool testFilter(KisFilterSP f) { .... KisTransaction * cmd = new KisTransaction(kundo2_noi18n(f->name()), dev);
ããã§ã¯ã
cmdãªããžã§ã¯ãã«ã¡ã¢ãªãå²ãåœãŠãŠè§£æŸããŸãããã䜿çšããŸããã§ããã
PVS-StudioèŠåïŒ V732åé
ãã€ãã¹æŒç®åã¯ããŒã«åã®å€ã倿ŽããŸããã ãïŒãã®äœ¿çšãæ€èšããŠãã ãã æŒç®åã kis_equalizer_slider.cpp 75
QRect KisEqualizerSlider::Private::boundingRect() const { QRect bounds = q->rect().adjusted(0, 0, -isRightmost, -1); return bounds; }
ãã®äŸã§ã¯ã
isRightmost倿°ã®åã¯
boolã§ãã åé
ãã€ãã¹ã䜿çšãããšã倿°ã¯æé»çã«
intåã«å€æãããçµæã®æ°å€ã
調æŽãããïŒïŒã¡ãœããã«æž¡ãããŸãã ãã®ãããªã³ãŒãã¯çè§£ãè€éã«ããŸãã æç€ºçã¯æé»çãããåªããŠããããããã®ã¹ãããããæ¬¡ã®ããã«æžãæãã䟡å€ããããšæããŸãã
QRect KisEqualizerSlider::Private::boundingRect() const { QRect bounds = q->rect().adjusted(0, 0, isRightmost ? -1 : 0, -1); return bounds; }
åæ§ã®ã¢ãã©ã€ã¶ãŒèŠåïŒ
- V732åé
ãã€ãã¹æŒç®åã¯ãboolåã®å€ã倿ŽããŸããã ãïŒãã®äœ¿çšãæ€èšããŠãã ãã æŒç®åã kis_equalizer_button.cpp 66
- V732åé
ãã€ãã¹æŒç®åã¯ãboolåã®å€ã倿ŽããŸããã ãïŒãã®äœ¿çšãæ€èšããŠãã ãã æŒç®åã kis_duplicateop.cpp 222
ãããã«
çµè«ãšããŠãKritaã®éçºè
ã«é£çµ¡ããç¡æã§ã¢ãã©ã€ã¶ãŒã®
䜿çšãåéããããææ¡ããããšæããŸãã
éçºè
ãååPVS-Studioã䜿çšããŠä»¥æ¥ãLinuxãšMacOSã®ããŒãžã§ã³ãããïŒç§èªèº«ããã®ãããžã§ã¯ããLinuxã§ãã¹ãããŸããïŒãåæã倧å¹
ã«æ¹åãããŸããã
ããã«ããããžã§ã¯ãã®ã³ãŒãã§
PVS-StudioãããŠã³ããŒãããŠè©ŠããŠã¿ãŠãã ããã

ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒEgor Bredikhinã
Krita 4.0ããªãŒãœãŒã¹ã³ãŒãã°ã©ãã£ãã¯ã¹ãšãã£ã¿ãŒã®ç¢ºèª