ãã®èšäºã¯ããªãŒãã³ãªFreeCADãããžã§ã¯ãã®ãšã©ãŒã®æŠèŠãç®çãšããŠããããããã«ç°ãªãæ§æ Œãç²åŸããŸããã ã¢ãã©ã€ã¶ãŒã®èŠåã®å€§éšåã¯ã䜿çšãããŠãããµãŒãããŒãã£ã®ã©ã€ãã©ãªããçºçããŸããã ãµãŒãããŒãã£ã©ã€ãã©ãªãç©æ¥µçã«äœ¿çšãããœãããŠã§ã¢éçºã«ã¯ãç¹ã«ãªãŒãã³ãœãŒã¹ã®åéã§å€ãã®å©ç¹ããããŸãã ãããŠãã©ã€ãã©ãªã®ãšã©ãŒã¯ããããæåŠããçç±ã§ã¯ãããŸããã ãã ãã䜿çšããã³ãŒãã«ããã°ãååšããå¯èœæ§ãããããšãç解ããå¿ èŠããããŸãã 圌ãã¯äŒãæºåãã§ããŠããŠãå Žåã«ãã£ãŠã¯ä¿®æ£ããå¿ èŠããããããã«ãã£ãŠããªãã䜿çšããã©ã€ãã©ãªãæ¹åããŸãã
FreeCADã¯ã3次å ã¢ãã«ãšãã®æ圱å³ãäœæã§ãããã©ã¡ããªãã¯3次å ãšãã£ã¿ãŒã§ãã DaimlerChrysler Corporationã«å€åããFreeCADéçºè JÃŒrgenRigelã¯ã圌ã®ããã°ã©ã ãæåã®ç¡æã®æ©æ¢°èšèšããŒã«ãšããŠäœçœ®ä»ããŠããŸãã å€ãã®æ¥çã®å°é家ã®éã§ã¯ããªãŒãã³ãœãŒã¹ã®ãã¬ãŒã ã¯ãŒã¯å ã§æ¬æ ŒçãªCADã·ã¹ãã ãäœæããåé¡ãç¥ãããŠããããã®ãããžã§ã¯ãã¯ãã®ãããªãå®å šãªäŸ¡å€ãã®åè£ã§ãã PVS-Studioã䜿çšããŠãœãŒã¹ã³ãŒãã確èªãããã®åéã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããå°ãè¯ããªãããã«ããŸãã åžžã«1ãã¯ã»ã«ç§»åãããã€ã³ãã«å°éããããçŽç·ããŸã£ããã«ãããã§ããªããšãã«ãããŸããŸãªãšãã£ã¿ãŒã§ãã°ãªãããã«ééããŸããã ãããããããããã¹ãŠã®çç±ã¯ããœãŒã¹ã³ãŒãã®ã¿ã€ããã¹ã«ãããŸããã
PVS-Studioã®äœãåé¡ã«ãªã£ãŠããŸããïŒïŒ
FreeCADãããžã§ã¯ãã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ããããµã€ãã«ã¯éåžžã«åªããã¢ã»ã³ããªããã¥ã¡ã³ãããããŸãã ã€ã³ã¹ããŒã«ãããPVS-Studioãã©ã°ã€ã³ã䜿çšããŠãæ€èšŒã®ããã«Visual Studio Community 2013ã®ãããžã§ã¯ããã¡ã€ã«ãååŸããããšã¯é£ãããããŸããã§ããã ããããæåã¯ãã§ãã¯ãããŸããããŸããã§ãã...
ã¢ãã©ã€ã¶ãŒã®å éšãšã©ãŒã®åå ã¯ã* .iæ¡åŒµåãæã€ããã¹ãååŠçãã¡ã€ã«ã«ãã€ããªã·ãŒã±ã³ã¹ãååšããããšã§ããã ã¢ãã©ã€ã¶ãŒã¯ãã®ãããªç¶æ³ãåŠçã§ããŸãããäœãæ°ããããšãèµ·ãããŸããã åé¡ã¯ããœãŒã¹ãã¡ã€ã«ã®ã³ã³ãã€ã«ãªãã·ã§ã³ã®ããããã®è¡ã«ãããŸãã
/FI"Drawing.dir/Debug//Drawing_d.pch"
ã³ã³ãã€ã«ãã©ã°/ FIïŒåå匷å¶ã€ã³ã¯ã«ãŒããã¡ã€ã«ïŒãš#includeãã£ã¬ã¯ãã£ãã¯ãããã¹ãããããŒãã¡ã€ã«ãå«ããããã«äœ¿çšãããŸãã ããããããã§ã¯ããã€ããªåœ¢åŒã®æ å ±ãå«ããã¡ã€ã«ãå«ããããšããŠããŸãã å¥è·¡çã«ã³ã³ãã€ã«ããŸãã ããããVisual C ++ã§ã¯ããã®ãããªãã¡ã€ã«ã¯åã«ç¡èŠãããŸãã
ã³ã³ãã€ã«ããªããã€ãŸããã¡ã€ã«ãååŠçããããšãããšãVisual C ++ã¯ãšã©ãŒãå ±åããŸãã ãããŠãããã§ã¯ãPVS-Studioã§ããã©ã«ãã§äœ¿çšãããŠããClangã«ã¯ãèãçŽããã«* .iãã¡ã€ã«ãšãã€ããªãã¡ã€ã«ãå«ãŸããŠããŸããã PVS-Studioã¯ãã®ãããªããªãã¯ãæåŸ ããŠããªãã£ãããã倢äžã«ãªããŸããã
å±æ©ã«whatããŠãããã®ãæ確ã«ããããã«ãClangã§ååŠçããããã¡ã€ã«ã®ãã©ã°ã¡ã³ãã次ã«ç€ºããŸãã
ãã®ãã©ã°ã䜿çšããã«ãããžã§ã¯ããæ éã«ãã§ãã¯ããŸããããããã«ééãããããšããéçºè ã®æ³šæãåŒããããšæããŸãã
Freecad
ãããžã§ã¯ãã®ãšã©ãŒã®æåã®äŸã¯ã誰ããããç¥ã£ãŠããçç±ã§åŸãããŸããã
V501 ãïŒ=ãæŒç®åã®å·Šå³ã«ã¯ãåäžã®å¯æ¬¡åŒãsurfaceTwo-> IsVRationalïŒïŒãããããŸãã modelrefine.cpp 780
bool FaceTypedBSpline::isEqual(const TopoDS_Face &faceOne, const TopoDS_Face &faceTwo) const { .... if (surfaceOne->IsURational() != surfaceTwo->IsURational()) return false; if (surfaceTwo->IsVRational() != surfaceTwo->IsVRational())//<= return false; if (surfaceOne->IsUPeriodic() != surfaceTwo->IsUPeriodic()) return false; if (surfaceOne->IsVPeriodic() != surfaceTwo->IsVPeriodic()) return false; if (surfaceOne->IsUClosed() != surfaceTwo->IsUClosed()) return false; if (surfaceOne->IsVClosed() != surfaceTwo->IsVClosed()) return false; if (surfaceOne->UDegree() != surfaceTwo->UDegree()) return false; if (surfaceOne->VDegree() != surfaceTwo->VDegree()) return false; .... }
äžçåŒæŒç®åã®å·ŠåŽã§ãã¿ã€ããã¹ãåå ã§ããsurfaceOneãã®ä»£ããã«ééã£ãå€æ°ãsurfaceTwoããèŠã€ãããŸããã 次åãã³ããŒããŒã¹ããã©ã°ã¡ã³ãã倧ããããããã«èè ã«ã¢ããã€ã¹ããããšã¯æ®ã£ãŠããŸããããã®ãããªäŸã«ã€ããŠã説æããŸã=ïŒã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªïŒ162ã164ãtaskpanelview.cpp 162
/// @cond DOXERR void TaskPanelView::OnChange(....) { std::string temp; if (Reason.Type == SelectionChanges::AddSelection) { } else if (Reason.Type == SelectionChanges::ClrSelection) { } else if (Reason.Type == SelectionChanges::RmvSelection) { } else if (Reason.Type == SelectionChanges::RmvSelection) { } }
ãŸã æžãããŠããæ©èœã«æ³šæãæã£ãã®ã¯ãªãã§ããïŒ ãã®çç±ã¯æ¬¡ã®ãšããã§ãããã®ã³ãŒãã䜿çšãããšã次ã®2ã€ã®äŸã®å Žåãšã»ãšãã©åãã«ãªããŸãã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ1465ã1467ãapplication.cpp 1465
pair<string, string> customSyntax(const string& s) { #if defined(FC_OS_MACOSX) if (s.find("-psn_") == 0) return make_pair(string("psn"), s.substr(5)); #endif if (s.find("-display") == 0) return make_pair(string("display"), string("null")); else if (s.find("-style") == 0) return make_pair(string("style"), string("null")); .... else if (s.find("-button") == 0) //<== return make_pair(string("button"), string("null")); //<== else if (s.find("-button") == 0) //<== return make_pair(string("button"), string("null")); //<== else if (s.find("-btn") == 0) return make_pair(string("btn"), string("null")); .... }
èè ãã³ããŒãã1è¡ã誀ã£ãŠä¿®æ£ããªãã£ãããšãé¡ã£ãŠããŸãããçµå±ãå¿ èŠãªãã¹ãŠã®è¡ã®æ€çŽ¢ãè¿œå ããŸããã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªïŒ191ã199ãblendernavigationstyle.cpp 191
SbBool BlenderNavigationStyle::processSoEvent(....) { .... else if (!press && (this->currentmode == NavigationStyle::DRAGGING)) { //<== SbTime tmp = (ev->getTime() - this->centerTime); float dci = (float)QApplication::....; if (tmp.getValue() < dci) { newmode = NavigationStyle::ZOOMING; } processed = TRUE; } else if (!press && (this->currentmode == NavigationStyle::DRAGGING)) { //<== this->setViewing(false); processed = TRUE; } .... }
ããããç§ã®æèŠã§ã¯ããã®ãããªã¢ããªã±ãŒã·ã§ã³ã®é倧ãªééãã§ãã ã¢ããªã³ã°æã«ã¯ãããŠã¹ããã²ãŒã·ã§ã³ã䜿çšããŠå€ãã®äœæ¥ãè¡ãããŸãããããã«ãã®ãããªééãããããŸããæåã®æ¡ä»¶ãåãã§æåã®æ¡ä»¶ãå®è¡ããããããæåŸã®æ¡ä»¶ã®ãœãŒã¹ã³ãŒãã¯å¶åŸ¡ãããŸããã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã viewproviderfemmesh.cpp 695
inline void insEdgeVec(std::map<int,std::set<int> > &map, int n1, int n2) { if(n1<n2) map[n2].insert(n1); else map[n2].insert(n1); };
æ¡ä»¶ã«é¢ä¿ãªãã1ã€ã®ã¢ã¯ã·ã§ã³ãåžžã«å®è¡ãããŸãã å€åããã¯ãŸã ãã®ããã«èããããŠããïŒ
inline void insEdgeVec(std::map<int,std::set<int> > &map, int n1, int n2) { if(n1<n2) map[n2].insert(n1); else map[n1].insert(n2); };
æåŸã®è¡ãä¿®æ£ããã®ã¯ãªãã§ããïŒ ãã®ãããã¯ã«é¢ããèšäºã«èå³ããããããããŸããïŒ æåŸã®è¡ã®å¹æ ã ããããããããæåã®åé¡ã解決ããå¿ èŠããããŸãã ç¥ããŸãã:)ã
V570 ãthis-> quat [3]ãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã rotation.cpp 260
Rotation & Rotation::invert(void) { this->quat[0] = -this->quat[0]; this->quat[1] = -this->quat[1]; this->quat[2] = -this->quat[2]; this->quat[3] = this->quat[3]; //<== return *this; }
ãæåŸã®è¡ãã«ã€ããŠã®è©³çŽ°ã ã¢ãã©ã€ã¶ãŒã¯ãæåŸã®è¡ã«ãã€ãã¹èšå·ããªãããã泚æãæã£ãŠããŸãã ããããããã§ã¯ééããªããšã©ãŒã話ãããšã¯äžå¯èœã§ããããããããã®ãããªå€æãå®è£ ãããšãã圌ãã¯4çªç®ã®ã³ã³ããŒãã³ããå€ãããªãããšã匷調ãããã£ãã®ã§ãã
V576圢åŒãæ£ãããããŸãã ã 'fprintf'é¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®å®åŒæ°ãäºæãããŸãã äºæ³ïŒ2.çŸåšïŒ3. memdebug.cpp 222
int __cdecl MemDebug::sAllocHook(....) { .... if ( pvData != NULL ) fprintf( logFile, " at %p\n", pvData ); else fprintf( logFile, "\n", pvData ); //<== .... }
ãã®ãããªã³ãŒãã¯æå³ããããŸããã ãã€ã³ã¿ãŒããã«ã®å Žåãæªäœ¿çšã®ãã©ã¡ãŒã¿ãŒãé¢æ°ã«æž¡ãããšãªããåã«æ¹è¡ãå°å·ã§ããŸãã
V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow ExceptionïŒFOOïŒ; waypointpyimp.cpp 231
void WaypointPy::setTool(Py::Int arg) { if((int)arg.operator long() > 0) getWaypointPtr()->Tool = (int)arg.operator long(); else Base::Exception("negativ tool not allowed!"); }
äŸå€ã¿ã€ãã®ãªããžã§ã¯ãã¯ã³ãŒãå ã«äœæãããŸããã䜿çšãããŸããã ã©ããããã¹ããŒãããŒã¯ãŒããæ¬ èœããŠããããã§ãïŒ
void WaypointPy::setTool(Py::Int arg) { if((int)arg.operator long() > 0) getWaypointPtr()->Tool = (int)arg.operator long(); else throw Base::Exception("negativ tool not allowed!"); }
ããã«ããã€ãã®ãã®ãããªå ŽæïŒ
- V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow ExceptionïŒFOOïŒ; application.cpp 274
- V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow ExceptionïŒFOOïŒ; fileinfo.cpp 519
- V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow ExceptionïŒFOOïŒ; waypointpyimp.cpp 244
- V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow ExceptionïŒFOOïŒ; sketch.cpp 185
V599 ãã«ãŒããã¯ã©ã¹ã«ã¯ä»®æ³é¢æ°ãå«ãŸããŠããŸãããä»®æ³ãã¹ãã©ã¯ã¿ã¯ååšããŸããã constraints.cpp 1442
class Curve { //a base class for all curve-based //objects (line, circle/arc, ellipse/arc) //<== public: virtual DeriVector2 CalculateNormal(....) = 0; virtual int PushOwnParams(VEC_pD &pvec) = 0; virtual void ReconstructOnNewPvec (....) = 0; virtual Curve* Copy() = 0; }; class Line: public Curve //<== { public: Line(){} Point p1; Point p2; DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); virtual int PushOwnParams(VEC_pD &pvec); virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); virtual Line* Copy(); };
䜿çšæ³ïŒ
class ConstraintAngleViaPoint : public Constraint { private: inline double* angle() { return pvec[0]; }; Curve* crv1; //<== Curve* crv2; //<== .... }; ConstraintAngleViaPoint::~ConstraintAngleViaPoint() { delete crv1; crv1 = 0; //<== delete crv2; crv2 = 0; //<== }
åºæ¬ã¯ã©ã¹ã§ã¯ãæ²ç·ãä»®æ³é¢æ°ã宣èšãããŠããŸãããããã©ã«ãã§äœæããããã¹ãã©ã¯ã¿ã¯å®£èšãããŠããŸããã ãããŠãã¡ãããä»®æ³ã§ã¯ãããŸããïŒ ã€ãŸãããã®ãããªãŠãŒã¹ã±ãŒã¹ã§ã¯ãåã¯ã©ã¹ãžã®ãã€ã³ã¿ãŒãåºæ¬ã¯ã©ã¹ãžã®ãã€ã³ã¿ãŒã«æ ŒçŽãããŠããå Žåããã®ã¯ã©ã¹ããç¶æ¿ãããªããžã§ã¯ãã¯å®å šã«ã¯ã¯ãªãŒã³ã¢ãããããŸããã ã³ã¡ã³ãããå€æãããšãåºæ¬ã¯ã©ã¹ã«ã¯å€ãã®ç¶æ¿ã¯ã©ã¹ããããŸããããšãã°ããã®äŸã®ãLineãã¯ã©ã¹ãªã©ã§ãã
V655ã¹ããªã³ã°ã¯é£çµãããŸãããã䜿çšãããŸããã åŒã調ã¹ãããšãæ€èšããŠãã ããã propertyitem.cpp 1013
void PropertyVectorDistanceItem::setValue(const QVariant& variant) { if (!variant.canConvert<Base::Vector3d>()) return; const Base::Vector3d& value = variant.value<Base::Vector3d>(); Base::Quantity q = Base::Quantity(value.x, Base::Unit::Length); QString unit = QString::fromLatin1("('%1 %2'").arg(....; q = Base::Quantity(value.y, Base::Unit::Length); unit + QString::fromLatin1("'%1 %2'").arg(....; //<== setPropertyValue(unit); }
ã¢ãã©ã€ã¶ãŒã¯ãç¡æå³ãªè¡ã®è¿œå ãæ€åºããŸããã ããèŠããšãããããåçŽãªå ç®ã®ä»£ããã«ã+ =ãæŒç®åã䜿çšãããã£ãã§ãããã ãã®ãããªã³ãŒãã¯çã«ããªã£ãŠããŸãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã«ãŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ293ã294ãview3dinventorexamples.cpp 293
void LightManip(SoSeparator * root) { SoInput in; in.setBuffer((void *)scenegraph, std::strlen(scenegraph)); SoSeparator * _root = SoDB::readAll( &in ); root->addChild(_root); //<== if ( root == NULL ) return; //<== root->ref(); .... }
ééã£ãå Žæã§ãã€ã³ã¿ãŒããã§ãã¯ãã1ã€ã®äŸãä»ã®å Žæã¯ãã¡ãã§ãïŒ
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããcamããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1049ã1056ãviewprovider.cpp 1049
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããviewProviderRootããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ187ã188ãtaskcheckgeometry.cpp 187
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ209ã210ãviewproviderrobotobject.cpp 209
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ222ã223ãviewproviderrobotobject.cpp 222
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ235ã236ãviewproviderrobotobject.cpp 235
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ248ã249ãviewproviderrobotobject.cpp 248
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ261ã262ãviewproviderrobotobject.cpp 261
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããããŒãããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ274ã275ãviewproviderrobotobject.cpp 274
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããææè ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ991ã995ãpropertysheet.cpp 991
ãªãŒãã³ã«ã¹ã±ãŒãã©ã€ãã©ãª
V519 ãmyIndex [1]ãå€æ°ã«ã¯ãå€ã2åé£ç¶ããŠå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ60ã61ãbrepmesh_pairofindex.hxx 61
//! Prepends index to the pair. inline void Prepend(const Standard_Integer theIndex) { if (myIndex[1] >= 0) Standard_OutOfRange::Raise ("BRepMesh_PairOfIndex...."); myIndex[1] = myIndex[0]; myIndex[1] = theIndex; }
ãã®äŸã§ã¯ãã€ã³ããã¯ã¹1ã®é åèŠçŽ 'myIndex'ã®å€ãäžæžããããŸããã
myIndex[1] = myIndex[0]; myIndex[0] = theIndex;
SALOME Smeshã¢ãžã¥ãŒã«
V501 ã&&ãæŒç®åã®å·Šå³ã«ã¯ãåäžã®ãµãåŒã0 <= theParamsHint.YïŒïŒãããããŸãã smesh_block.cpp 661
bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint, gp_XYZ& theParams, const int theShapeID, const gp_XYZ& theParamsHint) { .... bool hasHint = ( 0 <= theParamsHint.X() && theParamsHint.X() <= 1 && 0 <= theParamsHint.Y() && theParamsHint.Y() <= 1 && 0 <= theParamsHint.Y() && theParamsHint.Y() <= 1 ); //<== .... }
ååãªæ€èšŒ.ZïŒïŒããªãããšã¯æããã§ãã ãã®ã¯ã©ã¹ã«ã¯ãã®ãããªæ©èœãããããgp_XYZããšãåŒã°ããŸãã
V503ããã¯ç¡æå³ãªæ¯èŒã§ãïŒãã€ã³ã¿ãŒ<0ãdriverdat_r_smds_mesh.cpp 55
Driver_Mesh::Status DriverDAT_R_SMDS_Mesh::Perform() { .... FILE* aFileId = fopen(file2Read, "r"); if (aFileId < 0) { fprintf(stderr, "....", file2Read); return DRS_FAIL; } .... }
ãã€ã³ã¿ãŒããŒãããå°ããããããšã¯ã§ããŸããã æ¬ãã€ã³ã¿ãŒãããã«ããfopenïŒïŒé¢æ°ã䜿çšããæãåçŽãªäŸã§ããé¢æ°ã®å€ã¯==ãŸãã¯ïŒ=ã§NULLãšæ¯èŒãããŸãã
ãã®ãããªã³ãŒããã©ã®ããã«è¡šç€ºãããã®ãçåã«æããŸããã ããããç§ã®ååã®Andrei Karpovã¯ã openïŒïŒé¢æ°ããã€ãŠäœ¿çšãããŠããã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ãããšãã«ãããé »ç¹ã«èµ·ããããšã瀺åããŸããã ãã®é¢æ°ã¯ãã±ãŒã¹ã§-1ãè¿ããæ¯èŒ<0ã¯éåžžã«é©åã§ãã ããã°ã©ã ã®ãªãã¡ã¯ã¿ãªã³ã°ãŸãã¯ç§»æ€ã®éçšã§ããã®é¢æ°ã¯fopenïŒïŒã«çœ®ãæããããŸããããã§ãã¯ã®ä¿®æ£ãå¿ããŠããŸãã
å¥ã®ãã®ãããªå ŽæïŒ
- V503ããã¯ç¡æå³ãªæ¯èŒã§ãïŒãã€ã³ã¿ãŒ<0ãdriverdat_w_smds_mesh.cpp 41
V562ããŒã«åã®å€ã12 :! MyType == SMESHDS_MoveNodeã®å€ãšæ¯èŒããã®ã¯å¥åŠã§ãã smeshds_command.cpp 75
class SMESHDS_EXPORT SMESHDS_Command { .... private: SMESHDS_CommandType myType; .... }; enum SMESHDS_CommandType { SMESHDS_AddNode, SMESHDS_AddEdge, SMESHDS_AddTriangle, SMESHDS_AddQuadrangle, .... }; void SMESHDS_Command::MoveNode(....) { if (!myType == SMESHDS_MoveNode) //<== { MESSAGE("SMESHDS_Command::MoveNode : Bad Type"); return; } .... }
ãSMESHDS_CommandTypeããšããååã®åæããããå€ãã®å®æ°ããããŸãã ã¢ãã©ã€ã¶ãŒã誀ã£ããã§ãã¯ãæ€åºããŸããããã®ã¿ã€ãã®å€æ°ã¯ååä»ãå®æ°ãšæ¯èŒãããŸãããããã§åŠå®èšå·ã¯äœãããŸãã?? ã»ãšãã©ã®å Žåããã§ãã¯ã¯æ¬¡ã®ããã«ãªããŸãã
if (myType != SMESHDS_MoveNode) //<== { MESSAGE("SMESHDS_Command::MoveNode : Bad Type"); return; }
æ®å¿µãªããããã®ãããªãšã©ãŒã¡ãã»ãŒãžãå«ããã§ãã¯ã¯å¥ã®20ç®æã«ã³ããŒãããŸãã ãå®å šãªãªã¹ãã¯æ¬¡ã®ãšããã§ãïŒ FreeCAD_V562.txt
V567æªå®çŸ©ã®åäœã åŒæ°è©äŸ¡ã®é åºã¯ããã¹ãã©ã€ã¹ãé¢æ°ã«å¯ŸããŠå®çŸ©ãããŠããŸããã 'outerBndPos'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã smesh_pattern.cpp 4260
void SMESH_Pattern::arrangeBoundaries (....) { .... if ( outerBndPos != boundaryList.begin() ) boundaryList.splice( boundaryList.begin(), boundaryList, outerBndPos, //<== ++outerBndPos ); //<== }
å®éãã¢ãã©ã€ã¶ãŒã¯ããã«ã¯ãŸã£ãããããŸããã æªå®çŸ©ã®åäœã¯ããã«ã¯ãããŸããã ãããããšã©ãŒããããããèŠåã¯ç¡é§ã§ã¯ãããŸããã§ããã C ++æšæºã¯ãå®éã®é¢æ°åŒæ°ãè©äŸ¡ãããé åºã«å¶éã課ããŸããã ãããã£ãŠãã©ã®å€ãé¢æ°ã«æž¡ããããã¯ããããŸããã
ç°¡åãªäŸã§èª¬æããŸãã
int a = 5; printf("%i, %i", a, ++a);
ãã®ã³ãŒãã¯ãã5ã6ããšã6ã6ãã®äž¡æ¹ãåºåã§ããŸããçµæã¯ãã³ã³ãã€ã©ãšãã®èšå®ã«ãã£ãŠç°ãªããŸãã
V663ç¡éã«ãŒããå¯èœã§ãã ãcin.eofïŒïŒãæ¡ä»¶ã¯ãã«ãŒãããæããã«ã¯äžååã§ãã ãcin.failïŒïŒãé¢æ°åŒã³åºããæ¡ä»¶åŒã«è¿œå ããããšãæ€èšããŠãã ããã unv_utilities.hxx 63
inline bool beginning_of_dataset(....) { .... while( ((olds != "-1") || (news == "-1") ) && !in_file.eof() ){ olds = news; in_file >> news; } .... }
ãstd :: istreamãã¯ã©ã¹ã䜿çšããå ŽåããeofïŒïŒãé¢æ°ãåŒã³åºãã ãã§ã¯ã«ãŒããå®äºã§ããŸããã ããŒã¿ã®èªã¿åãäžã«é害ãçºçããå ŽåããeofïŒïŒãé¢æ°ãåŒã³åºããšãåžžã«å€ãfalseããè¿ãããŸãã ãã®å Žåã«ã«ãŒããå®äºããã«ã¯ãé¢æ° 'failïŒïŒ'ã«ãã£ãŠè¿ãããå€ã®è¿œå ãã§ãã¯ãå¿ èŠã§ãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããanElemããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1950ã1951ãsmesh_controls.cpp 1950
bool ElemGeomType::IsSatisfy( long theId ) { if (!myMesh) return false; const SMDS_MeshElement* anElem = myMesh->FindElement( theId ); const SMDSAbs_ElementType anElemType = anElem->GetType(); if (!anElem || (myType != SMDSAbs_All && anElemType != myType)) return false; const int aNbNode = anElem->NbNodes(); .... }
ãã€ã³ã¿ãanElemãã¯ãæå¹æ§ã確èªããããã1è¡äžã§åç §è§£é€ãããŸãã
ãã®ãããžã§ã¯ãã®é¡äŒŒããå ŽæïŒ
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããelemããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ3989ã3990ãsmesh_mesheditor.cpp 3989
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããanOldGrpããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1488ã1489ãsmesh_mesh.cpp 1488
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããaFaceSubmeshããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ããã§ãã¯ïŒ496ã501ãsmesh_pattern.cpp 496
Boost C ++ã©ã€ãã©ãª
V567æªå®çŸ©ã®åäœã 'this-> n_'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã regex_token_iterator.hpp 63
template<typename BidiIter> struct regex_token_iterator_impl : counted_base<regex_token_iterator_impl<BidiIter> > { .... if(0 != (++this->n_ %= (int)this->subs_.size()) || .... { .... } .... }
ïŒ =æŒç®åã®ã©ã®ãªãã©ã³ããæåã«è©äŸ¡ããããã¯äžæã§ãã ãããã£ãŠãåŒãæ£ããæ©èœãããã©ããã¯ãé次第ã§ãã
ãããã«
éçã¢ãã©ã€ã¶ãŒãè©ŠããŠå®è£ ãããããžã§ã¯ããšå®æçã«äœ¿çšãããµãŒãããŒãã£ã©ã€ãã©ãªãå®æçã«ãã§ãã¯ããŠãã ããã ããã«ãããæ°ããã³ãŒããäœæãããšããšãå€ãã³ãŒãããµããŒããããšãã®æéãç¯çŽãããŸãã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã FreeCADã®ãœãŒã¹ã³ãŒããšãã®ãç æ°ãã®äŸåé¢ä¿ã®åæ ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-Studioããã³CppCatããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã