
ãã®èšäºã§ã¯ãããç¥ãããŠããå¥ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ããInkscape 0.92ãã¯ãã«ã°ã©ãã£ãã¯ãšãã£ã¿ãŒã®ãã¹ãã«çŠç¹ãåœãŠãŸãã ãã®ãããžã§ã¯ãã¯12幎以äžã«ããã£ãŠéçºãããŠãããããŸããŸãªåœ¢åŒã®ãã¯ã¿ãŒã€ã©ã¹ããæ±ãå€ãã®æ©äŒãæäŸããŸãã ãã®éããã®ã³ãŒãããŒã¹ã¯60äžè¡ã«æé·ããPVS-Studioéçã¢ãã©ã€ã¶ãŒã䜿çšããŠãã¹ãããæéã«ãªããŸããã
ã¯ããã«
Inkscapeã¯ãã¯ãã¹ãã©ãããã©ãŒã ã®ç¡æã®ãã¯ã¿ãŒã°ã©ãã£ãã¯ãšãã£ã¿ãŒã§ãã äžçäžã®ã¢ããã¥ã¢ããããã€ã©ã¹ããã¢ã€ã³ã³ãããŽãå³ãå°å³ãWebã°ã©ãã£ãã¯ãäœæããããã«åºã䜿çšããŠããŸãã Inkscapeã¯ããã®åéã§æã人æ°ã®ãããšãã£ã¿ãŒã®1ã€ã«ãªããŸããã ãã®ãããžã§ã¯ãã¯2003幎ã«Sodipodiãããžã§ã¯ãã®åå²ãšããŠäœæãããçŸåšãéçºäžã§ãã Inkscapeã®è©³çŽ°ã«ã€ããŠã¯ã
å
¬åŒWebãµã€ããã芧ãã ãã ã
ææ°ããŒãžã§ã³ã®Inkscapeãæ€èšŒã«äœ¿çšãããŸãã-0.92ã®ã³ãŒãã¯
ãGitHubã®
ãªããžããªããã³PVS-Studio 6.07éçã¢ãã©ã€ã¶ãŒã§å©çšã§ããŸãã
ãªã³ã¯ããããŠã³ããŒãã§ããŸãã ãã ããå·çæç¹ã§ã¯ãããŠã³ããŒãã§ããã®ã¯PVS-Studio for Windowsã®ã¿ã§ãã ããããç¶æ³ã¯ããã«å€ãããŸãã ãŸãããã§ã«PVS-Studio for Linuxã®ããŒã¿çããã¹ããããã©ã³ãã£ã¢ã«ãµã€ã³ã¢ããã§ããŸãã 詳现ã¯ãèšäºã
PVS-StudioãLinuxã«å¯Ÿããæã宣èšããŠããŸãããåç
§ããŠãã ããã

ããããééãã«æ»ããŸãã ãã®èšäºã§ã¯ãæãèå³æ·±ãã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžãéžæããŠèª¬æããããšã«æ³šæããŠãã ããã ãã培åºçãªæ€èšŒã®ããã«ããããžã§ã¯ãã®äœæè
ã¯ãPVS-Studioã®äžæããŒãšã¬ããŒããå
¥æã§ããŸãã ãããªãã¯PVS-StudioããŸã ãªããããWindowsã§å®è¡ãããŠããPVS-Studio StandaloneããŒã«ã䜿çšããŠã¬ããŒãã衚瀺ã§ããŸãã ã¯ããããã¯äŸ¿å©ã§ã¯ãããŸããã ããããPVS-Studio for Linuxã®ãªãªãŒã¹ã®å¹žçŠãªç¬éã®å°ãåã«ãçããã«èŸæ±åŒ·ããé¡ãããŸãã
æ€èšŒçµæ
æ°ããåŸã®nullãžã®ãã€ã³ã¿ã確èªãã
PVS-StudioèŠåïŒ V668ã¡ã¢ãªããnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããoutputBufããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã gzipstream.cpp 180
bool GzipInputStream::load() { .... outputBuf = new unsigned char [OUT_SIZE]; if ( !outputBuf ) {
ææ°ã®C ++æšæºã«ããã°ãã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå Žåã
newæŒç®åã¯äŸå€
std :: bad_allocïŒïŒãã¹ããŒãã
nullptrãè¿ããŸããã ã·ã¹ãã ãã¡ã¢ãªã®å²ãåœãŠã«å€±æãããšãäŸå€ãã¹ããŒãããé¢æ°ã®å®è¡ãåæ¢ãããããããã°ã©ã ã¯æ¡ä»¶ã®åŸã«ãããã¯ã«å
¥ãããšã¯ãããŸããã
ãã®å Žåãããã«ããã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã ãã®åé¡ã®æãæãããªè§£æ±ºçã¯ã
try {....} block catchïŒconst std :: bad_allocïŒïŒ{....}ã䜿çšããããšã§ãããã¡ã¢ãªãæ瀺çã«è§£æŸãã代ããã«ã¹ããŒããã€ã³ã¿ãŒã䜿çšããããšããå§ãããŸãã
åæ§ã®ãã€ã³ã¿ãŒãã§ãã¯ïŒ
- V668ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããdestbufããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã gzipstream.cpp 397
- V668ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããsrcBufããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã gzipstream.cpp 175
- V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããoldcurveããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã sp-lpe-item.cpp 719
ããããŒããšæ¯èŒãã
PVS-Studio èŠå ïŒ V704æ¡ä»¶æã®ãïŒãåŒã¯é¿ããå¿
èŠããããŸã-ãthisããã€ã³ã¿ãŒãNULLã«ãªãããšã¯ãªãããããã®åŒã¯æ°ããã³ã³ãã€ã©ãŒã§ã¯åžžã«falseã§ãã sp-lpe-item.cpp 213
bool SPLPEItem::performPathEffect(....) { if (!this) { return false; } .... }
ææ°ã®C ++æšæºã«ããã°ã
thisãã€ã³ã¿ãŒã¯æ±ºããŠnullã«ã§ããŸããã å€ãã®å Žåã
ãã®æ¯èŒããŒãã§äœ¿çš
ãããšãäºæããªããšã©ãŒãçºçããå¯èœæ§ããããŸãã 詳现ã«ã€ããŠã¯ã
V704蚺æã®èª¬æãåç
§ããŠ
ãã ãã ã
ãããš
nullptrå€ã®ç䟡æ§ã«é¢ãããã1ã€ã®ãã§ãã¯ïŒ
- V704æ¡ä»¶æã®ãthisãåŒã¯é¿ããå¿
èŠããããŸã-ãthisããã€ã³ã¿ãŒãNULLã«ãªãããšã¯ãªãããããã®åŒã¯æ°ããã³ã³ãã€ã©ãŒã§ã¯åžžã«trueã§ãã sp-paint-server.cpp 42
å±éºãªãã©ã¡ãŒã¿ãŒã®ãªãŒããŒã©ã€ã
PVS-StudioèŠåïŒ V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ1046ã1051ãsp-mesh-array.cpp 1051
void SPMeshNodeArray::create( ...., Geom::OptRect bbox )
èè
ã®èãã«ããã°ã
bboxãã©ã¡ãŒã¿ãŒã
nullptrã®å Žåã
Geom :: OptRectã¿ã€ãã®æ°ãããªããžã§ã¯ããäœæããå¿
èŠãããããªããžã§ã¯ããäœæã§ããªãã£ãå Žåãã¡ãœããã¯ãšã©ãŒã¡ãã»ãŒãžã§çµäºããŸãã
ãã ããäœæè
ãäºæ³ãããšãããã³ãŒãã¯ãŸã£ããæ©èœããŸããã
bboxãã©ã¡ãŒã¿ãŒã
nullptrã®å Žåãå®å
šã«æ°ãã
bboxãªããžã§ã¯ããæåã®
ifãããã¯å
ã«
äœæããããã®ãããã¯ãçµäºãããšããã«ç Žæ£ãããŸãã ãã®çµæãæåã®æ¡ä»¶ãæºãããããš2çªç®ã®æ¡ä»¶ãåžžã«æºããããããã
bboxãã©ã¡ãŒã¿ãŒã
nullptrã§ãããã³ã«ãã¡ãœããã¯ãšã©ãŒã¡ãã»ãŒãžã§çµäºããŸãã
ãã®ã³ãŒãã¯æ¬¡ã®ããã«èšè¿°ããå¿
èŠããããŸãã
void SPMeshNodeArray::create( ...., Geom::OptRect bbox ) { .... if( !bbox ) { std::cout << "SPMeshNodeArray::create(): bbox empty" << std::endl; bbox = item->geometricBounds(); if( !bbox ) { std::cout << "ERROR: No bounding box!" << std::endl; return; } } .... }
誀ã£ãŠã³ã¡ã³ãã¢ãŠããããè¡
PVS-StudioèŠåïŒ V628è¡ãäžé©åã«ã³ã¡ã³ãã¢ãŠããããããã°ã©ã ã®æäœããžãã¯ãå€æŽãããå¯èœæ§ããããŸãã FontFactory.cpp 705
font_instance *font_factory::Face(....) { .... if( features[0] != 0 )
ããã§ãèè
ã¯ãããã°ã«äœ¿çšãããæ¡ä»¶ã®è¡ãã³ã¡ã³ãã¢ãŠãããã®ãå¿ããŠããŸããã ãã®å Žåãããã¯å¹žéã§ãããããã¯åŠå®çãªçµæã«ã€ãªãããŸããã§ããã
forã«ãŒããæåã®å埩ã§å®è¡ã
ããæ¡ä»¶
ãåã«è€è£œãã
å Žåã®æ¡ä»¶ãå€æããŸããããããã¯ééããªãééãã§ãããå°æ¥çã«åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
ãã¯ã³ã¿ã€ã ãµã€ã¯ã«ã
PVS-StudioèŠåïŒ V612ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ããã¬ãŒã¯ãã text_reassemble.c 417
int TR_kern_gap(....) { .... while(ptsp && tsp){ .... if(!text32){ .... if(!text32)break; } .... if(!ptxt32){ .... if(!ptxt32)break; } .... break;
ãããã®å Žåãã
breakã¹ããŒãã¡ã³ãã®åã«æ¡ä»¶ããªãããããã®ãµã€ã¯ã«ã¯æåã®ãã¹ã®åŸã«çµäºããŸãã èè
ã®æå³ãæ£ç¢ºã«èšãã®ã¯é£ããã§ãã ãšã©ãŒããªãå Žåã¯ãã³ãŒããæžãæããŠã
ifã§çœ®ãæããŸãã
éåžžã«å¥åŠãªæ¹æ³
PVS-StudioèŠåïŒ V571ç¹°ãè¿ããã§ãã¯ã ãback == falseãæ¡ä»¶ã¯ã388è¡ç®ã§æ¢ã«æ€èšŒãããŠããŸããPath.cpp389
void Path::SetBackData (bool nVal) { if (back == false) { if (nVal == true && back == false) { back = true; ResetPoints(); } else if (nVal == false && back == true) { back = false; ResetPoints(); } } else { if (nVal == true && back == false) { back = true; ResetPoints(); } else if (nVal == false && back == true) { back = false; ResetPoints(); } } }
ãã®æ¹æ³ããªããã®ãããªå¥åŠãªæ¹æ³ã§æžãããã®ãã説æããã®ã¯å°é£ã§ãã
ifãããã¯ãš
elseãããã¯ã¯åãã§ãããå€ãã®è¿œå ãã§ãã¯ãå®è¡ãããŸãã ããã«è«ççãªãšã©ãŒããªãå Žåã§ãããã®ã¡ãœããã¯æ¬¡ã®ããã«ééããªãæžãæããå¿
èŠããããŸãã
void Path::SetBackData (bool nVal) { back = nVal; ResetPoints(); }
ã³ã³ãã倱ã£ã
PVS-StudioèŠåïŒ V737æååã®æ«å°Ÿã«ãããã³ã³ããæ¬ èœããŠããå¯èœæ§ããããŸãã drawing-text.cpp 272
void DrawingText::decorateStyle(....) { .... int dashes[16]={ 8, 7, 6, 5, 4, 3, 2, 1, -8, -7, -6, -5
ã³ã³ããçç¥ãããããã
ããã·ã¥é
åã¯äœæè
ãäºæãããã®ãšã¯ãŸã£ããç°ãªãå€ã§åæåãããããšã«ãªããŸãã
æåŸ
ãããïŒ
{ 8, 7, 6, 5, 4, 3, 2, 1, -8, -7, -6, -5, -4, -3, -2, -1 }
å®éãé
åã¯æ¬¡ã®ããã«åããããŸãã
{ 8, 7, 6, 5, 4, 3, 2, 1, -8, -7, -6, -9, -3, -2, -1, 0 }
é
åã®12çªç®ã®èŠçŽ ã®ä»£ããã«ã
-5-4 == -9ãšããæ°åãæžã蟌ãŸããŸãã æåŸã®èŠçŽ ïŒé
ååæåãªã¹ãã«ååãªèŠçŽ ããªãã£ãèŠçŽ ïŒã¯ãC ++æšæºã«åŸã£ãŠãŒãã«åæåãããŸãã
strncmpã®é·ããæ£ãããããŸãã
PVS-StudioèŠåïŒ V666é¢æ° 'strncmp'ã®3çªç®ã®åŒæ°ã
調ã¹ãããšãæ€èšããŠãã ããã å€ãã2çªç®ã®åŒæ°ã§æž¡ãããæååã®é·ããšäžèŽããªãå¯èœæ§ããããŸãã blend.cpp 85
static Inkscape::Filters::FilterBlendMode sp_feBlend_readmode(....) { .... switch (value[0]) { case 'n': if (strncmp(value, "normal", 6) == 0) return Inkscape::Filters::BLEND_NORMAL; break; case 'm': .... case 's': if (strncmp(value, "screen", 6) == 0) return Inkscape::Filters::BLEND_SCREEN; if (strncmp(value, "saturation", 6) == 0)
誀ã£ãæååã®é·ãã®
ã飜åããš
ãããŒãã©ã€ããã
strncmpé¢æ°ã«æž¡ãããããããã¹ãŠã®æåãæ¯èŒãããããã§ã¯ãªããããããæåã®6æåãš7æåã®ã¿ãæ¯èŒãããŸãã ããããããããã
ã³ããŒããŒã¹ãããã°ã©ãã³ã° ã
switch-caseã«æ°ããèŠçŽ ãè¿œå ãããšããã®ãšã©ãŒã«ãã誀æ€ç¥ãçºçããŸãã ã³ãŒããä¿®æ£ãã䟡å€ããããŸãïŒ
if (strncmp(value, "saturation", 10) == 0) .... if (strncmp(value, "hard-light", 10) == 0)
ãŒãã«ããæœåšçãªé€ç®
èŠåPVS-StudioïŒ V609ãŒãé€ç®ã åæ¯ç¯å²[0..999]ã lpe-fillet-chamfer.cpp 607
Geom::PathVector LPEFilletChamfer::doEffect_path(....) { .... if(....){ .... } else if (type >= 3000 && type < 4000) { unsigned int chamferSubs = type-3000; .... double chamfer_stepsTime = 1.0/chamferSubs; .... } ... }
typeå€æ°ã
3000ã«çããå Žåã
chamferSubså€æ°ã®å€ã¯0ã«
ãªããŸãããããã£ãŠã
chamfer_stepsTimeã®å€ã¯
1.0 / 0 == infã«ãªããããã¯æããã«èè
ãæåŸ
ãããã®ã§ã¯ãããŸããã ãã®ç¶æ³ãåé¿ããã«ã¯ã
ifãããã¯ã®æ¡ä»¶ãå€æŽãã䟡å€ããããŸãã
... else if (type > 3000 && type < 4000) ...
ãŸãã¯ã
chamferSubs == 0ã®ç¶æ³ãåå¥ã«åŠçã§ããŸãã
åæ§ã®ç¶æ³ïŒ
- V609ãŒãã§é€ç®ããŸãã åæ¯ç¯å²[0..999]ã lpe-fillet-chamfer.cpp 623
ä»ã«è¡æ¹äžæã§ããïŒ
PVS-StudioèŠåïŒ V646ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ã®æ€æ»ãæ€èšããŠãã ããã ãelseãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãã sp-item.cpp 204
void SPItem::resetEvaluated() { if ( StatusCalculated == _evaluated_status ) { .... } if ( StatusSet == _evaluated_status ) {
ã³ãŒãã®ãã©ãŒãããïŒ
ifã¹ããŒãã¡ã³ãã¯åã®
ifã®éãæ¬åŒ§ãšåãè¡ã«ãã
ãŸã ïŒãšäœæ¥ã®ããžãã¯ãã
å€æãããšã
elseããŒã¯ãŒãã¯ããã«ãã
ãŸããã§ããïŒ
.... if ( StatusCalculated == _evaluated_status ) { .... } else if ( StatusSet == _evaluated_status ) { .... } } ....
ãã«ãã€ã³ã¿ãŒæäœ
PVS-StudioèŠåïŒ V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãprivããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ154ã160ãdocument.cpp 154
SPDocument::~SPDocument() { priv->destroySignal.emit();
äžéšã®
ifãããã¯ã§ã¯ã
privã® NULLããã§ãã¯ãã
ãŸã ã äœæè
ã¯ããã®ãã€ã³ã¿ãŒããŒãã«çããããšãèªããŠããŸãããäžèšã®ãã€ã³ã¿ãŒã¯ãã§ãã¯ãªãã§æ¢ã«äœ¿çšãããŠããŸãã ãã®ãšã©ãŒãä¿®æ£ããã«ã¯ã䜿çšããåã«ãã€ã³ã¿ãŒã®å€ã確èªããå¿
èŠããããŸãã
åæ§ã®èŠåïŒ
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ624ã641ãsp-offset.cpp 624
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãã_ effects_listããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ103ã113ãeffect.cpp 103
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããnumããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ1312ã1315ãcr-tknzr.c 1312
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã»ã¬ã¯ã¿ãŒããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ3463ã3481ãcr-parser.c 3463
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããa_thisããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1552ã1562ãcr-sel-eng.c 1552
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããFillDataããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ5898ã5901ãupmf.c 5898
- V595 nulleventã«å¯ŸããŠæ€èšŒãããåã«ããevent_contextããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1014ã1023ãtool-base.cpp 1014
- V595 nulleventã«å¯ŸããŠæ€èšŒãããåã«ããevent_contextããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ959ã970ãtool-base.cpp 959
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããthis-> reprããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ662ã665ãeraser-tool.cpp 662
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããthis-> reprããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ662ã665ãeraser-tool.cpp 662
- V595 'modified_connection'ãã€ã³ã¿ãŒã¯ãnullptrã«å¯ŸããŠæ€èšŒãããåã«äœ¿çšãããŠããŸããã è¡ã確èªïŒ1114ã1122 gradient-vector.cpp 1114
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããcããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ762ã770ãfreehand-base.cpp 762
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããrelease_connectionããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ505ã511ãgradient-toolbar.cpp 505
- V595 'modified_connection'ãã€ã³ã¿ãŒã¯ãnullptrã«å¯ŸããŠæ€èšŒãããåã«äœ¿çšãããŠããŸããã è¡ã確èªããŠãã ããïŒ506ã514ãgradient-toolbar.cpp 506
ã»ãã³ãã³ããããŸãã
PVS-StudioèŠå ïŒ
V504ã»ãã³ãã³ã;ããçºçããå¯èœæ§ãé«ã ãreturnãããŒã¯ãŒãã®åŸã«ââãããŸããã svg-fonts-dialog.cpp 167
void GlyphComboBox::update(SPFont* spfont) { if (!spfont) return
埩垰åŸ
ãã»ãã³ãã³ïŒ ";"ïŒãæ¬ èœããŠããŸããããã¯ãèè
ã®ã³ã¡ã³ãã«èšèŒãããŠããåé¡ã®åå ã§ãã è¡ãã³ã¡ã³ãã¢ãŠãããå ŽåïŒ
this->append("");
次ã«ããã©ãŒã ã®ãã¶ã€ã³ãååŸããŸãã
if (!spfont) return this->remove_all();
ãããã£ãŠãã³ã³ãããã¯ã¹ã¯
spfont == NULLã®å Žåã«ã®ã¿ã¯ãªã¢ãã
ãŸã ã
æªäœ¿çšã®ãã©ã¡ãŒã¿ãŒ
PVS-StudioèŠåïŒ V763ãã©ã¡ãŒã¿ãŒ 'new_value'ã¯ã䜿çšãããåã«åžžã«é¢æ°æ¬äœã§æžãæããããŸãã sp-xmlview-tree.cpp 259
void element_attr_changed(.... const gchar * new_value, ....) { NodeData *data = static_cast<NodeData *>(ptr); gchar *label; if (data->tree->blocked) return; if (0 != strcmp (key, "id") && 0 != strcmp (key, "inkscape:label")) return; new_value = repr->attribute("id");
ãã®é¢æ°ã§ã¯ã
new_valueãã©ã¡ãŒã¿ãŒã®å€ã¯ã䜿çšãããåã«åžžã«å€æŽãããŸãã ãã©ã¡ãŒã¿ãŒãªã¹ããã
new_valueãåé€ãã䟡å€ããããããããŸããã çŸæç¹ã§ã¯ããã®ãã©ã¡ãŒã¿ãŒã®ååšã¯æ£åœåãããŸããã
åæ§ã®ç¶æ³ïŒ
- V763ãã©ã¡ãŒã¿ãŒãwidgetãã¯ã䜿çšãããåã«åžžã«é¢æ°æ¬äœã§æžãæããããŸãã ruler.cpp 923
ååšããªãé
åãžã®ãã€ã³ã¿ãŒ
PVS-StudioèŠåïŒ V507ããŒã«ã«é
åãnããžã®ãã€ã³ã¿ãŒã¯ããã®é
åã®ç¯å²å€ã«ä¿åãããŸãã ãã®ãããªãã€ã³ã¿ãŒã¯ç¡å¹ã«ãªããŸãã inkscape.cpp 582
void Application::crash_handler (int ) { .... if (doc->isModifiedSinceSave()) { const gchar *docname; .... if (docname) { .... if (*d=='.' && d>docname && dots==2) { char n[64]; size_t len = MIN (d - docname, 63); memcpy (n, docname, len); n[len] = '\0'; docname = n; } } if (!docname || !*docname) docname = "emergency"; .... }
é
å
nã®æå¹æéã¯ããããæã
docnameãã€ã³ã¿ãŒã®æå¹æéãããçããªã£ãŠããŸãã ããã¯ãç¡å¹ãª
docnameãã€ã³ã¿ãŒã«ã€ãªãããŸãã ãã®åé¡ã®1ã€ã®è§£æ±ºçã¯ã
docnameãã€ã³ã¿ãŒã®é£ã«é
å
nãå®çŸ©ããããšã§ãã
.... if (doc->isModifiedSinceSave()) { const gchar *docname; char n[64]; ....
åæ§ã®ãã€ã³ã¿ãŒïŒ
- V507ããŒã«ã«é
åãin_bufferããžã®ãã€ã³ã¿ã¯ããã®é
åã®ã¹ã³ãŒãå€ã«ä¿åãããŸãã ãã®ãããªãã€ã³ã¿ãŒã¯ç¡å¹ã«ãªããŸãã inkjar.cpp 371
- V507ããŒã«ã«é
åãout_bufferããžã®ãã€ã³ã¿ãŒã¯ããã®é
åã®ã¹ã³ãŒãå€ã«æ ŒçŽãããŸãã ãã®ãããªãã€ã³ã¿ãŒã¯ç¡å¹ã«ãªããŸãã inkjar.cpp 375
æ¡ä»¶å
ã®ç¡å¹ãªãªããžã§ã¯ãå
PVS-Studio èŠå ïŒ V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ640ã643ãfont-options.cpp 640
void FontVariants::fill_css( SPCSSAttr *css ) { .... if( _caps_normal.get_active() ) { css_string = "normal"; caps_new = SP_CSS_FONT_VARIANT_CAPS_NORMAL; } else if( _caps_small.get_active() ) { .... } else if( _caps_all_small.get_active() ) { .... } else if( _caps_all_petite.get_active() ) {
_caps_all_petite.get_activeïŒïŒã®åã®æ¡ä»¶ã§ã¯ããªããžã§ã¯ãã®ååã¯
_caps_all_petiteã§ã¯ãªã
_caps_petiteã§ããå¿
èŠããããŸãã ãã®ãšã©ãŒã¯ãããããCopy-Pasteã®çµæãšããŠçºçããŸããã
æ°å€å®æ°ã®äžæ£ç¢ºãªäœ¿çš
èŠåPVS-StudioïŒ V624å®æ°0.707107ã䜿çšãããŠããŸãã çµæã®å€ã¯äžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã <math.h>ã®M_SQRT1_2å®æ°ã®äœ¿çšãæ€èšããŠãã ããã PathOutline.cpp 1198
void Path::OutlineJoin (....) { .... if (fabs(c2) > 0.707107) { .... } .... }
ãã®ãããªèšé²ã¯å®å
šã«æ£ããããã§ã¯ãªããèšç®ã®ç²ŸåºŠãäœäžããå¯èœæ§ããããŸãã ãã¡ã€ã«
<math.h>ã§å®£èšãããŠããæ°åŠå®æ°
M_SQRT1_2 ïŒ2ã®å¹³æ¹æ ¹ã®éæ°ïŒã䜿çšããããšãã
å§ãããŸãã ããã§ã¯å®éã«ã¯ãã¹ãŠãããŸããããšæããŸããããã®ãããªèŠèŠããã³ãŒãã®äŸã«æ³šæãæããããšæããŸããã
åæ§ã®èŠåïŒ
- V624å®æ°1.414213562ã䜿çšãããŠããŸãã çµæã®å€ã¯äžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã <math.h>ã®M_SQRT2å®æ°ã®äœ¿çšãæ€èšããŠãã ããã verbs.cpp 1848
- V624å®æ°3.14159ã䜿çšãããŠããŸãã çµæã®å€ã¯äžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã <math.h>ã®M_PIå®æ°ã®äœ¿çšãæ€èšããŠãã ããã odf.cpp 1568
- V624å®æ°1.414213562ã䜿çšãããŠããŸãã çµæã®å€ã¯äžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã <math.h>ã®M_SQRT2å®æ°ã®äœ¿çšãæ€èšããŠãã ããã inkscape-preferences.cpp 1334
åäžã®è¡šçŸ
PVS-Studioã®èŠåïŒ ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãAr.maxExtentïŒïŒ<tolãããããŸãã path-intersection.cpp 313
void mono_intersect(....) { if(depth > 12 || (Ar.maxExtent() < tol && Ar.maxExtent() < tol)) { .... } .... }
æ¡ä»¶
Ar.maxExtentïŒïŒ<tolã®ç¢ºèªã¯2åå®è¡ãããŸãã ã»ãšãã©ã®å Žåãããã¯ã³ãŒãã®ããã€ãã®ä¿®æ£ã®çµæãšããŠçºçããŸããã åŒãä¿®æ£ããããéè€ãã§ãã¯ãåé€ããå¿
èŠããããŸãã
åæ§ã®ãã§ãã¯ïŒ
- V501ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®å¯æ¬¡åŒãAr.maxExtentïŒïŒ<0.1ãããããŸãã path-intersection.cpp 364
ifãããã¯ãšelseãããã¯ã§åãã¢ã¯ã·ã§ã³
èŠåPVS-StudioïŒ ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã ShapeRaster.cpp 1825
void Shape::AvanceEdge(....) { .... if ( swrData[no].sens ) { if ( swrData[no].curX < swrData[no].lastX ) { line->AddBord(swrData[no].curX, swrData[no].lastX, false); } else if ( swrData[no].curX > swrData[no].lastX ) { line->AddBord(swrData[no].lastX, swrData[no].curX, false); } } else { if ( swrData[no].curX < swrData[no].lastX ) { line->AddBord(swrData[no].curX, swrData[no].lastX, false); } else if ( swrData[no].curX > swrData[no].lastX ) { line->AddBord(swrData[no].lastX, swrData[no].curX, false); } } }
ifãããã¯ãš
elseãããã¯ã®ã³ãŒãã¯åãã§ããããããã®å ŽæãèŠãŠãäœæ¥ã®ããžãã¯ãä¿®æ£ããããéè€ãããã©ã³ããåé€ããå¿
èŠããããŸãã
åæ§ã®å ŽæïŒ
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã ShapeRaster.cpp 1795
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã PathCutting.cpp 1323
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã ShapeSweep.cpp 2340
ãããã«
ç£æ»äžã«ãäžæ³šæã«ãã£ãŠè¡ãããå€ãã®ãšã©ãŒãçºèŠãããŸããã PVS-Studioéçã¢ãã©ã€ã¶ãŒã¯ããã®ãããªãšã©ãŒãå¹æçã«æ€åºã§ãããããããã°ã©ããŒã®æéãšç¥çµãç¯çŽã§ããŸãã äž»ãªããšã¯ãã³ãŒãåæãå®æçã«å®è¡ããŠãã¿ã€ããã¹ããã®ä»ã®æ¬ é¥ãããã«ç¹å®ããããšã§ãã ãã®ãããª1åéãã®ãã§ãã¯ã¯ãPVS-Studioãé©åã«ã¢ããã¿ã€ãºããŸãããå¹æã¯ãããŸããã éçã¢ãã©ã€ã¶ãŒããã®ã¡ãã»ãŒãžããã³ã³ãã€ã©ãŒããã®æ¡åŒµèŠåãšããŠæ±ããŸãã ãŸããã³ã³ãã€ã©ã¡ãã»ãŒãžã䜿çšãããšããªãªãŒã¹åã«äžåºŠã ãã§ã¯ãªããåžžã«äœæ¥ããå¿
èŠããããŸãã ãã®é¡æšããã³ãŒãã®å質ãå¿é
ããŠããããã°ã©ããŒã®éã«è¿ã¥ããç解ã§ããããšãé¡ã£ãŠããŸãã
ç§èªèº«ã®ãããžã§ã¯ãã§PVS-Studioã
ããŠã³ããŒãããŠè©Šãããšããå§ãã
ãŸã ã
PS

ç§ãã¡ã®äŒç€Ÿã¯ãInstagramãå°ãè©ŠããŠã¿ãããšã«ããŸããã ããããäœããèµ·ãããã©ããã¯ããããŸããããã
pvsstudio ãããã©ããŒããŠ
ãã ãã ã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒEgor Bredikhinã
LinuxããŒãžã§ã³ãåŸ
ã£ãŠããŸãïŒInkscape Graphics Editorã®ã³ãŒãã確èªããŸã ã