
åœäºè éã§ç· çµãããå¥çŽæ¡ä»¶ã«åºã¥ããToonzãéçºãããããžã§ã¯ãã§ããOpenToonzãžã®ãªãŒãã³ã¢ã¯ã»ã¹ãå ¬éãããŸãã ãŸãããããã®ããã°ã©ã ã®ã¢ã¯ãã£ããŠãŒã¶ãŒã§ããStudio GhibliãéçºããèŠçŽ ãå«ãŸããŸãã ããšãã°ãã¹ã¿ãžãªãžããªã¯ãããŠã«ã®ãŠã©ãŒãã³ã°ãã£ãã¹ã«ãããåãšåå°ã®ç¥é ããããããã§ãã£ãã·ã¥ããªã©ã®çµµç»ãäœæããŸããã ãã®äžã«ã¯ãFuturamaã®æŒ«ç»ããããŸããããã¯ãOpenToonzã®ãœãŒã¹ã³ãŒãã«é¢ãããã®æããã«ãªãèšäºãæžããã£ããã«ãªããŸããã
ã¯ããã«
OpenToonzã¯2Dã¢ãã¡ãŒã·ã§ã³ãœãããŠã§ã¢ã§ãã åºæ¬ã¯ãã€ã¿ãªã¢ã®äŒç€ŸDigital Videoã«ãã£ãŠéçºãããToonzãããžã§ã¯ãã§ãã Studio Ghibliã¯ãã®ããã°ã©ã ãæ¡çšããŠãé·å¹Žã«ããã£ãŠãã®ããã°ã©ã ã®äœ¿çšã«æåããŠããŸãã ã¢ãã¡ãŒã·ã§ã³æ ç»ã«å ããŠããã®ãããžã§ã¯ãã¯ã³ã³ãã¥ãŒã¿ãŒã²ãŒã ïŒDiscworld 2ããã³ClawïŒã«ãé¢äžããŠããŸããã
ããã±ãŒãžã®äŸ¡æ Œã¯ãããŸã§10,000ãã«ã§ããããã³ãŒãã®å質ã«ã¯å€ãã®èŠæããããŸãã ãã®ãããžã§ã¯ãã¯ãããããéçã¢ãã©ã€ã¶ãŒã«ãšã£ãŠå€©ã®æµã¿ã§ãã OpenToonzã®ãœãŒã¹ã³ãŒãã®ãµã€ãºã¯FreeBSDã«ãŒãã«ã®çŽ1/10ã§ãããPVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšããŠ40以äžã®é倧ãªãšã©ãŒãèŠã€ãããŸããããããã«å€ãããããŸãïŒ
OpenToonzã¯ãVisual Studio 2013ã§PVS-StudioããŒãžã§ã³6.03éçã¢ãã©ã€ã¶ãŒã䜿çšããŠãã¹ããããŸãããéçã¢ãã©ã€ã¶ãŒã¯ãç©æ¥µçã«éçºãããC / C ++ / CïŒèšèªãšããŸããŸãªãã«ãã·ã¹ãã ããµããŒãããŸãã ãããžã§ã¯ãã®ã³ã³ãã€ã«äžã§ãã£ãŠããã³ã³ãã€ã©ã®èŠåã®æ°ãæ¥éã«å¢ãå§ãããšããç§ã¯èŠæããŠããŸããã ã¢ã»ã³ããªã®çµäºæããã®æ°ã¯1211åã§ããïŒ ã€ãŸã ãœãŒã¹ã³ãŒãã®å質管çã¯ã»ãšãã©ç¡èŠãããŠããŸããã ããã«ãäžéšã®ã³ã³ãã€ã©èŠåã¯#pragma warningãã£ã¬ã¯ãã£ãã䜿çšããŠç¡å¹ã«ãããŸããããããã§ããšã©ãŒãçºçããŸãããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã ãã®èšäºã¯ããããžã§ã¯ãã§å€ãã®å®éã®ãšã©ãŒãèŠã€ãã£ããšããäºå®ã«ãã£ãŠåºå¥ãããŸããããã¯éåžžãC / C ++ãåŠç¿ãå§ããã°ããã®åå¿è ã«ãã£ãŠäœæãããŸãã ã¡ã¢ãªãšã©ãŒãšãã€ã³ã¿ãŒãšã©ãŒã§æ€åºãããã¢ãã©ã€ã¶ãŒã®èŠåã®èª¬æãéå§ããŸãã
誀ã£ãã¡ã¢ãªåŠç

V611ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããŸãããããfreeãæ©èœã䜿çšããŠè§£æŸãããŸããã ãè¡ãå€æ°ã®èåŸã«ããæäœããžãã¯ã調ã¹ãããšãæ€èšããŠãã ããã motionblurfx.cpp 288
template <class T> void doDirectionalBlur(....) { T *row, *buffer; .... row = new T[lx + 2 * brad + 2]; // <= if (!row) return; memset(row, 0, (lx + 2 * brad + 2) * sizeof(T)); .... free(row); // <= r->unlock(); }
ããã§ãã¢ãã©ã€ã¶ãŒã¯ãäºææ§ã®ãªãæ¹æ³ã§åçã¡ã¢ãªãå²ãåœãŠããã解æŸãããããšãçºèŠããŸããã æ°ãã[]æŒç®åãåŒã³åºããåŸã delete []æŒç®åã䜿çšããŠã¡ã¢ãªã解æŸããå¿ èŠããããŸãã 2ã€ã®è§æ¬åŒ§ä»ãã§ãïŒ ããã«ã¯çç±ããããŸãã次ã®äŸãåç §ããŠãã ããã
V611ã¡ã¢ãªãŒã¯ãnew T []ãæŒç®åã䜿çšããŠå²ãåœãŠãããŸãããããdeleteãæŒç®åã䜿çšããŠè§£æŸãããŸããã ãã®ã³ãŒãã調ã¹ãããšãæ€èšããŠãã ããã ãdelete [] uPrime;ãã䜿çšããããšããå§ãããŸãã tstroke.cpp 3353
double *reparameterize3D(....) { double *uPrime = new double[size]; // <= for (int i = 0; i < size; i++) { uPrime[i] = NewtonRaphsonRootFind3D(....); if (!_finite(uPrime[i])) { delete uPrime; // <= return 0; } } .... }
C ++ã§ã¯ãæŒç®ånew / deleteããã³new [] / delete []ãäºãã«çµã¿åãããŠäœ¿çšââãããŸãã ç°ãªãæŒç®åã䜿çšããŠåçã¡ã¢ãªãå²ãåœãŠãã解æŸãããããã®ã¯ééãã§ãã äžèšã®ã³ãŒãã§ã¯ã uPrimeé åã«ãã£ãŠå æãããŠããã¡ã¢ãªã¯æ£ãã解æŸãããŸããã
æ®å¿µãªããããããå¯äžã®å Žæã§ã¯ãããŸããã OpenToonz_V611.txtãã¡ã€ã«ã«ããã«20ç®æãæžã蟌ã¿ãŸããã
V554 auto_ptrã®èª€ã£ã䜿çšã ãnew []ãã§å²ãåœãŠãããã¡ã¢ãªã¯ããdeleteãã䜿çšããŠæ¶å»ãããŸãã screensavermaker.cpp 29
void makeScreenSaver(....) { .... std::auto_ptr<char> swf(new char[swfSize]); .... }
èæ ®ããããšã©ãŒã®ä»£æ¿ããªã¢ã³ãããããŸãããããã§ã¯åé€æŒç®åã¯ã¹ããŒããã€ã³ã¿ãŒstd :: auto_ptrå ã«ãé ãããŠããŸããã ããã¯ãæªå®çŸ©ã®ããã°ã©ã ã®åäœã«ãã€ãªãããŸãã
ãšã©ãŒãä¿®æ£ããã«ã¯ã delete []æŒç®åã䜿çšããããã«æå®ããå¿ èŠããããŸãã
ã³ãŒãã®æ£ããããŒãžã§ã³ïŒ
std::unique_ptr<char[]> swf(new char[swfSize]);
V599 ãTTileSetãã¯ã©ã¹ã«ã¯ä»®æ³é¢æ°ãå«ãŸããŠããŸããããã¹ãã©ã¯ã¿ã¯ä»®æ³ãã¹ãã©ã¯ã¿ãšããŠå®£èšãããŠããŸããã cellselection.cpp 891
void redo() const { insertLevelAndFrameIfNeeded(); TTileSet *tiles; // <= bool isLevelCreated; pasteRasterImageInCellWithoutUndo(...., &tiles, ....); delete tiles; // <= TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); }
次ã«ãã¡ã¢ãªãªãŒã¯ãšãªããžã§ã¯ãã®äžå®å šãªç Žå£ã«ã€ããŠèª¬æããŸãã ãã®äŸã§ã¯ã TTileSetã¯ã©ã¹ããç¶æ¿ããããªããžã§ã¯ãã¯å®å šã«ã¯ç Žæ£ãããŸããã
TTileSetã¯ã©ã¹ã®èª¬æ ïŒ
class DVAPI TTileSet { .... protected: TDimension m_srcImageSize; typedef std::vector<Tile *> Tiles; Tiles m_tiles; public: TTileSet(const TDimension &dim) : m_srcImageSize(dim) { } ~TTileSet(); // <= .... virtual void add(const TRasterP &ras, TRect rect) = 0; .... virtual TTileSet *clone() const = 0; };
ãã®ã¯ã©ã¹ã«ã¯çŽç²ãªä»®æ³é¢æ°ãå«ãŸããŠãããæœè±¡ã¯ã©ã¹ã§ãã ãã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã¯äœæã§ããªãããã掟çã¯ã©ã¹ã§ã®ã¿äœ¿çšãããŸãã ãããã£ãŠãä»®æ³ãã¹ãã©ã¯ã¿TTileSetããªãããïŒãã¹ãã©ã¯ã¿ã¯ãããŸãããä»®æ³ãšããŠããŒã¯ãããŠããŸããïŒããã¹ãŠã®æŽŸçã¯ã©ã¹ã¯å®å šã«ã¯ãªã¢ãããŸããã
OpenToonzãœãŒã¹ã³ãŒãã§ã TTileSetãç¶æ¿ããããã€ãã®ã¯ã©ã¹ãèŠã€ããŸããã
class DVAPI TTileSetCM32 : public TTileSet class DVAPI TTileSetCM32 : public TTileSet class DVAPI TTileSetFullColor : public TTileSet class DVAPI Tile : public TTileSet::Tile
ãããã®ã¯ã©ã¹ïŒãŸãã¯ãããããç¶æ¿ãããã¯ã©ã¹ïŒã®åãªããžã§ã¯ãã¯å®å šã«ã¯ç Žæ£ãããŸããã æ£åŒã«ã¯ãããã¯æªå®çŸ©ã®ããã°ã©ã ã®åäœã«ã€ãªãããŸãã å®éã«ã¯ãããã¯ã¡ã¢ãªããã®ä»ã®ãªãœãŒã¹ã®ãªãŒã¯ã«ã€ãªããå¯èœæ§ããããŸãã
éçºè ã¯ãããã«2ã€ã®åæ§ã®å Žæããã§ãã¯ã¢ãŠãããå¿ èŠããããŸãã
- V599ãMessageParserãã¯ã©ã¹ã«ã¯ä»®æ³é¢æ°ãå«ãŸããŠããŸãããä»®æ³ãã¹ãã©ã¯ã¿ã¯ååšããŸããã tipcsrv.cpp 91
- V599ãColumnToCurveMapperãã¯ã©ã¹ã«ã¯ä»®æ³é¢æ°ãå«ãŸããŠããŸãããä»®æ³ãã¹ãã©ã¯ã¿ã¯ååšããŸããã functionselection.cpp 278
ãã€ã³ã¿ãŒã®å±éºãªäœ¿çš

V503ããã¯ç¡æå³ãªæ¯èŒã§ãïŒãã€ã³ã¿ãŒ<0ãstyleselection.cpp104
bool pasteStylesDataWithoutUndo(....) { .... if (palette->getStylePage(styleId) < 0) { // <= // styleId non e' utilizzato: uso quello // (cut/paste utilizzato per spostare stili) palette->setStyle(styleId, style); } else { // styleId e' gia' utilizzato. ne devo prendere un altro styleId = palette->getFirstUnpagedStyle(); if (styleId >= 0) palette->setStyle(styleId, style); else styleId = palette->addStyle(style); } .... }
getStylePageïŒïŒé¢æ°ã¯ãç¹å®ã®ããŒãžTPalette :: Page *ãžã®ãã€ã³ã¿ãŒãè¿ããŸãã ãã®ãããªãŒããšã®æ¯èŒã¯æå³ããããŸããã getStylePageïŒïŒé¢æ°ã®äœ¿çšãæ€çŽ¢ããåŸãä»ã®ãã¹ãŠã®ã±ãŒã¹ã§ããã®é¢æ°ã®çµæããŒããšçãããçãããªããã®ã¿ããã§ãã¯ããããã®æç¹ã§ãšã©ãŒãçºçããããšãããããŸããã
V522 NULLãã€ã³ã¿ãŒããªãŒãžã§ã³ãã®éåç §ãè¡ãããå ŽåããããŸãã è«çæ¡ä»¶ã確èªããŠãã ããã palettecmd.cpp 102
bool isStyleUsed(const TVectorImageP vi, int styleId) { .... TRegion *region = vi->getRegion(i); if (region || region->getStyle() != styleId) return true; .... }
ã»ãšãã©ã®å ŽåãæŒç®åã&&ããšã||ãã¯ãã®ã³ãŒããã©ã°ã¡ã³ãã§æ··ä¹±ããŠããŸãã ãã以å€ã®å Žåã é åãã€ã³ã¿ãŒããŒãã®å Žåãéåç §ãããŸãã
V614æœåšçã«åæåãããŠããªããã€ã³ã¿ãŒããœã±ãããã䜿çšãããŸããã 'connect'é¢æ°ã®æåã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã tmsgcore.cpp 36
void TMsgCore::OnNewConnection() //server side { QTcpSocket *socket; if (m_tcpServer) // <= socket = m_tcpServer->nextPendingConnection(); // <= assert(socket); bool ret = connect(socket, ....); // <= ret = ret && connect(socket, ....); // <= assert(ret); m_sockets.insert(socket); }
ã¢ãã©ã€ã¶ãŒã¯ãåæåãããŠããªããœã±ãããã€ã³ã¿ãŒã®æœåšçãªäœ¿çšãæ€åºããŸããã m_tcpServerå€æ°ãfalseã®å Žåããã€ã³ã¿ãŒã¯åæåãããŸããã ãã®åæåãããŠããªã圢åŒã§ã¯ãconnectïŒïŒé¢æ°ã«æž¡ãããšãã§ããŸãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããbatchesTaskããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1064ã1066ãbatches.cpp 1064
void BatchesController::update() { .... TFarmTask *batchesTask = getTask(batchesTaskId); // <= TFarmTask farmTask = *batchesTask; // <= if (batchesTask) { // <= QString batchesTaskParentId = batchesTask->m_parentId; m_controller->queryTaskInfo(farmTaskId, farmTask); int chunkSize = batchesTask->m_chunkSize; *batchesTask = farmTask; batchesTask->m_chunkSize = chunkSize; batchesTask->m_id = batchesTaskId; batchesTask->m_parentId = batchesTaskParentId; } .... }
ã³ãŒãã«ã¯ãnullãã€ã³ã¿ãŒã®éåç §ãçºçããå¯èœæ§ã®ããå€ãã®å ŽæããããŸãã éåžžãé©åãªãã§ãã¯ãååšããŸããããã€ã³ã¿ãŒã䜿çšããã1ã€ä»¥äžã®å Žæã¯ãšã«ããå®å šã§ã¯ãããŸããã ããšãã°ããã®ã³ãŒãã¹ããããã«ã¯batchesTaskãã§ãã¯ããããŸããããã§ãã¯ã®åã«ã1ã€ã®ãã€ã³ã¿ãŒéåç §ãæ¢ã«å®è¡ãããŸãã
OpenToonz_V595.txtãã¡ã€ã«ã«ããã«29ã®åæ§ã®å ŽæãæžãçããŸããã
æååãšã©ãŒ

V530é¢æ°ãtoUpperãã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã sceneviewerevents.cpp 847
void SceneViewer::keyPressEvent(QKeyEvent *event) { .... QString text = event->text(); if ((event->modifiers() & Qt::ShiftModifier)) text.toUpper(); .... }
toUpperïŒïŒã¡ãœããã¯ãæååãtextããå€æŽããŸããã ããã¥ã¡ã³ãã§ã¯ãQString QString :: toUpperïŒïŒconstãã€ãŸã å®æ°ã¡ãœããã§ãã
ã³ãŒãã®æ£ããããŒãžã§ã³ïŒ
QString text = event->text(); if ((event->modifiers() & Qt::ShiftModifier)) text = text.toUpper();
ã³ãŒãã«ã¯ãæ»ãå€ã䜿çšãããªãé¢æ°ãããã«3ã€å«ãŸããŠããŸãã ããããã¹ãŠã®å Žæã¯ä¿®æ£ãå¿ èŠã§ãã
- V530é¢æ° 'left'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã tfarmserver.cpp 569
- V530é¢æ°ãftellãã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã tiio_bmp.cpp 804
- V530é¢æ°ãaccumulateãã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã bendertool.cpp 374
V614æªåæåã€ãã¬ãŒã¿ãŒ 'it1'ã䜿çšãããŸããã fxcommand.cpp 2096
QString DeleteLinksUndo::getHistoryString() { .... std::list<TFxP>::const_iterator it1; // <= std::list<TFx *>::const_iterator ft; for (ft = m_terminalFxs.begin(); ft != ....end(); ++ft) { if (ft != m_terminalFxs.begin()) str += QString(", "); str += QString("%1- -Xsheet") .arg(QString::fromStdWString((*it1)->getName())); // <= } .... }
æååæäœã¯ãåæåãããŠããªãã€ãã¬ãŒã¿it1ã䜿çšããŸãã ã»ãšãã©ã®å Žåã1ã€ã®å Žæã§ã ftã€ãã¬ãŒã¿ã«çœ®ãæããã®ãå¿ããŠããŸããã
V642 ã_wcsicmpãé¢æ°ã®çµæããcharãåå€æ°å ã«ä¿åããããšã¯äžé©åã§ãã ããã°ã©ã ã®ããžãã¯ãå£ããŠãéèŠãªãããã倱ãããå¯èœæ§ããããŸãã tfilepath.cpp 328
bool TFilePath::operator<(const TFilePath &fp) const { .... char differ; differ = _wcsicmp(iName.c_str(), jName.c_str()); if (differ != 0) return differ < 0 ? true : false; .... }
_wcsicmpé¢æ°ã¯ã intåã®æ¬¡ã®å€ãè¿ããŸãã
- <0- string1ããstring2æªæºã
- 0- string2ã¯string2ãšåãã§ãã
- > 0- string2ã¯string2ãã倧ããã
泚æããŠãã ããã ã> 0ãã¯ä»»æã®æ°å€ãæå³ãã1ã§ã¯ãããŸããããããã®æ°å€ã¯ã2ã3ã100ã256ã1024ã5555ãªã©ã§ãã _wcsicmpé¢æ°ã®çµæã¯ãcharåã®å€æ°ã«é©åããªãå ŽåããããŸãããã®ãããæ¯èŒæŒç®åã¯äºæããªãçµæãè¿ããŸãã
V643ç°åžžãªãã€ã³ã¿ãŒæŒç®ïŒ "\\" + v [i]ã ãcharãã¿ã€ãã®å€ãæååãã€ã³ã¿ãŒã«è¿œå ãããŠããŸãã tstream.cpp 31
string escape(string v) { int i = 0; for (;;) { i = v.find_first_of("\\\'\"", i); if (i == (int)string::npos) break; string h = "\\" + v[i]; // <= v.insert(i, "\\"); i = i + 2; } return v; }
ã¢ãã©ã€ã¶ãŒã¯ãæåå®æ°ãæååãªãã©ã«ã«è¿œå ããããšã«é¢é£ãããšã©ãŒãæ€åºããŸããã æååã«æåãè¿œå ãããããšãäºæãããŠããŸããããæååãã€ã³ã¿ã«æ°å€ãè¿œå ããããããæååãªãã©ã«ãçµäºããäºæããªãçµæãçããŸãã
ããæ確ã«ããããã«ããã®ã³ãŒããšåçã®ãã®ã次ã«ç€ºããŸãã
const char *p1 = "\\"; const int delta = v[i]; const char *p2 = *p1 + delta; string h = p2;
ã³ãŒãã®æ£ããããŒãžã§ã³ïŒ
string h = string("\\") + v[i];
V655ã¹ããªã³ã°ã¯é£çµãããŸãããã䜿çšãããŸããã ããšã€ãªã¢ã¹+ "]"ãåŒã®æ€æ»ãæ€èšããŠãã ããã plasticdeformerfx.cpp 150
string PlasticDeformerFx::getAlias(....) const { std::string alias(getFxType()); alias += "["; .... if (sd) alias += ", "+toString(sd, meshColumnObj->paramsTime(frame)); alias + "]"; // <= return alias; }
ã¢ãã©ã€ã¶ãŒã¯ãçµæã䜿çšãããŠããªãåŒãæ€åºããŸããã æãå¯èœæ§ãé«ãã®ã¯ãæŒç®åã+ãã誀ã£ãŠã+ =ãã§ã¯ãªããã®é¢æ°ã«èšè¿°ãããŠããããšã§ãã ãã®çµæãããã°ã©ããèšç»ããããã«ãæ«å°Ÿã®è§æ¬åŒ§ã¯ãšã€ãªã¢ã¹è¡ã«è¿œå ãããŸããã
ç¡å¹ãªäŸå€

V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow domain_errorïŒFOOïŒ; pluginhost.cpp 1486
void Loader::doLoad(const QString &file) { .... int ret = pi->ini_(host); if (ret) { delete host; std::domain_error("failed initialized: error on ...."); } .... }
é¢æ°ã§ã¯ã throwããŒã¯ãŒãã¯èª€ã£ãŠå¿ããããŸãã çµæ-ãã®ã³ãŒãã¯ããšã©ãŒã®å Žåã«äŸå€ãã¹ããŒããŸããã ã³ãŒãã®ä¿®æ£ããŒãžã§ã³ïŒ
throw std::domain_error("failed initialized: error on ....");
V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã iocommand.cpp 1620
bool IoCmd::saveLevel(....) { .... try { sl->save(fp, TFilePath(), overwritePalette); } catch (TSystemException se) { // <= QApplication::restoreOverrideCursor(); MsgBox(WARNING, QString::fromStdWString(se.getMessage())); return false; } catch (...) { .... } .... }
ã¢ãã©ã€ã¶ãŒã¯ãå€ã«ããäŸå€ã®ãã£ããã«é¢é£ããæœåšçãªãšã©ãŒãæ€åºããŸããã ã€ãŸããã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠã TSystemExceptionåã®æ°ããseãªããžã§ã¯ããæ§ç¯ãããŸãã ããã«ããã TSystemExceptionããç¶æ¿ããã¯ã©ã¹ã«ä¿åãããäŸå€æ å ±ã®äžéšã倱ãããŸã ã
åæ§ã®äžå¯©ãªå ŽæïŒ
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã iocommand.cpp 2650
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã projectpopup.cpp 522
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã projectpopup.cpp 537
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã projectpopup.cpp 635
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã tlevel_io.cpp 130
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã calligraph.cpp 161
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã calligraph.cpp 165
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã patternmap.cpp 210
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã patternmap.cpp 214
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã patternmap.cpp 218
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã scriptbinding_level.cpp 221
ç¡å¹ãªæ¡ä»¶

V547åŒ 'ïŒintïŒstartOutPoints.sizeïŒïŒïŒ 2ïŒ= 2'ã¯åžžã«trueã§ãã rasterselection.cpp 852
TStroke getIntersectedStroke(TStroke &stroke, TRectD bbox) { .... for (t = 0; t < (int)outPoints.size(); t++) addPointToVector(...., (int)startOutPoints.size() % 2 != 2); .... }
èå³æ·±ãééãã æãå¯èœæ§ãé«ãã®ã¯ã ãµã€ãºïŒïŒã®å€ãå¶æ°ãå¥æ°ããå€æããããšãèšç»ããããšã§ãã ãããã£ãŠã2ã§å²ã£ãäœãã¯ãŒããšæ¯èŒããå¿ èŠããããŸãã
V502ãããããã?:ãæŒç®åã¯äºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããŸãã ãïŒïŒãæŒç®åã¯ãã+ãæŒç®åãããåªå 床ãäœããªããŸãã igs_motion_wind_pixel.cpp 127
void rgb_to_lightness_( const double re, const double gr, const double bl, double &li) { li=((re < gr) ? ((gr < bl) ? bl : gr) : ((re < bl) ? bl : re) + (gr < re) ? ((bl < gr) ? bl : gr) : ((bl < re) ? bl : re)) / 2.0; }
ãã®ã³ãŒããã©ã°ã¡ã³ãã§ã¯ãäžé æŒç®åãïŒïŒãã®åªå 床ã«é¢é£ãããšã©ãŒãçºçããŸããã ãã®åªå é äœã¯ãå ç®æŒç®åã®åªå é äœãããäœããªã£ãŠããŸãã ãã®çµæãæ¡ä»¶ïŒre <grïŒã falseã®å Žåãããã«èšç®ãæ£ããå®è¡ãããŸãããå®éã®å€æ°ã¯è«ççãªãã®ãšå ç®ããå§ããŸãã
è€æ°ã®äžé æŒç®åãäžç·ã«äœ¿çšããªãã§ãã ãã-ããã¯ãã³ãŒãã«ãšã©ãŒãè¿œå ããæçã®æ¹æ³ã§ãã
V590 'state ==ïŒ-3ïŒ||ã®æ€æ»ãæ€èšãã stateïŒ= 0 'åŒã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã psdutils.cpp 174
int psdUnzipWithoutPrediction(....) { .... do { state = inflate(&stream, Z_PARTIAL_FLUSH); if (state == Z_STREAM_END) break; if (state == Z_DATA_ERROR || state != Z_OK) // <= break; } while (stream.avail_out > 0); .... }
ç¢å°ã§ããŒã¯ãããæ¡ä»¶ã¯ãéšååŒãstate == Z_DATA_ERRORãã®çµæã«äŸåããŸããã ããã¯ãæ¡ä»¶åŒå šäœã®ççå€è¡šãäœæãããšç°¡åã«ç¢ºèªã§ããŸãã
ã³ããŒã¢ã³ãããŒã¹ãããã°ã©ãã³ã°

V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ1448ã1454ãtcenterlineskeletonizer.cpp 1448
inline void Event::processVertexEvent() { .... if (newLeftNode->m_concave) { // <= newLeftNode->m_notOpposites = m_generator->m_notOpposites; append<vector<ContourEdge *>, vector<ContourEdge *>::.... newLeftNode->m_notOpposites.push_back(newRightNode->m_edge); newLeftNode->m_notOpposites.push_back(newRightNode->....); } else if (newLeftNode->m_concave) { // <= newRightNode->m_notOpposites = m_generator->m_notOpposites; append<vector<ContourEdge *>, vector<ContourEdge *>::.... newRightNode->m_notOpposites.push_back(newLeftNode->m_edge); newRightNode->m_notOpposites.push_back(newLeftNode->....); } .... }
æ¡ä»¶å ã®å€æ°newLeftNodeãšnewRightNodeã¯ãããã§æ··åãããŸãã ãã®ãããªãšã©ãŒã®çµæãšããŠã elseãã©ã³ãã¯å®è¡ãããŸããã ãããããæ¡ä»¶ã®1ã€ã¯ifïŒnewRightNode-> m_concaveïŒã®ããã«ãªããŸãã
V501 ã||ãã®å·Šãšå³ã«åäžã®ãµãåŒããããŸã æŒç®åïŒm_cutLx || m_cutLx canvassizepopup.cpp 271
bool m_cutLx, m_cutLy; void PeggingWidget::on00() { .... m_11->setIcon(...).rotate(m_cutLx || m_cutLx ? -90 : 90),....)); .... }
ã³ãŒãã«ã¯ã m_cutLxãšm_cutLyã® 2ã€ã®è«çå€æ°ãå«ãŸããŠããŸããããããã¯æåŸã®1æåã ãç°ãªããŸãã äžèšã®äŸã§ã¯ãåãå€æ°m_cutLxã䜿çšããŠããŸãã ããããããããã®1ã€ã§ã¿ã€ããã¹ãè¡ãããŸããã
V501 ã||ãã®å·ŠåŽãšå³åŽã«åäžã®ãµãåŒãparentTask-> m_status == AbortedãããããŸãã æŒç®åã tfarmcontroller.cpp 1857
void FarmController::taskSubmissionError(....) { .... if (parentTask->m_status == Aborted || // <= parentTask->m_status == Aborted) { // <= parentTask->m_completionDate = task->m_completionDate; if (parentTask->m_toBeDeleted) m_tasks.erase(itParent); } .... }
ã¢ãã©ã€ã¶ãŒã¯ã Abortedå®æ°ãšã®2ã€ã®åäžã®æ¯èŒãèŠã€ããŸããã ãã¡ã€ã«ãæ€çŽ¢ããåŸããã®ãã¡ã€ã«ã®è¡2028ã§ãåäžã®ã³ãŒããããã¯ãèŠã€ããŸãããã次ã®æ¡ä»¶ããããŸãã
if (parentTask->m_status == Completed || parentTask->m_status == Aborted) {
ã»ãšãã©ã®å Žåããã®å Žæã§ã¯æ¡ä»¶åŒã¯äŒŒãŠããã¯ãã§ãã
V501 ã||ãã®å·Šãšå³ã«åäžã®å¯æ¬¡åŒãcornerCoords.y> upperBoundãããããŸãã æŒç®åã tellipticbrush.cpp 1020
template <typename T> void tellipticbrush::OutlineBuilder::addMiterSideCaps(....) { .... if (cornerCoords == TConsts::napd || cornerCoords.x < lowerBound || cornerCoords.y > upperBound || cornerCoords.y < lowerBound || cornerCoords.y > upperBound) { .... } .... }
次ã«ãããã°ã©ããŒã¯xã®ä»£ããã«yã䜿çšããŠå°ããªã¿ã€ããã¹ãè¡ããŸããã
ã³ããŒããŒã¹ãããã°ã©ãã³ã°ã®çµæãšããŠçºçãã6ã€ã®ãšã©ãŒã«ã€ããŠã¯èª¬æããŸãããããªã¹ãã瀺ããŸãã ãããã®å Žæã¯ãéçºè ã確èªããå¿ èŠããããŸãã
- V501 '||'ã®å·Šãšå³ã«åããµãåŒ 's.m_repoStatus == "modified"'ããããŸãã æŒç®åã svnupdatedialog.cpp 210
- V501ã||ãã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãm_lineEdit-> hasFocusïŒïŒãããããŸãã æŒç®åã framenavigator.cpp 44
- V517ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ750ã825ãtpalette.cpp 750
- V517ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªïŒ123ã126ãigs_density.cpp 123
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã typetool.cpp 813
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€ãè¿ããŸãïŒã³ã³ãã tgrammar.cpp 731
ãã®ä»ã®ãšã©ãŒ

V665ããããããã®ã³ã³ããã¹ãã§ã¯ã#pragma warningïŒdefaultïŒXïŒãã®äœ¿çšæ³ãæ£ãããããŸããã 代ããã«ã#pragma warningïŒpush / popïŒãã䜿çšããå¿ èŠããããŸãã è¡ã確èªïŒ20ã205ãtspectrum.h 205
#ifdef WIN32 #pragma warning(disable : 4251) #endif .... #ifdef WIN32 #pragma warning(default : 4251) #endif
ãããã³ã³ãã€ã©èŠåããªãã«ããæ¹æ³ã§ããããã«ããããããããã®ãããžã§ã¯ãã§ã¯æ³šæãæã£ãŠããŸãã ãšã©ãŒã¯ã ïŒpragma warningïŒããã©ã«ãïŒXïŒãã£ã¬ã¯ãã£ãã«èŠåãå«ãŸããŠããªããããããããã©ã«ãç¶æ ã«èšå®ããããšã§ããããã¯ããã°ã©ããŒãæåŸ ãããã®ã§ã¯ãªãå ŽåããããŸãã
ã³ãŒãã®ä¿®æ£ããŒãžã§ã³ïŒ
#ifdef WIN32 #pragma warning(push) #pragma warning(disable : 4251) #endif .... #ifdef WIN32 #pragma warning(pop) #endif
V546ã¯ã©ã¹ã®ã¡ã³ããŒã¯ããèªäœã§åæåãããŸãïŒ 'm_subIdïŒm_subIdïŒ'ã tfarmcontroller.cpp 572
class TaskId { int m_id; int m_subId; public: TaskId(int id, int subId = -1) : m_id(id), m_subId(m_subId){};
ã¯ã©ã¹åæåãªã¹ãã®èå³æ·±ããšã©ãŒã m_subldãã£ãŒã«ãã¯ããèªäœã§åæåãããŸãããããããm_subIdïŒsubIdïŒãæžããããšæãã§ãããã
V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ã9ãã€ã³ããã¯ã¹ã¯é åã®å¢çãè¶ ããŠããŸãã tconvolve.cpp 123
template <class PIXOUT> void doConvolve_cm32_row_9_i(....) { TPixel32 val[9]; // <= .... for (int i = 0; i < 9; ++i) { // <= OK .... else if (tone == 0) val[i] = inks[ink]; else val[i] = blend(....); } pixout->r = (typename PIXOUT::Channel)(( val[1].r * w1 + val[2].r * w2 + val[3].r * w3 + val[4].r * w4 + val[5].r * w5 + val[6].r * w6 + val[7].r * w7 + val[8].r * w8 + val[9].r * w9 + // <= ERR (1 << 15)) >> 16); pixout->g = (typename PIXOUT::Channel)(( val[1].g * w1 + val[2].g * w2 + val[3].g * w3 + val[4].g * w4 + val[5].g * w5 + val[6].g * w6 + val[7].g * w7 + val[8].g * w8 + val[9].g * w9 + // <= ERR (1 << 15)) >> 16); pixout->b = (typename PIXOUT::Channel)(( val[1].b * w1 + val[2].b * w2 + val[3].b * w3 + val[4].b * w4 + val[5].b * w5 + val[6].b * w6 + val[7].b * w7 + val[8].b * w8 + val[9].b * w9 + // <= ERR (1 << 15)) >> 16); pixout->m = (typename PIXOUT::Channel)(( val[1].m * w1 + val[2].m * w2 + val[3].m * w3 + val[4].m * w4 + val[5].m * w5 + val[6].m * w6 + val[7].m * w7 + val[8].m * w8 + val[9].m * w9 + // <= ERR (1 << 15)) >> 16); .... }
誰ãã1ã9ã®ã€ã³ããã¯ã¹ã§9ã€ã®èŠçŽ ãããªãvalé åã«ã¢ã¯ã»ã¹ãã倧ããªã³ãŒãã0ã8ã®ã€ã³ããã¯ã¹ã§é åã«æ£ããã¢ã¯ã»ã¹ããã«ãŒããè¿ãã«ãããŸãã
V556ç°ãªãåæåã®å€ãæ¯èŒãããŸãïŒm_actionïŒ= EDIT_SEGMENTã ã¿ã€ãïŒã¢ã¯ã·ã§ã³ãCursorTypeã controlpointeditortool.cpp 257
enum Action { NONE, RECT_SELECTION, CP_MOVEMENT, SEGMENT_MOVEMENT, IN_SPEED_MOVEMENT, OUT_SPEED_MOVEMENT }; enum CursorType { NORMAL, ADD, EDIT_SPEED, EDIT_SEGMENT, NO_ACTIVE }; void ControlPointEditorTool::drawMovingSegment() { int beforeIndex = m_moveSegmentLimitation.first; int nextIndex = m_moveSegmentLimitation.second; if (m_action != EDIT_SEGMENT || // <= beforeIndex == -1 || nextIndex == -1 || !m_moveControlPointEditorStroke.getStroke()) return; .... }
ã¢ãã©ã€ã¶ãŒã¯ãç°ãªãã¿ã€ãã®åæå€ã®æ¯èŒãæ€åºããŸããã ã³ãŒãæ€çŽ¢ã䜿çšããŠãã¯ã©ã¹m_actionã®ãã£ãŒã«ããæ£ããåã§åæåããããã®å Žæã§å¥ã®åã®å®æ°ãšæ¯èŒãããããšãããããŸããã
ãããã«

ãã§ã«è¿°ã¹ãããã«ãOpenToonzãããžã§ã¯ãã¯éçã³ãŒãã¢ãã©ã€ã¶ãŒã«ãšã£ãŠå€©ã®æµã¿ã§ãããã®ãããªå°ããªãããžã§ã¯ãã«ã¯å€ãã®é倧ãªãšã©ãŒãå«ãŸããŠããŸãã ãã®èšäºã«ã¯ããã¹ãŠã®ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžãå«ãŸããŠããã ãã§ãªãããã®æ°ãå€ãããã«å€ãã®èå³æ·±ãæ·±å»ãªèŠåãå«ãŸããŠããŸããã§ããã ãã¡ãããéçºè ãã©ãŒã©ã ã®ãã§ãã¯ã«ã€ããŠæžããŠãããŸãã ããããã圌ãã¯ã³ãŒãã®å質ãæ¹åããããšã«èå³ãããã§ãããã
ãœãããŠã§ã¢è£œåUniversal Scene DescriptionïŒUSDïŒã®ã³ãŒããéãæå³ããPixarã«ãã£ãŠçºè¡šãããŸããã ãã®ã€ãã³ãã楜ãã¿ã«ããŠããŸãã
C / C ++ / CïŒãããžã§ã¯ãã§PVS-Studioãè©ŠããŠã¿ãããšããå§ãããŸãã ã¢ãã©ã€ã¶ãŒã¯Windowsç°å¢ã§å®è¡ãããããŸããŸãªãã«ãã·ã¹ãã ããµããŒãããŸãã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã Toonzã®ã³ãŒãã«ã¯å€ãã®èŠæãæ®ãããŠããŸã ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã