é³æ¥œãæ±ãããã°ã©ã ã«ã¯å°éã®ã³ãŒãããããæåã¯èšäºã«åââåãªæ°ã®ãšã©ãŒãèŠã€ããå¯èœæ§ãçã£ãŠããŸããã ç§ã¯ãŸã é³æ¥œãœãããŠã§ã¢ã®ãããã¯ã«è§Šãããã£ãã®ã§ãèšäºã®ããã€ãã®ãããžã§ã¯ããçµã¿åãããæºåãã§ããŠããŸããã ãããŠä»ãç§ã¯3çªç®ã®èšäºãæžããŠããŸããäœããã®åœ¢ã§èå³æ·±ããšã©ãŒã1ã€ã®èšäºã«åããããšããŠããŸãã åæã®ããã®3çªç®ã®ãããžã§ã¯ãã¯ãMIDIã·ãŒã±ã³ãµãŒããã³é³æ¥œãšãã£ã¿ãŒRosegardenã§ããã 泚æïŒ èšäºãèªããšFacepalmãåŒã³åºãããŸãïŒ
ã¯ããã«
Rosegardenã¯ç¡æã®MIDIã·ãŒã±ã³ãµãŒã§ãããALSAãšJACKã䜿çšããLinuxçšã®é³æ¥œãšãã£ã¿ãŒã§ããAppleLogic ProãCakewalk SonarãSteinberg Cubaseãªã©ã®é³æ¥œãäœæããã³ç·šéããããã°ã©ã ã§ãã
ãã®èšäºã«ã¯ãPVS-Studioã䜿çšããŠèŠã€ããæãèå³æ·±ããšã©ãŒã®ã¿ãå«ãŸããŠããŸãã å®å šãªã¬ããŒãã衚瀺ããããã«ãäœæè ã¯ãµããŒãã®äžæããŒãèŠæ±ããããšã«ããããããžã§ã¯ããåå¥ã«æ€èšŒã§ããŸãã
PVS-Studioã¯ãCãC ++ãCïŒã§èšè¿°ãããããã°ã©ã ã®ãœãŒã¹ã³ãŒãã®ãšã©ãŒãæ€åºããããã®ããŒã«ã§ãã Windowsããã³Linuxã§åäœããŸãã
ããŒã¿ãããŒåæã圹ç«ã€ãšã©ãŒæ€åºã®äŸ
誀ã£ãèŠåã¯ãåžžã«ãããã§ãã·ã§ãã«ãªéçã³ãŒãã¢ãã©ã€ã¶ãŒã¬ããŒãã®äžéšã圢æããŸãã 人ã ãåã«ã³ãŒããããè¯ãæžããããªããåã«èŠåãåœãšããŠæžãèœãšããããªãã®ã¯æ®å¿µã§ãã ã³ãŒãã¯ãä»ã®ããã°ã©ãããããã°ããã«ç解ã§ããªããããªæ··ä¹±ã§æžãããŠããå ŽåããããŸãã äœããã®æ¹æ³ã§ãã¢ãã©ã€ã¶ãŒã誀ã£ãèŠåãåºããªãããã«ããã®ãããªç¶æ³ãèæ ®ããããšããŸãã ãã®ãããããŒã¿ãããŒåæã¯çŸåšæŽ»çºã«éçºãããŠããã誀ã£ãèŠåã®æ°ãæžããããšã«å ããŠãèå³æ·±ããšã©ãŒãèŠã€ããããšãã§ããŸãã
V560æ¡ä»¶åŒã®äžéšã¯åžžã«falseã§ãïŒsingleStaffã NotationScene.cpp 1707
void NotationScene::layout(....) { .... bool full = (singleStaff == 0 && startTime == endTime); m_hlayout->setViewSegmentCount(m_staffs.size()); if (full) { Profiler profiler("....", true); m_hlayout->reset(); m_vlayout->reset(); bool first = true; for (unsigned int i = 0; i < m_segments.size(); ++i) { if (singleStaff && // <= Always False m_segments[i] != &singleStaff->getSegment()) { continue; } timeT thisStart = m_segments[i]->getClippedStartTime(); timeT thisEnd = m_segments[i]->getEndMarkerTime(); if (first || thisStart < startTime) startTime = thisStart; if (first || thisEnd > endTime) endTime = thisEnd; first = false; } } .... }
forã«ãŒãã®è«çãšã©ãŒã®ãã ã continueã¹ããŒãã¡ã³ãã¯å®è¡ããããããããã«ãŒãã®äžå¿ èŠãªå埩ã«ã€ãªãããŸãã ãã®çç±ã¯ãã&&ãæŒç®åã䜿çšããŠæ¡ä»¶å ã®singleStaffãã€ã³ã¿ãŒããã§ãã¯ããããã§ãã singleStffãã€ã³ã¿ãŒã®å€ã¯åžžã«ãŒãã§ãã ã¢ãã©ã€ã¶ãŒãsingleStaffå€æ°ãžã®äŸåãæ€åºããããšãèšç®ããå Žåããã®ã³ãŒãã¯ãã¹ãŠãifïŒfullïŒããšããæ¡ä»¶ã®äžã«ãããŸãã
bool full = (singleStaff == 0 && startTime == endTime);
å®å šãªå€æ°ã®å€ã¯ã singleStaffãã€ã³ã¿ãŒãnullã®å Žåã«ã®ã¿çã«ãªããŸãã
å°éäžèœã³ãŒãã®ç©èª
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãäœããã®æ¹æ³ã§ã³ãŒãé害ã«ã€ãªãããšã©ãŒã®ããŸããŸãªäŸãåéããŸããã ããã¯ãã¹ãŠã CWE-571ã«é©çšãããŸãïŒåŒã¯åžžã«True ã CWE-570ïŒåŒã¯åžžã«False ã CWE-561ïŒDead Codeãšãã®ããªãšãŒã·ã§ã³ã
V547åŒ 'ïŒBeamedSomething'ã¯åžžã«çã§ãã SegmentNotationHelper.cpp 1405
void SegmentNotationHelper::makeBeamedGroupAux(....) { int groupId = segment().getNextId(); bool beamedSomething = false; // <= for (iterator i = from; i != to; ++i) { .... if ((*i)->isa(Note::EventType) && (*i)->getNotationDuration() >= Note(....).getDuration()) { if (!beamedSomething) continue; // <= iterator j = i; bool somethingLeft = false; while (++j != to) { if ((*j)->getType() == Note::EventType && (*j)->getNotationAbsoluteTime() > (*i)->get....() && (*j)->getNotationDuration() < Note(....).getDuration()) { somethingLeft = true; break; } } if (!somethingLeft) continue; } .... }
ãã®äŸã¯ãåã®ã»ã¯ã·ã§ã³ã®ã³ãŒãã«éåžžã«äŒŒãŠããŸãããå°ãåçŽã§ãã beamedSomethingå€æ°ã¯ falseã«åæåãããå€æŽãããªããªããŸããã ãã®çµæã continueã¹ããŒãã¡ã³ãã¯åžžã«forã«ãŒãã§å®è¡ãããããã倧ããªã³ãŒããå®è¡ãããããšã¯ãããŸããã
V547åŒ 'i> 5'ã¯åžžã«falseã§ãã SegmentParameterBox.cpp 323
void SegmentParameterBox::initBox() { .... for (int i = 0; i < 6; i++) { timeT time = 0; if (i > 0 && i < 6) { time = Note(Note::Hemidemisemiquaver).get.... << (i - 1); } else if (i > 5) { time = Note(Note::Crotchet).getDuration() * (i - 4); } .... }
ã«ãŒãã«ãŠã³ã¿ãŒã¯ã0ã5ã®ç¯å²ã®å€ãåããŸããæåã®æ¡ä»¶åŒã¯ããŒããé€ãã«ãŠã³ã¿ãŒã®ãã¹ãŠã®å€ã«å¯ŸããŠå®è¡ãããŸããã2çªç®ã®æ¡ä»¶åŒã¯å®è¡ãããŸããã å€æ°iã®å€ã6以äžã§ããããšãæåŸ ããŠããŸãã
V547åŒãadjustedOctave <8ãã¯åžžã«falseã§ãã NotePixmapFactory.cpp 1920
QGraphicsPixmapItem* NotePixmapFactory::makeClef(....) { .... int oct = clef.getOctaveOffset(); if (oct == 0) return plain.makeItem(); int adjustedOctave = (8 * (oct < 0 ? -oct : oct)); if (adjustedOctave > 8) adjustedOctave--; else if (adjustedOctave < 8) adjustedOctave++; .... }
ãµã³ãã«ãé çªã«åæãå§ããŸãã octå€æ°ã¯ãæåã«ç¬Šå·ä»ãåã®ç¹å®ã®å€ã§åæåããã次ã«ãŒãå€ããã®ç¯å²ããé€å€ãããŸãã 次ã«ãå€æ°octã®ã¢ãžã¥ãŒã«ãèšç®ããã8ãä¹ç®ãããŸããadjustedOctaveã®çµæã®å€ã®ç¯å²ã¯[8..NïŒã«ãªãããã§ãã¯ïŒadjustedOctave <8ïŒã¯ç¡æå³ã«ãªããŸãã
V547åŒ '""'ã¯åžžã«çã§ãã LilyPondOptionsDialog.cpp 64
LilyPondOptionsDialog::LilyPondOptionsDialog(....) { setModal(true); setWindowTitle((windowCaption = "" ? tr("LilyPond Export/Preview") : windowCaption)); .... }
ã¢ãŒãã«ãŠã£ã³ããŠã®ã¿ã€ãã«ã®åœ¢æã«é¢ããèå³æ·±ããšã©ãŒã ã©ããããçŸåšã®å€ãæ¬ èœããŠããå Žåã«æ°ãããŠã£ã³ããŠã¿ã€ãã«ãèšå®ãããã£ãã®ã§ãããã¹ããŒãã¡ã³ãã«èª€ãããããŸããã
ããã«ã¿ã€ããã¹ã«æ°ã¥ããªãã£ã人ã®ããã«ãç§ã¯ããªãã«è©±ããŸãã ã==ãæŒç®åã§ã¯ãªããã==ãæŒç®åã䜿çšããå¿ èŠããããŸããã
å¥ã®ãŠã£ã³ããŠã衚瀺ãããšãã«åãã³ãŒãã䜿çšãããŸãã
- V547åŒ '""'ã¯åžžã«çã§ãã MusicXMLOptionsDialog.cpp 60
ã泚æ ã³ãŒãã®äœæè ã1è¡ã«æ°ããã¿ã€ãã«ãèšå®ãããã®æ¹æ³ã§å€ãã¿ã€ãã«ãæ¶å»ãããå Žåãããã-æžãããšã¯ã¯ãŒã«ã§ã¯ãããŸããã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ223ã239ãIntervalDialog.cpp 223
QString IntervalDialog::getIntervalName(....) { .... if (deviation == -1) textIntervalDeviated += tr("a minor"); else if (deviation == 0) // <= textIntervalDeviated += tr("a major"); else if (deviation == -2) textIntervalDeviated += tr("a diminished"); else if (deviation == 1) textIntervalDeviated += tr("an augmented"); else if (deviation == -3) textIntervalDeviated += tr("a doubly diminished"); else if (deviation == 2) textIntervalDeviated += tr("a doubly augmented"); else if (deviation == -4) textIntervalDeviated += tr("a triply diminished"); else if (deviation == 3) textIntervalDeviated += tr("a triply augmented"); else if (deviation == 4) textIntervalDeviated += tr("a quadruply augmented"); else if (deviation == 0) // <= textIntervalDeviated += tr("a perfect"); .... }
æ¡ä»¶ã®1ã€ãäžèŠã§ãããããšã©ãŒãèšé²ãããŠããŸãã å€0ã¯ãæåã«ãã§ã«åŠçãããŠããŸãã
ã³ã¡ã³ããªã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ããã¡ã€ã«ãæäœããããã®èå³æ·±ãã³ãŒãã¹ãããããæäŸããŸãã ããã°ã©ããŒã¯ãCïŒãJavaãªã©ã®ããã°ã©ãã³ã°èšèªã«è§Šçºãããããã§ãã ããã§ãªãå Žåãåã«ã¹ã¿ãã¯äžã®å€æ°ãšããŠifstreamåã®ã€ã³ã¹ã¿ã³ã¹ãäœæããªãçç±ã¯æããã§ã¯ãããŸããã ããã§ã¯ãåçã¡ã¢ãªå²ãåœãŠãæããã«åé·ã§ãããããã«ããšã©ãŒã®åå ã«ãªããŸããã
V773 ãtestFileããã€ã³ã¿ãŒã解æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã RIFFAudioFile.cpp 561
AudioFileType RIFFAudioFile::identifySubType(const QString &filename) { std::ifstream *testFile = new std::ifstream(filename.toLocal8Bit(), std::ios::in | std::ios::binary); if (!(*testFile)) return UNKNOWN; .... testFile->close(); delete testFile; delete [] bytes; return type; }
ãã¡ã€ã«ã«åé¡ãçºçããå Žåãé¢æ°ã®çµäºæã«testFileãã€ã³ã¿ãŒã¯è§£æŸãããŸããã ããã¯äžè¬çãªã¡ã¢ãªãªãŒã¯ãã¿ãŒã³ã§ãã
V773é¢æ°ã¯ããmidiFileããã€ã³ã¿ãŒã解æŸããã«çµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã MidiFile.cpp 1531
bool MidiFile::write(const QString &filename) { std::ofstream *midiFile = new std::ofstream(filename.toLocal8Bit(), std::ios::out | std::ios::binary); if (!(*midiFile)) { RG_WARNING << "write() - can't write file"; m_format = MIDI_FILE_NOT_LOADED; return false; } .... midiFile->close(); return true; }
ãã®ã³ãŒãã¯åã®ãã®ãšåãã ãšæããããããŸããããããã¯å®å šã«çå®ã§ã¯ãããŸããã æåã®äŸãšã¯ç°ãªãããã®é¢æ°ã«ã¯ç©ºãã¡ã¢ãªããŸã£ãããããŸããã ã¡ã¢ãªãªãŒã¯ã¯åžžã«çºçããŸãã
V668 ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããfileããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã SF2PatchExtractor.cpp 94
SF2PatchExtractor::Device SF2PatchExtractor::read(string fileName) { Device device; ifstream *file = new ifstream(fileName.c_str(), ios::in |....); if (!file) throw FileNotFoundException(); .... }
ãã®ã³ãŒãã®åé¡ã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
- ã³ãŒãã¯éåžžã«è€éã§ãã
- ããã§ã¯ããã€ã³ã¿ã®ãã§ãã¯ã¯æå³ããããŸããïŒãªããžã§ã¯ãã«ã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå Žåã newæŒç®åã¯äŸå€ãã¹ããŒããŸãïŒã
- ãã¡ã€ã«ããªããšããç¶æ³ã¯åŠçãããŸããã
- ã¡ã¢ãªãªãŒã¯ ãã€ã³ã¿ã¯ä»ã®ã©ãã§ã解æŸãããŸããã
ãããŠããã®å Žæã¯1ã€ã§ã¯ãããŸããã
- V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããstatstreamããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã RosegardenMainWindow.cpp 4672
- V668ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããfileããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã SF2PatchExtractor.cpp 67
ããŒã¿åã®äžå ·å
V601æŽæ°åã¯æé»çã«charåã«ãã£ã¹ããããŸãã MidiEvent.cpp 181
QDebug & operator<<(QDebug &dbg, const MidiEvent &midiEvent) { timeT tempo; int tonality; std::string sharpflat; .... tonality = (int)midiEvent.m_metaMessage[0]; if (tonality < 0) { sharpflat = -tonality + " flat"; // <= } else { sharpflat = tonality; // <= sharpflat += " sharp"; } .... }
調æ§å€æ°ã®å€ãã42ãã§ãã³ãŒãã§ç€ºãããŠããå Žæã§ãã42 flatããŸãã¯ã42 sharpãã®ãããªè¡ãååŸããããšããŸãã ããããããã¯ããã°ã©ããæåŸ ããããã«ã¯ãŸã£ããæ©èœããŸããã æ°å€ããæååãžã®å€æã¯ãããŸãããã代ããã«ãã·ããããããã€ã³ã¿ãæååã«æ ŒçŽããããããã¡å ã«ãŽãã圢æãããŸãã ãŸãã¯ã ã¢ã¯ã»ã¹éåãçºçããŸãã ãŸãã¯ãé åã®å¢çã«ã¢ã¯ã»ã¹ãããšããã°ã©ã ã®åäœãæªå®çŸ©ã«ãªããããäœãèµ·ãããŸããã
次ã®ããã«ãšã©ãŒãä¿®æ£ã§ããŸãã
if (tonality < 0) { sharpflat = to_string(-tonality) + " flat"; } else { sharpflat = to_string(tonality); sharpflat += " sharp"; }
V674 ãdoubleãã¿ã€ãã®ã0.1ããªãã©ã«ã¯ããintãã¿ã€ãã®å€ãšæ¯èŒãããŸãã ãm_connectingLineLength> 0.1ãåŒã®æ€æ»ãæ€èšããŠãã ããã StaffLayout.cpp 1028
class StaffLayout { .... protected: int m_connectingLineLength; .... } int m_connectingLineLength; void StaffLayout::resizeStaffLineRow(int row, double x, double length) { .... if (m_pageMode != LinearMode && m_connectingLineLength > 0.1) { .... }
intå€æ°ãšå€0.1ã®æ¯èŒã¯ç¡æå³ã§ãã ããããä»ã®äœããããã§èæ¡ãããŸããã ãããžã§ã¯ãã®äœæè ã¯ããã®ã³ãŒããæ éã«æ€èšããå¿ èŠããããŸãã
V601æååãªãã©ã«ã¯æé»çã«ããŒã«åã«ãã£ã¹ããããŸãã FileSource.cpp 902
bool FileSource::createCacheFile() { { QMutexLocker locker(&m_mapMutex); #ifdef DEBUG_FILE_SOURCE std::cerr << "...." << m_refCountMap[m_url] << std::endl; #endif if (m_refCountMap[m_url] > 0) { m_refCountMap[m_url]++; m_localFilename = m_remoteLocalMap[m_url]; #ifdef DEBUG_FILE_SOURCE std::cerr << "...." << m_refCountMap[m_url] << std::endl; #endif m_refCounted = true; return true; } } QDir dir; try { dir = TempDirectory::getInstance()->....; } catch (DirectoryCreationFailed f) { #ifdef DEBUG_FILE_SOURCE std::cerr << "...." << f.what() << std::endl; #endif return ""; // <= } .... }
1ã€ã®å Žæã§ã¯ãé¢æ°ã¯true / falseã®ä»£ããã«ç©ºã®æååãè¿ããŸã ãããã¯åžžã«trueãšè§£éãããŸã ã
ã€ãã¬ãŒã¿ãŒã®ãšã©ãŒ
ãã®ãããžã§ã¯ãã§ã€ãã¬ãŒã¿ã䜿çšããããšã¯ããã¡ã€ã«ãæäœããããšãšåããããå¥åŠã«èŠããŸãã
V783ç¡å¹ãªã€ãã¬ãŒã¿ãŒãiãã®éåç §ãè¡ãããå¯èœæ§ããããŸãã IconStackedWidget.cpp 126
void IconStackedWidget::slotPageSelect() { iconbuttons::iterator i = m_iconButtons.begin(); int index = 0; while (((*i)->isChecked() == false) && (i != m_iconButtons.end())) { ++i; index++; } m_pagePanel->setCurrentIndex(index); }
whileã«ãŒãã§ã¯ ãå埩åiããã§ãã¯ããé åºãæ··åãããŸãã ãã®ã³ãŒãã«ã¯çããããšã¯äœããããŸãããå€å žçãªééãã§ãã
V783ç¡å¹ãªã€ãã¬ãŒã¿ãŒãbeatTimeTs.endïŒïŒãã®éåç §ãè¡ãããå ŽåããããŸãã CreateTempoMapFromSegmentCommand.cpp 119
void CreateTempoMapFromSegmentCommand::initialise(Segment *s) { .... std::vector<timeT> beatTimeTs; .... for (int i = m_composition->...At(*beatTimeTs.begin() - 1) + 1; i <= m_composition->...At(*beatTimeTs.end() - 1); ++i){ .... }
ã¢ãã©ã€ã¶ãŒã¯ã endïŒïŒã€ãã¬ãŒã¿ãŒãžã®åŒã³åºãããã1ã€æ€åºããŸããã ãããããããªãã¯ãã®ã³ãŒãã®ãããªãã®ãæã«å ¥ããããšæãã§ãããïŒ
...At(*(beatTimeTs.end() - 1))
ããããæ¬åŒ§ãå¿ããŠããŸããã
å¥ã®ãã¡ã€ã«ã«åæ§ã®ã³ãŒãããããŸãïŒ
- V783ç¡å¹ãªã€ãã¬ãŒã¿ãŒãm_segments.endïŒïŒãã®éåç §ãè¡ãããå ŽåããããŸãã StaffHeader.cpp 250
ãã€ã³ã¿ãŒã®ãšã©ãŒ
V1004 nullptrã«å¯ŸããŠæ€èšŒãããåŸãããã©ãã¯ããã€ã³ã¿ãŒãå®å šã«äœ¿çšãããŸããã§ããã è¡ã確èªïŒ319ã329ãMatrixView.cpp 329
void MatrixView::slotUpdateWindowTitle(bool m) { .... Track *track = m_segments[0]->getComposition()->getTrackById(trackId); int trackPosition = -1; if (track) trackPosition = track->getPosition(); // <= QString segLabel = strtoqstr(m_segments[0]->getLabel()); if (segLabel.isEmpty()) { segLabel = " "; } else { segLabel = QString(" \"%1\" ").arg(segLabel); } QString trkLabel = strtoqstr(track->getLabel()); // <= .... }
ç¢å°ã䜿çšããŠã ãã©ãã¯ãã€ã³ã¿ãŒãéåç §ããã2ã€ã®å ŽæãããŒã¯ããŸããã æåã®å Žæã¯å®å šã§ã ãã€ã³ã¿ã¯ééããªããŒãã§ã¯ãããŸããã 2çªç®ã¯ãæªå®çŸ©ã®ããã°ã©ã ã®åäœã«ã€ãªããå¯èœæ§ããããŸãã äžèšã®ã³ãŒãã¹ããããã«ã¯ãéæ¥çãªãã§ãã¯ã¯ãããŸããã ã³ãŒãã¯é 次å®è¡ãããæœåšçãªãšã©ãŒãå«ãŸããŠããŸãã
ãã®ä»ã®å±éºãªéåç §ãã€ã³ã¿ãŒïŒ
- V1004 nullptrã«å¯ŸããŠæ€èšŒãããåŸãããã©ãã¯ããã€ã³ã¿ãŒãå®å šã«äœ¿çšãããŸããã§ããã ãã§ãã¯è¡ïŒ2528ã2546ãRosegardenDocument.cpp 2546
- V1004ãinstããã€ã³ã¿ãŒã¯ãnullptrã«å¯ŸããŠæ€èšŒãããåŸãå®å šã«äœ¿çšãããŸããã§ããã è¡ã確èªããŠãã ããïŒ392ã417ãManageMetronomeDialog.cpp 417
- V1004 nullptrã«å¯ŸããŠæ€èšŒãããåŸããã³ã³ãããŒã©ãŒããã€ã³ã¿ãŒãå®å šã«äœ¿çšãããŸããã§ããã è¡ã確èªããŠãã ããïŒ75ã84ãControllerEventsRuler.cpp 84
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_sceneããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ1001ã1002ãNotationWidget.cpp 1001
void NotationWidget::slotEnsureTimeVisible(timeT t) { m_inMove = true; QPointF pos = m_view->mapToScene(0,m_view->height()/2); pos.setX(m_scene->getRulerScale()->getXForTime(t)); // <= if (m_scene) m_scene->constrainToSegmentArea(pos); // <= m_view->ensureVisible(QRectF(pos, pos)); m_inMove = false; }
Diagnostics V595ã¯ãåæ§ã®ã¿ã€ãã®ãšã©ãŒãæ€åºããŸãã ããã§ã s_sceneãã€ã³ã¿ãŒã¯ 1è¡ã§éåç §ããã次ã®è¡ã§ããã«æå¹ãã©ããããã§ãã¯ãããŸãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_hideSignatureButtonããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ248ã258ãTimeSignatureDialog.cpp 248
TimeSignature TimeSignatureDialog::getTimeSignature() const { QSettings settings; settings.beginGroup( GeneralOptionsConfigGroup ); settings.setValue("timesigdialogmakehidden", m_hideSignatureButton->isChecked()); // <= settings.setValue("timesigdialogmakehiddenbars", m_hideBarsButton->isChecked()); // <= settings.setValue("timesigdialogshowcommon", m_commonTimeButton->isChecked()); // <= settings.setValue("timesigdialognormalize", m_normalizeRestsButton->isChecked()); TimeSignature ts(m_timeSignature.getNumerator(), m_timeSignature.getDenominator(), (m_commonTimeButton && m_commonTimeButton->isEnabled() && m_commonTimeButton->isChecked()), (m_hideSignatureButton && // <= m_hideSignatureButton->isEnabled() && m_hideSignatureButton->isChecked()), (m_hideBarsButton && m_hideBarsButton->isEnabled() && m_hideBarsButton->isChecked())); settings.endGroup(); return ts; }
åã®äŸãšåæ§ã®ééãã§ããããšã«ãããã®ã³ãŒããæã¡èŸŒãããšã«ããŸããã ããã§ã¯ãæœåšçã«ãã«ã®ãã€ã³ã¿ãŒã®3ã€ã®éåç §ãããã«å®è¡ãããŸãã
ä»ã®ãã¹ãŠã®åæ§ã®å Žæããªã¹ãããŸãã
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_timeTããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ690ã696ãTimeWidget.cpp 690
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_sceneããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ526ã538ãNoteRestInserter.cpp 526
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããã¢ã€ãã ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ318ã320ãTempoView.cpp 318
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_sceneããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ902ã903ãMatrixWidget.cpp 902
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_seqManagerããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ1029ã1058ãRosegardenMainWindow.cpp 1029
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_seqManagerããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ5690ã5692ãRosegardenMainWindow.cpp 5690
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_seqManagerããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ5701ã5704ãRosegardenMainWindow.cpp 5701
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_controllerããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ553ã563ãControllerEventsRuler.cpp 553
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããeããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ418ã420ãMarkerRuler.cpp 418
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_docããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ490ã511ãSequenceManager.cpp 490
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_groupLocalEventBuffersããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ329ã335ãDSSIPluginInstance.cpp 329
- V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_instrumentMixerããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ699ã709ãAudioProcess.cpp 699
ãŸããªééã
ã¯ã©ã¹ã¡ã³ããŒã®åæåé åºã®ãšã©ãŒã¯éåžžã«ãŸãã§ãã ãšã©ãŒããŒã¿ããŒã¹ã«ã¯ããã®ãšã©ãŒãžã®åç §ã¯12åãããããŸããã
V670åæåãããŠããªãã¯ã©ã¹ã¡ã³ã㌠'m_intervals'ã¯ã 'm_size'ã¡ã³ããŒãåæåããããã«äœ¿çšãããŸãã ã¡ã³ããŒã¯ãã¯ã©ã¹å ã®å®£èšã®é åºã§åæåãããããšã«æ³šæããŠãã ããã Tuning.cpp 394
class Tuning { .... int m_size; // line 138 const IntervalList *m_intervals; // line 139 .... } Tuning::Tuning(const Tuning *tuning) : m_name(tuning->getName()), m_rootPitch(tuning->getRootPitch()), m_refPitch(tuning->getRefPitch()), m_size(m_intervals->size()), m_intervals(tuning->getIntervalList()), m_spellings(tuning->getSpellingList()) { .... }
ã¯ã©ã¹ãã£ãŒã«ãã¯ãã¯ã©ã¹ã§å®çŸ©ãããŠããé åºã§åæåãããŸãã äžèšã®ã³ãŒãäŸã§ã¯ã m_sizeãã£ãŒã«ããæåã«åæåããã誀ã£ãå€ã«ãªããŸãã
éå€
V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ããµããã¹ã¿ãŒãã€ã³ããã¯ã¹ã®å€ã¯64ã«éããå¯èœæ§ããããŸããSequencerDataBlock.cpp 325
#define SEQUENCER_DATABLOCK_MAX_NB_SUBMASTERS 64 class SequencerDataBlock { .... protected: int m_submasterLevelUpdateIndices[64]; .... } bool SequencerDataBlock::getSubmasterLevel(int submaster, ....) const { ....int lastUpdateIndex[SEQUENCER_DATABLOCK_MAX_NB_SUBMASTERS]; if (submaster < 0 || submaster > SEQUENCER_DATABLOCK_MAX_NB_SUBMASTERS) { info.level = info.levelRight = 0; return false; } int currentUpdateIndex=m_submasterLevelUpdateIndices[submaster]; info = m_submasterLevels[submaster]; if (lastUpdateIndex[submaster] != currentUpdateIndex) { lastUpdateIndex[submaster] = currentUpdateIndex; return true; } else { return false; // no change } }
ãã®ééãã¯ãã§ã«å€å žã«ãªã£ãŠããŸãã é åã€ã³ããã¯ã¹ãæ倧å€ãšæ¯èŒããå Žåãäœããã®çç±ã§æŒç®åã>ããšã> =ããåžžã«æ··åãããŸãã ãã®ãããªãšã©ãŒã¯ãã¢ã¬ã€å€ãžã®ã¢ã¯ã»ã¹ã«ã€ãªãããŸãã ãã®å Žåã2ã€ã®ã¢ã¬ã€ã«ããã
æ£ãããã§ãã¯ã¯æ¬¡ã®ããã«ãªããŸãã
if (submaster < 0 || submaster >= SEQUENCER_DATABLOCK_MAX_NB_SUBMASTERS) {
ãã®ãããªã³ãŒãã¯ãããã«2ã€ã®é¢æ°ã«ã³ããŒãããŸãã
- V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ããµããã¹ã¿ãŒãã€ã³ããã¯ã¹ã®å€ã¯64ã«éããå¯èœæ§ããããŸããSequencerDataBlock.cpp 343
- V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ããµããã¹ã¿ãŒãã€ã³ããã¯ã¹ã®å€ã¯64ã«éããå¯èœæ§ããããŸããSequencerDataBlock.cpp 344
V612ã«ãŒãå ã®ç¡æ¡ä»¶ã®ããã¬ãŒã¯ãã Fingering.cpp 83
Fingering::Barre Fingering::getBarre() const { int lastStringStatus = m_strings[getNbStrings() - 1]; Barre res; res.fret = lastStringStatus; for(unsigned int i = 0; i < 3; ++i) { if (m_strings[i] > OPEN && m_strings[i] == lastStringStatus) res.start = i; break; } res.end = 5; return res; }
ã¹ã¿ã€ã«ãCïŒãŸãã¯Javaã«äŒŒãŠããã³ãŒãäŸãæ¢ã«ç€ºããŸããã Pythonèšèªã«ã¯æ確ãªé¡äŒŒç¹ããããŸãã æ®å¿µãªããïŒã³ãŒãã®äœæè ã«ãšã£ãŠïŒãããã¯C ++ã§ã¯æ©èœããŸããã breakã¹ããŒãã¡ã³ãã¯æ¡ä»¶å ã«ãããŸããããã«ãŒãã®æåã®ç¹°ãè¿ãã§åžžã«å®è¡ãããŸãã
V746ãªããžã§ã¯ãã®ã¹ã©ã€ã¹ã äŸå€ã¯ãå€ã§ã¯ãªãåç §ã«ãã£ãŠãã£ããããå¿ èŠããããŸãã MupExporter.cpp 197
timeT MupExporter::writeBar(....) { .... try { // tuplet compensation, etc Note::Type type = e->get<Int>(NOTE_TYPE); int dots = e->get <Int>(NOTE_DOTS); duration = Note(type, dots).getDuration(); } catch (Exception e) { // no properties RG_WARNING << "WARNING: ...: " << e.getMessage(); } .... }
å€ã§äŸå€ããã£ãããããšãããã€ãã®ã¿ã€ãã®ãšã©ãŒãçºçããå¯èœæ§ããããŸãã ãããžã§ã¯ãã³ãŒãã§ããã®ã¯ã©ã¹ãèŠã€ããŸããã
class BadSoundFileException : public Exception
å€ã§äŸå€ããã£ãããããšã Exceptionã¯ã©ã¹ã®æ°ãããªããžã§ã¯ããäœæãããç¶æ¿ãããã¯ã©ã¹BadSoundFileExceptionã«é¢ããæ å ±ã¯å€±ãããŸãã
ãããžã§ã¯ãã«ã¯ãã®ãããªå ŽæãçŽ50ãããŸãã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã HydrogenXMLHandler.cpp 476
bool HydrogenXMLHandler::characters(const QString& chars) { bool rc=false; if (m_version=="") { /* no version yet, use 093 */ rc=characters_093(chars); } else { /* select version dependant function */ rc=characters_093(chars); } return rc; }
äžå¯©ãªå Žæã ç°ãªãã³ã¡ã³ããããããšã¯ç°ãªãã³ãŒãã瀺åããŠããŸãããããã§ã¯ããã§ã¯ãããŸããã
2ã€ã®åæ§ã®èŠåïŒ
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã HydrogenXMLHandler.cpp 182
- V523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã HydrogenXMLHandler.cpp 358
ãããã«
ãããŸã§ã®ãšãããããã¯ã¬ãã¥ãŒã®äžã§æãã³ãŒãå質ãäœããããžã§ã¯ãã§ãã ããã«èª¿æ»ãç¶ããŸãã
ãã®ä»ã®ã¬ãã¥ãŒïŒ
- é³æ¥œãœãããŠã§ã¢ã³ãŒãã®æ¬ é¥ã®æŠèŠã ããŒã1. MuseScore
- é³æ¥œãœãããŠã§ã¢ã³ãŒãã®æ¬ é¥ã®æŠèŠã ããŒã2. Audacity
é³æ¥œãæ±ãããã®èå³æ·±ããœãããŠã§ã¢ãç¥ã£ãŠããŠãã¬ãã¥ãŒã§èŠããå Žåã¯ãååãã¡ãŒã«ã§ç§ã«éã£ãŠãã ããã
ãããžã§ã¯ãã§PVS-Studioã¢ãã©ã€ã¶ãŒãè©Šãã®ã¯éåžžã«ç°¡åã§ãã ããŠã³ããŒãããŒãžã«é²ãã§ãã ããã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã é³æ¥œãœãããŠã§ã¢ã®ã³ãŒãæ¬ é¥ã®ã¬ãã¥ãŒããŒã3. Rosegarden
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã