ããŸããŸãã€ã³ã¿ãŒãããäžã§ãäžèŠç°ãªããããã¯ãã€ãŸã倧åŠãšåŠçåãã®ç¡æã®Matlabã®ä»£æ¿æ¡ãããã³éçã³ãŒãåæã䜿çšããã¢ã«ãŽãªãºã ã®ãšã©ãŒã®çºèŠã«ã€ããŠè©±ããŠããŸããã ãããã®è°è«ã¯ãã¹ãŠãçŸä»£ã®ããã°ã©ã ã®ã³ãŒãã®ã²ã©ãå質ãçµã¿åãããŠããŸãã ç¹ã«ãæ°åŠè ãç§åŠè åãã®ãœãããŠã§ã¢ã®å質ã åé¡ã¯ããã®ãããªããã°ã©ã ã®å©ããåããŠå®è¡ãããèšç®ãšç 究ãžã®ä¿¡é Œããå³åº§ã«çããŸãã ãã®ãããã¯ãæ¯ãè¿ãããšã©ãŒãæ¢ããŠã¿ãŸãããã
ã¯ããã«
ãã¢ã«ãŽãªãºã ããšããçšèªãå®çŸ©ããããšããå§ããããšæããŸãã ã¢ã«ãŽãªãºã ã¯ãç¹å®ã®çµæãéæããããã®ãšã°ãŒãã¥ãŒã¿ãŒã®ã¢ã¯ã·ã§ã³ã®é åºã説æããäžé£ã®åœä»€ã§ãïŒ ãŠã£ãããã£ã¢ ïŒã ãããã£ãŠããœãŒã¹ã³ãŒããã¢ã«ãŽãªãºã ãšæ®ãã®ã³ãŒãã«åå²ããªãã§ãã ããã ããšãã°ããœãŒãã¢ã«ãŽãªãºã ã¯ããã¡ã€ã«ãéããæååå ã®æåãæ€çŽ¢ãããªã©ã®ã³ãŒããšãŸã£ããåãã§ãã ã³ãŒãã«ã¯ãšã©ãŒãå«ãŸããŠããå¯èœæ§ãããã幞ããªããšã«ãéçã³ãŒãåæã®ããŒã«ã䜿çšããŠãåæ段éã§å€ãã®ãšã©ãŒãæ€åºã§ããŸãã
ãã ãããããããã¢ã«ãŽãªãºã ããšã©ãŒãæ€çŽ¢ããããã«ãããã€ãã®æ°åŠçããã±ãŒãžã®ã³ãŒããåæããããšã«ããŸããã ãã®ãããªã³ãŒãã«ã¯ãããã€ãã®æ°åŒãåçŽã«ããã°ã©ã ãããå€ãã®æ©èœããããŸãã ã³ãŒãã«ã€ããŠããèããŠããªã人ãããããšãããããŸãã ãããŠãããã«å¿ããŠãã©ã®ãããªãšã©ãŒãçºçããå¯èœæ§ããããŸãã
ãã®èšäºã«èšèŒãããŠãããã¹ãŠã®ã³ãŒãã®æ¬ é¥ãç¹å®ããããã«ãC / C ++ / CïŒããã°ã©ãã³ã°èšèªã®Windows / Linuxã§å®è¡ãããPVS-Studioéçã¢ãã©ã€ã¶ãŒããŒãžã§ã³6.15ã䜿çšããŸããã
ãµãŒãããŒãã£ããã®ãšã©ãŒ
ãã®è©±ã¯ã Point Cloud Library ïŒPCLã GitHub ïŒãããžã§ã¯ãã§ãã°ãèŠã€ããããšããå§ãŸããŸããã å€ãã®ééããèŠã€ããŠèšäºãæžããšããç®æšãèªåèªèº«ã«èšå®ããã«ãã¬ããŒãã調ã¹ããšãããéåžžã«èå³æ·±ããšã©ãŒãèŠã€ãããŸããã
V533 ãforãæŒç®åå ã§èª€ã£ãå€æ°ãã€ã³ã¯ãªã¡ã³ããããŠããå¯èœæ§ããããŸãã ãiãã®æ€èšãæ€èšããŠãã ããã sparsematrix.inl 212
template<class T> SparseMatrix<T>& SparseMatrix<T>::operator *= (const T& V) { for( int i=0 ; i<rows ; i++ ) for( int ii=0 ; ii<rowSizes[i] ; i++ ) m_ppElements[i][ii].Value *= V; return *this; }
ãªãŒããŒããŒããããæŒç®å "* ="ã§ã¯ããã¹ãŠã®è¡åèŠçŽ ã«ç¹å®ã®Vå€ãä¹ç®ããŸãã ã³ãŒãã®äœæè ã¯ããã®ã¢ã«ãŽãªãºã ã«å¯ŸããŠéåžžã«é倧ãªèª€ããç¯ããŸããããã®çç±ã¯ãè¡åã®æåã®åã®ã¿ãå€åããé åã®å¢çãè¶ ããç¡éã«ãŒããçºçããå¯èœæ§ãããããã§ãã
ãã®ã³ãŒãã¯ã Poisson Surface Reconstructionæ°åŠã©ã€ãã©ãªããã®ãã®ã§ãã ãšã©ãŒãã³ãŒãã®ææ°ããŒãžã§ã³ã«ååšããããšã確èªããŸããã ãã®ã©ã€ãã©ãªãããã«å€ãã®ãããžã§ã¯ãã«å«ãŸããããšãèããã®ã¯æãã§ãã
次ã«ããã1ã€ã®å¥åŠãªã³ãŒãã瀺ããŸãã
V607ææè ã®ãªãè¡šçŸãj <æ®ããã allocator.h 120
void rollBack(const AllocatorState& state){ .... if(state.index<index){ .... for(int j=0;j<remains;j++){ memory[index][j].~T(); new(&memory[index][j]) T(); } index=state.index; remains=state.remains; } else{ for(int j=0;j<state.remains;j<remains){ // <= memory[index][j].~T(); new(&memory[index][j]) T(); } remains=state.remains; } .... }
ãã®å¥åŠãªã«ãŒãã¯ãŸã ã³ãŒãã«æ®ã£ãŠãããããé »ç¹ã«å®è¡ãããããšã¯ãªããšæããŸãã ããããããããããã°ã©ã ã®ç°åžžçµäºã«ããã誰ããå¥åŠãªãã³ã°ã¢ãããèµ·ãããŸããã ã³ãŒãã®å質ã«é¢ããããã€ãã®ã¢ã€ãã¢ã圢æãããŸããã ããã§ã¯ããã倧ããªãããžã§ã¯ãã§ããScilabã«ç§»ããŸããããScilabã§ã¯ãé çã®çš®ãåŸ ã£ãŠããŸãã
ãµã€ã©ã
ãããžã§ã¯ãã«ã€ããŠ
Scilabã¯ãå·¥åŠïŒæè¡ïŒããã³ç§åŠèšç®ã®ããã®ãªãŒãã³ãªç°å¢ãæäŸãããå¿çšæ°åŠããã°ã©ã ã®ããã±ãŒãžã§ãã ãã®éçºç°å¢ã¯ãããŸããŸãªæ©é¢ãç 究ã§åºã䜿çšãããŠããMatlabã®å ¬ã«å©çšå¯èœãªä»£æ¿æ段ã®1ã€ã§ãã Matlabã®ãã1ã€ã®äººæ°ã®ãã代æ¿æ段ã¯GNU Octaveã§ããã以åã¯ãããã®ãããžã§ã¯ãã«æ¢ã«æ³šæãæã£ãŠããŸããã
- Scilabãã§ã㯠ïŒ2014幎3æïŒ;
- GNU Octave ïŒ2015幎8æïŒã確èªããŠãã ãã ã
Scilabã«é¢ããæ°ããèšäºãæžãåã«ãå€ãèšäºãèªãã§ã2ã€ã®çµè«ã ããåºããŸããã
- 3幎éã圌ãã¯ã»ãã®2ã3ã®å Žæãä¿®æ£ããŸããã§ããïŒããã¹ãŠããã®ããã«åäœããã®ã«ããªãäžæ確ãªåäœãä¿®æ£ããã®ã§ããïŒã-éçºè ã¯èããããã§ãïŒã
- ãããžã§ã¯ãã«ã¯å€ãã®æ°ãããã°ããããŸãã èªè ã飜ããããªãããã«ãèšäºã«æ°ããŒã¹ã ãå ¥ããããšã«ããŸããã
Visual Studioã®ãããžã§ã¯ããã¡ã€ã«ã¯Scilabã®ãœãŒã¹ã«ããã«ååšããã®ã§ãã¯ã³ã¯ãªãã¯ã§ãããžã§ã¯ããéããŠç¢ºèªã§ããŸãã
çŸããã¿ã€ããã¹
V530é¢æ° 'back'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã sci_mscanf.cpp 274
types::Function::ReturnValue sci_mscanf(....) { .... std::vector<types::InternalType*> pITTemp = std::vector<...>(); .... case types::InternalType::ScilabString : { .... pITTemp.pop_back(); // <= pITTemp.push_back(pType); } break; case types::InternalType::ScilabDouble : { .... pITTemp.back(); // <= ??? pITTemp.push_back(pType); } break; .... }
ã³ãŒãè£å®ãããã°ã©ããŒã®ããªãã¯ãæŒããããã§ãã ã³ãŒãã§ã¯ã sci_mscanfé¢æ°ã¯åžžã«ãã¯ãã«ã®æåŸã®èŠçŽ ãåé€ããŠããæ°ããèŠçŽ ãè¿œå ããŸãããããã°ã©ããŒã¯pop_backïŒïŒã®ä»£ããã«backïŒïŒé¢æ°ãåŒã³åºãããšã§ãã¹ãç¯ããŸããã ãã®ããã«backïŒïŒé¢æ°ãåŒã³åºããŠãæå³ããããŸããã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããBlock.inptrããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ478ã479ãsci_model2blk.cpp 478
types::Function::ReturnValue sci_model2blk(....) { .... Block.inptr[i] = MALLOC(size); if (Block.inptr == nullptr) { freeBlock(&Block); Scierror(888, _("%s : Allocation error.\n"), name.data()); return types::Function::Error; } memset(Block.inptr[i], 0x00, size); .... }
ã¿ã€ããã¹ã®éåžžã«èå³æ·±ãã±ãŒã¹ã§ãã¡ã¢ãªã®å²ãåœãŠã®å¶åŸ¡ãæ©èœããªããªã£ãããã§ãã ã»ãšãã©ã®å Žåãæ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
Block.inptr[i] = MALLOC(size); if (Block.inptr[i] == nullptr) { .... }
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpwstLinesããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ããã§ãã¯ïŒ78ã79ãmgetl.cpp 78
int mgetl(int iFileID, int iLineCount, wchar_t ***pwstLines) { *pwstLines = NULL; .... *pwstLines = (wchar_t**)MALLOC(iLineCount * sizeof(wchar_t*)); if (pwstLines == NULL) { return -1; } .... }
é©ãã»ã©äŒŒããšã©ãŒã ã³ãŒãã®äœæè ã¯æãã«ãŠã³ãããªãã£ããããæ¡ä»¶ã§ééã£ããã€ã³ã¿ãŒããã§ãã¯ãããŸãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããarray_sizeããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ããã§ãã¯ïŒ67ã68ãdiary_manager.cpp 67
wchar_t **getDiaryFilenames(int *array_size) { *array_size = 0; if (SCIDIARY) { std::list<std::wstring> wstringFilenames = SCIDIARY->get.... *array_size = (int)wstringFilenames.size(); if (array_size > 0) { .... } .... }
å®å®æ§ã¯ç¿çã®å åã§ãã ããã°ã©ããŒã¯åã³ãã€ã³ã¿ãŒãéåç §ããã®ãå¿ããŸãããããã¯ãããé åã®ãµã€ãºããŒããšæ¯èŒãããã®ã§ã¯ãªãããã®å€æ°ãžã®ãã€ã³ã¿ãŒãæ¯èŒãããçç±ã§ãã
V501 ã||ãã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãstrncmpïŒtxã "ïŒ pi"ã3ïŒ== 0ãããããŸãã æŒç®åã stringtocomplex.c 276
static int ParseNumber(const char* tx) { .... else if (strlen(tx) >= 4 && (strncmp(tx, "%eps", 4) == 0 || strncmp(tx, "+%pi", 4) == 0 || strncmp(tx, "-%pi", 4) == 0 || strncmp(tx, "+Inf", 4) == 0 || strncmp(tx, "-Inf", 4) == 0 || strncmp(tx, "+Nan", 4) == 0 || strncmp(tx, "-Nan", 4) == 0 || strncmp(tx, "%nan", 4) == 0 || strncmp(tx, "%inf", 4) == 0 )) { return 4; } else if (strlen(tx) >= 3 && (strncmp(tx, "+%e", 3) == 0 || strncmp(tx, "-%e", 3) == 0 || strncmp(tx, "%pi", 3) == 0 // <= || strncmp(tx, "Nan", 3) == 0 || strncmp(tx, "Inf", 3) == 0 || strncmp(tx, "%pi", 3) == 0)) // <= { return 3; } .... }
ãã®é¢æ°ã«ã¯ãæ°å€ã解æããããã®ã³ãŒããå«ãŸããŠããŸãã ã¢ãã©ã€ã¶ãŒã¯ããïŒ piãã®2ã€ã®åäžè¡ãšçãããæ¯èŒãèŠã€ããŸããã é£æ¥ããã³ãŒããèŠããšãéè€ããè¡ã®ä»£ããã«ãã-ïŒ piããŸãã¯ã-Infããšããè¡ããããšæ³å®ã§ããŸãã ããã¯äœåãªã³ããŒãããã³ãŒãè¡ã§ããå¯èœæ§ããããŸãããåé€ããæ¹ãé©åã§ãã
æäœã®åªå é äœ
V502ãããããã?:ãæŒç®åã¯äºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããŸãã ãïŒïŒãæŒç®åã®åªå é äœã¯ãã==ãæŒç®åãããäœããªã£ãŠããŸãã sci_sparse.cpp 49
types::Function::ReturnValue sci_sparse(....) { bool isValid = true; .... for (int i = 0 ; isValid && i < in.size() ; i++) { switch (in[i]->getType()) { case types::InternalType::ScilabBool : case types::InternalType::ScilabSparseBool : { isValid = (i == (in.size() > 1) ? 1 : 0); } .... }
æäœã®åªå é äœã«é¢ãããšã©ãŒã¯ãææ°ã®ã³ãŒãã§ã¯éåžžã«äžè¬çã§ãã ïŒèšäºã C / C ++ã®è«çåŒãå°é家ãééããæ¹æ³ ããåç §ïŒã
äžèšã®ã³ãŒãã¹ããããã«ããšã©ãŒããããŸãããéåžžã«å¹žéãªããããšã©ãŒã³ãŒãã¯ããã°ã©ããŒãæåŸ ãããšããã«æ©èœããŸãã ã€ã³ããã¯ã¹0ãš1ãæã€é åèŠçŽ ãæ¯èŒã«é¢äžããççãšåœãã®æŽæ°è¡šçŸãå€0ãš1ã§ãããšããäºå®ã ããåå ã§ããã®ã³ãŒãã¯å¥è·¡çã«ãŸã æ£ããæ©èœããŠããŸãã
ã³ãŒããæäœã®æ£ããåªå 床ã«æžãæããå¿ èŠããããŸãã
isValid = (i == (in.size() > 1 ? 1 : 0));
V590 ãiTypeïŒ=-1 && iType == 8ãåŒã®æ€æ»ãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã scilabview.cpp 175
void ScilabView::createObject(int iUID) { int iType = -1; int *piType = &iType; getGraphicObjectProperty(....); if (iType != -1 && iType == __GO_FIGURE__) { m_figureList[iUID] = -1; setCurrentFigure(iUID); } .... }
ãã®ãã©ã°ã¡ã³ãã«ã¯ãæäœã®åªå é äœã«é¢ãããšã©ãŒãå«ãŸããŠããŸããããã¯ã以åã«ææ¡ãããèšäºã§ãæ€èšãããŠããŸãã
æ¡ä»¶ä»ãéšååŒïŒiTypeïŒ= -1ïŒã¯ãæ¡ä»¶åŒå šäœã®çµæã«ã¯åœ±é¿ããŸããã ãã®äŸã®ççå€è¡šãäœæããããšã«ããããšã©ãŒãæ€èšŒã§ããŸãã
å¥ã®ãã®ãããªäŸïŒ
- V590ãiObjectTypeïŒ=-1 && iObjectType == 5ãåŒã®æ€æ»ãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã sci_unglue.c 90
誀ã£ããšã©ãŒã¡ãã»ãŒãž
Scilabã®ãšã©ãŒã«é¢ãã以åã®èšäºã§ã¯ãã¡ãã»ãŒãžãå°å·ããéã®ãšã©ãŒã«é¢ããå°ããªã»ã¯ã·ã§ã³ããããŸããã ãŸããæ°ããã¿ã€ãã®ã³ãŒãã«ã¯ããã®ã¿ã€ãã®ãšã©ãŒãéåžžã«å€ããããŸããã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ159ã163ãcdfbase.c 159
void cdf_error(char const* const fname, int status, double bound) { switch (status) { .... case 10: if (strcmp(fname, "cdfchi") == 0) // <= { Scierror(999 _("%s: cumgam returned an error\n"), fname); } else if (strcmp(fname, "cdfchi") == 0) // <= { Scierror(999, _("%s: gamma or inverse gamma routine failed\n"), fname); } break; .... }
Scilabã«ã¯å€æ°ã®cdfé¢æ°ããããŸãã æ瀺ãããã³ãŒããã©ã°ã¡ã³ãã§ã¯ããããã®é¢æ°ã®ãªã¿ãŒã³ã³ãŒãã®è§£éãå®è¡ãããŸãã ãããŠãããã«åé¡ããããŸã-é¢æ°åã®ã¿ã€ããã¹ã«ãããäœããã®ãšã©ãŒèŠåã衚瀺ãããããšã¯ãããŸããã ãã®æçš¿ãæ€çŽ¢ãããšã cdfgamé¢æ°ã«ã€ãªãããŸãã ãã®æ©èœã䜿çšããŠããŠãæ°åŠããã±ãŒãžã®äœè ã®ã¿ã€ããã¹ã®ããã«ããã€ãã®åé¡ãèŠã€ããããšãã§ããªãã£ããŠãŒã¶ãŒã«åæ ããããšæããŸãã
V510 'Scierror'é¢æ°ã¯ã3çªç®ã®å®åŒæ°ãšããŠã¯ã©ã¹åå€æ°ãåãåãããšãæåŸ ãããŠããŸããã sci_winqueryreg.cpp 149
const std::string fname = "winqueryreg"; types::Function::ReturnValue sci_winqueryreg(....) { .... if (rhs != 2 && rhs != 3) { Scierror(77, _("%s: Wrong number...\n"), fname.data(), 2, 3); return types::Function::Error; } .... else { Scierror(999, _("%s: Cannot open Windows regist..."), fname); return types::Function::Error; } .... }
1ãæã§è¡ãå°å·ãããšãã«ã dataïŒïŒã¡ãœãããåŒã³åºãã®ãå¿ããŠããŸããã
V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 48
int sci_scinotes(char * fname, void* pvApiCtx) { .... try { callSciNotesW(NULL, 0); } catch (GiwsException::JniCallMethodException exception) { Scierror(999, "%s: %s\n", fname, exception.getJavaDescription().c_str()); } catch (GiwsException::JniException exception) { Scierror(999, "%s: %s\n", fname, exception.whatStr().c_str()); } .... }
å€ã«ãã£ãŠäŸå€ããã£ãããããŸããã ããã¯ãã³ããŒã³ã³ã¹ãã©ã¯ã¿ã®å©ããåããŠæ°ãããªããžã§ã¯ããæ§ç¯ãããäŸå€ã«é¢ããæ å ±ã®äžéšã倱ãããããšãæå³ããŸãã æ£ãããªãã·ã§ã³ã¯ãåç §ã«ãã£ãŠäŸå€ããã£ããããããšã§ãã
ãã®ãããªå Žæãããã€ããããŸãã
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_builddoc.cpp 270
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_closescinotesfromscilab.cpp 45
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_closescinotesfromscilab.cpp 50
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 52
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 263
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 272
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 349
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 353
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 365
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã sci_scinotes.cpp 369
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã visitor_common.cpp 1743
- V746ã¿ã€ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã overload.cpp 135
å¥åŠãªã³ãŒã
å¥åŠãªã³ãŒãããªããã®ããã«æžãã¹ãããã©ãããã°ãããããè¯ãä¿®æ£ããããæ確ã§ã¯ãªãããã§ãã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã data3d.cpp 51
void Data3D::getDataProperty(int property, void **_pvData) { if (property == UNKNOWN_DATA_PROPERTY) { *_pvData = NULL; } else { *_pvData = NULL; } }
åžžã«ãã€ã³ã¿ãŒããŒãã«ããåçŽãªé¢æ°ã次ã«ç€ºããŸãã
V575 ãmemsetãæ©èœã¯ã0ãèŠçŽ ãåŠçããŸãã 3çªç®ã®åŒæ°ã調ã¹ãŸãã win_mem_alloc.c 91
void *MyHeapAlloc(size_t dwSize, char *file, int line) { LPVOID NewPointer = NULL; if (dwSize > 0) { _try { NewPointer = malloc(dwSize); NewPointer = memset (NewPointer, 0, dwSize); } _except (EXCEPTION_EXECUTE_HANDLER) { } .... } else { _try { NewPointer = malloc(dwSize); NewPointer = memset (NewPointer, 0, dwSize); } _except (EXCEPTION_EXECUTE_HANDLER) { } } return NewPointer; }
dwSizeå€æ°ã®å€ã«é¢ä¿ãªããåãã³ãŒããåžžã«å®è¡ãããŸãã ãªããããè€è£œããã®ã§ããïŒ
V695ç¯å²ã®äº€å·®ã¯æ¡ä»¶åŒå ã§å¯èœã§ãã äŸïŒifïŒA <5ïŒ{...} else ifïŒA <2ïŒ{...}ã è¡ã確èªããŠãã ããïŒ438ã442ãsci_sorder.c 442
int sci_sorder(char *fname, void* pvApiCtx) { .... if (iRows * iCols > 0) { dblTol1 = pdblTol[0]; } else if (iRows * iCols > 1) { dblTol2 = pdblTol[1]; } .... }
EXPR> 0ã®å Žåã EXPR> 1ã®ãã§ãã¯ã¯æå³ããªããªãããã2çªç®ã®æ¡ä»¶ã¯åžžã«falseã§ãã ãã®ã³ãŒãã«ã¯æããã«äœããã®ãšã©ãŒããããŸãã
ãã«ãã€ã³ã¿ãŒã®éåç §ãšæªå®çŸ©ã®åäœ
V522 NULLãã€ã³ã¿ãŒãdatazãã®éåç §ãè¡ãããå ŽåããããŸãã polylinedata_wrap.c 373
BOOL translatePolyline(int uid, double x, double y, double z, int flagX, int flagY, int flagZ) { double *datax = NULL; double *datay = NULL; double *dataz = NULL; // <= int i = 0; if (x != 0.0) { datax = getDataX(uid); if (datax == NULL) return FALSE; .... if (z != 0 && isZCoordSet(uid)) { if (flagZ) { for (i = 0; i < getDataSize_(uid); ++i) { dataz[i] = pow(10.,log10(dataz[i]) + z); // <= } } else { for (i = 0; i < getDataSize_(uid); ++i) { dataz[i] += z; // <= } } } return TRUE; }
datax ã datay ãããã³datazã®é åããããŸãã åŸè ã¯ã©ãã§ãåæåãããŸããããç¹å®ã®æ¡ä»¶äžã§äœ¿çšãããŸãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããçªå·ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ããã§ãã¯ããŠãã ããïŒ410ã425ãscilab_sscanf.cpp 410
int scilab_sscanf(....) { .... wchar_t* number = NULL; .... number = (wchar_t*)MALLOC((nbrOfDigit + 1) * sizeof(wchar_t)); memcpy(number, wcsData, nbrOfDigit * sizeof(wchar_t)); number[nbrOfDigit] = L'\0'; iSingleData = wcstoul(number, &number, base); if ((iSingleData == 0) && (number[0] == wcsData[0])) { .... } if (number == NULL) { wcsData += nbrOfDigit; } else { wcsData += (nbrOfDigit - wcslen(number)); } .... }
ã¡ã¢ãªãŒã¯mallocïŒïŒé¢æ°ã䜿çšããŠçªå·è¡ã®äžã«å²ãåœãŠãããŸãããããã€ã³ã¿ãŒããã§ãã¯ããåã«æ°ååç §è§£é€ããã memcpyïŒïŒé¢æ°ã«åŒæ°ãšããŠæž¡ãããŸãããããã¯åãå ¥ããããŸããã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããOuputStringsããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ271ã272ãspawncommand.c 271
char **CreateOuput(pipeinfo *pipe, BOOL DetachProcess) { char **OuputStrings = NULL; .... OuputStrings = (char**)MALLOC((pipe->NumberOfLines) * ....); memset(OuputStrings, 0x00,sizeof(char*) * pipe->NumberOfLines); if (OuputStrings) { char *line = strtok(buffer, LF_STR); int i = 0; while (line) { OuputStrings[i] = convertLine(line, DetachProcess); .... }
ããã§ã¯ãåçã¡ã¢ãªãOuputStringså€æ°ã«å²ãåœãŠãããŠããŸããããã®ãã€ã³ã¿ãŒããã§ãã¯ããåã«ãå²ãåœãŠãããã¡ã¢ãªã¯memsetïŒïŒé¢æ°ã䜿çšããŠãªã»ãããããããããããè¡ãããšã¯ã§ããŸããã é¢æ°ã®ããã¥ã¡ã³ãããã®åŒçšïŒã 'dest'ãNULLãã€ã³ã¿ãŒã®å Žåã®åäœã¯æªå®çŸ©ã§ã ãã
ã¡ã¢ãªãªãŒã¯ãšéããããŠããªããªãœãŒã¹
V611ã¡ã¢ãªãŒã¯ãnew T []ãæŒç®åã䜿çšããŠå²ãåœãŠãããŸãããããdeleteãæŒç®åã䜿çšããŠè§£æŸãããŸããã ãã®ã³ãŒãã調ã¹ãããšãæ€èšããŠãã ããã ãdelete [] piP;ãã䜿çšããæ¹ãããããè¯ãã§ãããã sci_grand.cpp 990
V611ã¡ã¢ãªãŒã¯ãnew T []ãæŒç®åã䜿çšããŠå²ãåœãŠãããŸãããããdeleteãæŒç®åã䜿çšããŠè§£æŸãããŸããã ãã®ã³ãŒãã調ã¹ãããšãæ€èšããŠãã ããã ãdelete [] piOut;ãã䜿çšããããšããå§ãããŸãã sci_grand.cpp 991
types::Function::ReturnValue sci_grand(....) { .... int* piP = new int[vectpDblInput[0]->getSize()]; int* piOut = new int[pDblOut->getSize()]; .... delete piP; delete piOut; .... }
ããã§ã¯ã2ã€ã®é倧ãªééãããããŸããã é åã«åçã¡ã¢ãªãå²ãåœãŠãåŸã delete []æŒç®åãã€ãŸã è§ãã£ãä»ãã
V773 'doc'ãã€ã³ã¿ãŒã解æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã sci_builddoc.cpp 263
int sci_buildDoc(char *fname, void* pvApiCtx) { .... try { org_scilab_modules_helptools::SciDocMain * doc = new .... if (doc->setOutputDirectory((char *)outputDirectory.c_str())) { .... } else { Scierror(999, _("...."), fname, outputDirectory.c_str()); return FALSE; // <= } if (doc != NULL) { delete doc; } } catch (GiwsException::JniException ex) { Scierror(....); Scierror(....); Scierror(....); return FALSE; } .... }
ç¶æ³ã«ãã£ãŠã¯ã ããã¥ã¡ã³ããã€ã³ã¿ãŒãã¯ãªã¢ããã«é¢æ°ãçµäºããŸãã ãŸãã docãã€ã³ã¿ãŒãNULLãšæ¯èŒããããšã¯æ£ãããããŸããã newæŒç®åãã¡ã¢ãªã®å²ãåœãŠã«å€±æããå Žåã NULLãè¿ãã®ã§ã¯ãªããäŸå€ãã¹ããŒããŸã ã
ããã¯ãScilabãããžã§ã¯ãã§èŠã€ãã£ãã¡ã¢ãªãªãŒã¯ã®æãæãããªäŸã§ãã 圌ãã¯ã¡ã¢ãªã解æŸããããšãèšç»ããŠããããšãããããŸãããããå Žæã§ã¯ãããããã®ãå¿ããŠããŸããã
äžè¬ã«ããããžã§ã¯ãã§å€ãã®ã¡ã¢ãªãªãŒã¯ãèŠã€ãããŸããããã€ã³ã¿ã¯åçŽã«ã¯ãªã¢ããããã©ãã«ãä¿åãããŸããã ãªããªã ç§ã¯Scilabéçºè ã§ã¯ãããŸããããã®ãããªå Žåã«ãšã©ãŒãçºçããå Žæãšçºçããªãå Žæãå€æããã®ã¯å°é£ã§ãã ããããç§ã¯å€ãã®ã¡ã¢ãªãªãŒã¯ããããšèããŠããŸãã ãã®æ°åŠããã±ãŒãžã®ãŠãŒã¶ãŒã¯ãç§ã®èšèã確èªã§ããŸãã
V773 'hProcess'ãã³ãã«ã®å¯èŠæ§ã¹ã³ãŒãã¯ããªãœãŒã¹ã解æŸããã«çµäºããŸããã ãªãœãŒã¹ãªãŒã¯ãçºçããå¯èœæ§ããããŸãã killscilabprocess.c 35
void killScilabProcess(int exitCode) { HANDLE hProcess; /* Ouverture de ce Process avec droit pour le tuer */ hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, ....); if (hProcess) { /* Tue ce Process */ TerminateProcess(hProcess, exitCode); } else { MessageBox(NULL, "....", "Warning", MB_ICONWARNING); } }
ãªãœãŒã¹ãªãŒã¯ã ããã¥ã¡ã³ãã«ãããšã OpenProcessé¢æ°ãåŒã³åºããåŸã CloseHandleé¢æ°ãåŒã³åºãå¿ èŠããããŸãã
ãããã«
çŸæç¹ã§ã¯ãScilab 6.0.0ã¯Scilabã®å ¬åŒWebãµã€ãã§å®å®çãšèŠãªãããŠããŸãããæ°ã¥ããããã«ãå®å®æ§ã¯ããããé ãã§ãã ã¢ãã©ã€ã¶ãŒã¯ãªããžããªããææ°ããŒãžã§ã³ããã§ãã¯ããŸããããååãšããŠããšã©ãŒã¯éåžžã«é·ãæéã³ãŒãå ã«ååšãããããããå®å®ãããããŒãžã§ã³ã«åé¡ãããŸãã ç§èªèº«ãScilabãŠãŒã¶ãŒã§ãããããã£ãšåã«ãšã©ãŒã®æ°ã確èªã§ããŸããã ãã®ãããªãœãããŠã§ã¢ããæ°åŠçãªèšç®ã«ãã®ãããªããŒã«ã䜿çšããŠãã人ã ã®ç 究ãé ãããªãããšãé¡ã£ãŠããŸãã
å€ãã®æ°åŠããããããŸããŸãªç 究ã§éèŠããã次ã®å®çžŸã®ãããããžã§ã¯ãã¯ã OpenCVã©ã€ãã©ãªã§ãã
ååã®ã¢ã³ãã¬ã€ã»ã«ã«ããã«æ³šæããŠãã ããã ãã®èšäºã®ãããã¯ã¯ãç§ãèšäºã§è¿°ã¹ãèããšåŒ·ãéè€ããŠããŸãã
- Trans-Proteomic PipelineïŒTPPïŒãããžã§ã¯ãã®æ€èšŒ
- ããã°é»åãæã«è² ããªããªã
ããããèªè ã¯åœŒãã«ç²Ÿéããããšã«èå³ãããã§ãããã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã æ°åŠãœãããŠã§ã¢ã®äœ¿çšã«ããé ç
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã