
éçã¢ãã©ã€ã¶ãŒãšãã®åºåã®èšºæã®å質ã確èªããããã«ããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã宿çã«åæããŠããŸãã FlashDevelopãããžã§ã¯ãã®éçºè
èªèº«ã補åã確èªããããã«äŸé ŒããŸããããåãã§ãããè¡ããŸããã
ã¯ããã«
FlashDevelopã¯ãAction ScriptããŒãžã§ã³2ããã³3ãHaxeãJavaScriptãHTMLãPHPãCïŒããµããŒããã人æ°ã®ããFlashã¢ããªã±ãŒã·ã§ã³éçºç°å¢ã§ãããã³ãŒãè£å®ãsvnãgitãmercurialããã³ãã¬ãŒãã®çµã¿èŸŒã¿ãµããŒããªã©ãææ°ã®ã³ãŒããšãã£ã¿ãŒã«åºæã®æ©èœãåããŠããŸãããµãŒãããŒãã£ã®ãã©ã°ã€ã³ãæ§æåŒ·èª¿ããŒããªã©ã ç¹ã«ãFlashDevelopã¯Fireaxis Gamesã䜿çšããŠ
XCOMïŒEnemy UnknownãéçºããŸããã
æ€èšŒçµæ
FlashDevelopã¯ãªãŒãã³ãœãŒã¹è£œåã§ãããCïŒã§èšè¿°ãããŠããããšãèæ
®ããŠãã¢ãã©ã€ã¶ãŒã§ãã¹ãããããšèããŸããã åæã«ã¯ãPVS-Studio v6.05éçã¢ãã©ã€ã¶ãŒã䜿çšããŸããã ãã®èšäºã®ãã¬ãŒã ã¯ãŒã¯å
ã§èŠã€ãã£ããã¹ãŠã®åé¡é åãåæããããšã¯ã§ããªããããæãè峿·±ãã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžãæ€èšããŸãã
æªäœ¿çšã®ã¡ãœããã®æ»ãå€
ãåç¥ã®ããã«ãCïŒã®æååã¯äžå€ãªããžã§ã¯ãã§ãããæååã倿Žããã¡ãœããã¯ãå
ã®æååã倿Žããã«ãå®éã«Stringåã®æ°ãããªããžã§ã¯ããè¿ããŸãã ãã ããå®è·µã瀺ãããã«ãéçºè
ã¯ãã®æ©èœãå¿ããŠããŸãã ããšãã°ãã¢ãã©ã€ã¶ãŒã¯æ¬¡ã®ãšã©ãŒãæ€åºããŸããã
V3010颿°ãInsertãã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã ASPrettyPrinter.cs 1263
public void emit(IToken tok) { .... lineData.Insert(0, mSourceData.Substring(prevLineEnd, ((CommonToken)t).StartIndex - prevLineEnd)); .... }
V3010颿°ãInsertãã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã MXMLPrettyPrinter.cs 383
private void prettyPrint(....) { .... while (aToken.Line == currentLine) { lineData.Insert(0, aToken.Text); .... } .... }
ãããããéçºè
ã¯ãã®èšèšã念é ã«çœ®ããŠããŸããã
lineData = lineData.Insert(....);
V3010蚺æããªã¬ãŒã®å¥ã®äŸïŒ
V3010颿° 'NextDouble'ã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã ASFileParser.cs 196
private static string getRandomStringRepl() { random.NextDouble(); return "StringRepl" + random.Next(0xFFFFFFF); }
ãã®ã³ãŒãã«ã¯æ©èœã®èгç¹ããã®ãšã©ãŒã¯å«ãŸããŠããŸãããã
random.NextDoubleïŒïŒã®åŒã³åºãã«ã¯æå³çãªè² è·ã¯ãªããåé€ã§ããŸãã
åãã£ã¹ãåŸã®NULLãã§ãã¯
å
ã®åãç®çã®åã«ãã£ã¹ãã§ããªãå Žåã«ãçµæã®å€ã®nullã確èªããããšã¯ãå倿æäœã®åŸã®æšæºçãªæ¹æ³ã§ãã ãã®ãããªæ¥åžžçãªæäœãå®è¡ããå Žåãéçºè
ã¯äžæ³šæã§ãééã£ã倿°ããã§ãã¯ããå¯èœæ§ããããŸãã åœç€Ÿã®ã¢ãã©ã€ã¶ãŒã¯é£œããããã®ãããªããšãæ³šææ·±ãç£èŠããŸãã
V3019 ãasãããŒã¯ãŒãã䜿çšããå倿åŸã«ã誀ã£ã倿°ãnullãšæ¯èŒãããå¯èœæ§ããããŸãã 倿°ãitemãããvalãã確èªããŠãã ããã WizardHelper.cs 67
public static void SetControlValue(....) { .... string val = item as string; if (item == null) continue; .... }
æããã«ããã®äŸã§ã¯ã
itemã§ã¯ãªãnull倿°ããã§ãã¯ããå¿
èŠããããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
string val = item as string; if (val == null) continue;
ã¡ãœããæ¬äœã®è€è£œ
åäžã®ããã£ãæã€ã¡ãœãããã³ãŒãå
ã§èŠã€ãã£ãå Žåãããã¯åžžã«ç念ãåŒãèµ·ãããŸãã æè¯ã®å Žåããã®ãããªã³ãŒãã¯ãªãã¡ã¯ã¿ãªã³ã°ãå¿
èŠãšããææªã®å Žåãæ©æ¢°çãªã³ããŒïŒããŒã¹ãã¯ããã°ã©ã ã®ããžãã¯ãæªããŸãã æ ¹æ ããªãããã«ããããã«ã次ã®äŸãæ€èšããŠãã ããã
V3013 ãSuspendMdiClientLayoutã颿°ã®æ¬äœããPerformMdiClientLayoutã颿°ã®æ¬äœãšå®å
šã«åçã§ããããšã¯å¥åŠã§ãïŒ377ãè¡389ïŒã DockPanel.MdiClientController.cs 377
private void SuspendMdiClientLayout() { if (GetMdiClientController().MdiClient != null) GetMdiClientController().MdiClient.PerformLayout();
ã芧ã®
ãšãã ã
SuspendMdiClientLayoutã¡ãœãããš
PerformMdiClientLayoutã¡ãœããã®æ¬äœ
ã¯ãŸã£ããåãã§ãã ããã¯ããããã³ãŒãã®ã³ããŒãåå ã§ããã
SuspendMdiClientLayoutã¡ãœããã®ååã¯ãã¬ã€ã¢ãŠããäžæåæ¢ããããšãåæãšããŠããŸããã代ããã«ã¬ã€ã¢ãŠããåæç»ãããŸãïŒ
MdiClient.PerformLayoutïŒïŒ ã ãã®ã¡ãœããã®æ£ããå®è£
ã¯æ¬¡ã®ããã«ãªã£ãŠãããšæããŸãã
private void SuspendMdiClientLayout() { if (GetMdiClientController().MdiClient != null) GetMdiClientController().MdiClient.SuspendLayout();
å¥ã®äŸã ãã®ãããžã§ã¯ãã¯ãäœãã®åå¥è§£æã®ããã«èšèšããã
Lexerã¿ã€ããå®è£
ããŸãã ãã®ã¿ã€ãã¯ã
ãã©ã€ããŒãã¹ã¿ãã£ãã¯ããŒã«StateXXïŒFsmContext ctxïŒã®åœ¢åŒã®ã·ã°ããã£ãæã€åãã¿ã€ãã®ã¡ãœããã28åå®è£
ããŸã
ãXXã¯1ã28ã®ç¯å²ã«ãããŸãããšã©ãŒã³ãŒãå
ã§ãPVS-Studioã¢ãã©ã€ã¶ãŒã¯æ¬¡ã®ããã«åå¿ããŸãã
V3013 ãState11ã颿°ã®æ¬äœããState15ã颿°ã®æ¬äœãšå®å
šã«åçã§ããããšã¯å¥åŠã§ãïŒ532ã589è¡ç®ïŒã Lexer.cs 532
private static bool State11 (FsmContext ctx) { ctx.L.GetChar (); switch (ctx.L.input_char) { case 'e': ctx.Return = true; ctx.NextState = 1; return true; default: return false; } } private static bool State15 (FsmContext ctx) { ctx.L.GetChar (); switch (ctx.L.input_char) { case 'e': ctx.Return = true; ctx.NextState = 1; return true; default: return false; } }
2ã€ã®æ¹æ³ãåãç¶æ³ãåŠçãããšããäºå®ã¯éåžžã«çãããããã§ãã ãã®åé¡ãä¿®æ£ããæ¹æ³ã¯æç¢ºã§ã¯ãããŸãã;äœæ¥ã®è«çã¯èè
ã®ã¿ãç¥ã£ãŠããŸãã ãŸãã倧éã®å調ãªã³ãŒããèªãã®ã¯æžããããã¯ããã«é£ããã®ã§ããã®åé¡ã¯ã³ãŒãã¬ãã¥ãŒäžã«ç°¡åã«æ€åºã§ããããšãéåžžã«çããŸãã äžæ¹ãéçã¢ãã©ã€ã¶ãŒã¯ããã§éåžžã«åœ¹ç«ã¡ãŸãã
ãµã€ã¯ã«ããã®ç¡æ¡ä»¶ã®çµäº
ããã«åæãããšããã®ãããªè峿·±ãç¹ãæããã«ãªããŸããã
V3020ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ããã¬ãŒã¯ãã AirWizard.cs 1760
private void ExtensionBrowseButton_Click(....) { .... foreach (var existingExtension in _extensions) { if (existingExtension.ExtensionId == extensionId) extension = existingExtension; break; } .... }
éçºè
ã
_extensionsã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ãå®è¡ãã察å¿ãã
extensionIdãæã€æåã®
existingExtensionãªããžã§ã¯ããèŠã€ããŠãã«ãŒããçµäºããããšãææ¡ããããšæããŸãã ããããæ¬åŒ§ã®ç¯çŽã«ããããµã€ã¯ã«ã¯æåã®å埩åŸã«ç¢ºå®ã«çµäºããããã°ã©ã ã®ããžãã¯ã«å€§ããªåœ±é¿ãäžããŸãã
åŒã¯åžžã«true / falseã§ã
å¥ã®äžè¬çãªãšã©ãŒã®åå ã¯æ¡ä»¶åŒã§ãã åŒã«å€æ°ã®å€æ°ãå¢çå€ãããªãè€éãªåå²ãå«ãŸããŠããå Žåããšã©ãŒãçºçããå¯èœæ§ãé«ããªããŸãã ããšãã°ã次ã®ãããªæ¡ä»¶æŒç®åãèããŠã¿ãŸãããã
private void SettingChanged(string setting) { if (setting == "ExcludedFileTypes" || setting == "ExcludedDirectories" || setting == "ShowProjectClasspaths" || setting == "ShowGlobalClasspaths" || setting == "GlobalClasspath") { Tree.RebuildTree(); } else if (setting == "ExecutableFileTypes") { FileInspector.ExecutableFileTypes = Settings.ExecutableFileTypes; } else if (setting == "GlobalClasspath")
PVS-Studioéçã¢ãã©ã€ã¶ãŒã¯æ¬¡ã®ãšã©ãŒãå ±åããŸãã
V3022åŒ 'setting == "GlobalClasspath"'ã¯åžžã«falseã§ãã PluginMain.cs 1194
å®éã
else ifæ¡ä»¶
ïŒèšå®==â GlobalClasspathâïŒã¯ãæåã®
ifã«åãæ¡ä»¶ãååšãããããæ±ºããŠæºããããããšã¯ãããŸããã ãã ããäžéšã®ããžãã¯ã®å®çŸã¯ããã®æ¡ä»¶ã®å®çŸã«äŸåããŸãã ãã®ã¡ãœããã®èªã¿ããããç°¡çŽ åããããã«ã
switchã¹ããŒãã¡ã³ãã䜿çšããŠæžãæããŸãã
äžå¯èœãªç¶æ
ã®æ¬¡ã®äŸïŒ
V3022åŒ 'high == 0xBF'ã¯åžžã«falseã§ãã JapaneseContextAnalyser.cs 293
protected override int GetOrder(byte[] buf, int offset, out int charLen) { byte high = buf[offset];
ã¢ãã©ã€ã¶ãŒã¯ãåŒ
'high == 0xBF'ãåžžã«falseã§ããããšã瀺ããŸãã ããã¯ãå€
0xBFã
high> = 0xA1 && high <= 0xFEã®ç¯å²ã«è©²åœããæåã®
ifã§ãã§ãã¯ããããã
ã§ã ã
V3022蚺æããã®ã¡ãã»ãŒãžã®å¥ã®äŸïŒ
V3022åŒ 'ïŒOutline.FlagTestDrop'ã¯åžžã«trueã§ãã DockPanel.DockDragHandler.cs 769
private void TestDrop() { Outline.FlagTestDrop = false; .... if (!Outline.FlagTestDrop) { .... } .... }
ãã®ã¹ããããã§ã¯ãfalseã«èšå®ãããã³ãŒãå
ã§ãã以äžå€æŽãããªã
Outline.FlagTestDropãã£ãŒã«ãã
ifæ¡ä»¶
ã¹ããŒãã¡ã³ãã§äœ¿çšãããŠããããšã
ããããŸãã ããããããã®ã¡ãœããã§ã¯ãéçºè
ã
ifïŒïŒOutline.FlagTestDropïŒcheckãå®è£
ããããããã®ãã£ãŒã«ãã®å€ã倿Žããæ©èœã¯å®è£
ãããŠããŸããã
nullããã§ãã¯ãããåã«ã€ã³ã¹ã¿ã³ã¹ã䜿çšãã
å®éã«ã¯ãããšãã°ãåãã£ã¹ããã³ã¬ã¯ã·ã§ã³ããã®èŠçŽ ã®éžæãªã©ã®åŸãnullã®å€æ°ããã§ãã¯ããå¿
èŠãåžžã«çºçããŸãã ãã®ãããªç¶æ³ã§ã¯ãçµæã®å€æ°ãnullã§ãªãããšã確èªããŠãããããã䜿çšããŸãã ãã ããç§ãã¡ã®å®è·µã瀺ãããã«ãéçºè
ã¯çµæã®ãªããžã§ã¯ããããã«äœ¿çšãå§ãããããnullã§ãªãããšã確èªããã ãã§ãã ãããã®ãšã©ãŒã¯ãV3095蚺æã«ãã£ãŠå ±åãããŸãã
V3095 ãnodeããªããžã§ã¯ãã¯ãnullã«å¯ŸããŠæ€èšŒãããåã«äœ¿çšãããŸããã ãã§ãã¯è¡ïŒ364ã365ãProjectContextMenu.cs 364
private void AddFolderItems(MergableMenu menu, string path) { .... DirectoryNode node = projectTree.SelectedNode as DirectoryNode; if (node.InsideClasspath == node) menu.Add(RemoveSourcePath, 2, true); else if (node != null && ....) { menu.Add(AddSourcePath, 2, false); } .... }
ãã®äŸã§ã¯ã
projectTree.SelectedNodeãã£ãŒã«ãã®ã¿ã€ãã¯
GenericNodeã§ãããããã¯
DirectoryNodeã®åºæ¬ã¿ã€ãã§ãã åºæ¬åãªããžã§ã¯ãã®æŽŸçåãžã®ãã£ã¹ãã倱æãããã®çµæãããŒã倿°ã«ç©ºã®åç
§ãå«ãŸããå ŽåããããŸãã ãã ããã芧ã®
ãšãã ãå倿æäœã®åŸãéçºè
ã¯ããã«
node.InsideClasspathãã£ãŒã«ãã«ã¢ã¯ã»ã¹ãã
ããŒã倿°ã®nullã®ã¿ããã§ãã¯ããŸãã ãã®ãããªå®è£
ã§ã¯
ãNullReferenceExceptionãçºçããå ŽåããããŸãã
æž¡ãããåŒæ°ã®å€ãäžæžãããŸã
ã¢ãã©ã€ã¶ãŒã¯ããã®ãããªæœåšçã«åé¡ã®ããã³ãŒãå
ã®å Žæãæ€åºããŸããã
V3061ãã©ã¡ãŒã¿ãŒ 'b'ã¯ã䜿çšãããåã«åžžã«ã¡ãœããæ¬äœã§æžãæããããŸãã InBuffer.cs 56
public bool ReadByte(byte b)
ãã®ã¡ãœããã«æž¡ãããåŒæ°
bã®å€ã¯äœ¿çšãããªããããäžæžããããããã§ã䜿çšãããŸããã ãã®ã¡ãœããã¯æå³ãããšããã«å®è£
ãããŠããªããšæ³å®ã§ããŸãïŒã³ã¡ã³ãã
// check it ããããã瀺åããŠããŸãïŒã ããããããã®ã¡ãœããã®ã·ã°ããã£ã¯æ¬¡ã®ããã«ãªããŸãã
public bool ReadByte(ref byte b) { .... }
ã¡ãœããã«æž¡ãããåŒæ°ã®é åºãæ£ãããããŸãã
ã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºãããæ¬¡ã®çãããå Žæã¯ãã³ãŒãã¬ãã¥ãŒã宿œããéã«ç°¡åã«æ°ä»ãããšãã§ããŸããã
V3066 ã_channelMixer_OVERLAYãã¡ãœããã«æž¡ãããåŒæ°ã®èª€ã£ãé åºã®å¯èœæ§ïŒãbackãããã³ãforeãã BBCodeStyle.cs 302
private static float _channelMixer_HARDLIGHT(float back, float fore) { return _channelMixer_OVERLAY(fore, back); }
_channelMixer_OVERLAYã¡ãœããã«ã¯æ¬¡ã®ã·ã°ããã£ããããŸãã
static float _channelMixer_OVERLAY(float back, float fore)
ãããããããã¯ãŸãã«æå³ãããã®ã§ãã ãã ãããã®ã¡ãœãããåç
§ãããšãã«ã
foreåŒæ°ãš
backåŒæ°ãéã«ãªã£ãŠããå¯èœæ§ããããŸãã ãããŠãã¢ãã©ã€ã¶ã¯ãã®ãããªå Žæããã§ãã¯ããã®ã«åœ¹ç«ã¡ãŸãã
å®å
šã§ãªãã€ãã³ããã³ãã©ãŒåŒã³åºã
V3083蚺æ
㯠ãã€ãã³ããã³ãã©ãŒã«å¯Ÿããæœåšçã«å®å
šã§ãªãåŒã³åºããæ€åºããããã«èšèšãããŠããŸãã åæããããããžã§ã¯ãã§ã¯ããã®èšºæã«ããããã®ãããªå Žæã倿°æããã«ãªããŸããã ç¹å®ã®äŸã䜿çšããŠãå®å
šã§ãªããã³ãã©ãŒåŒã³åºãã®ç¶æ³ãåæããŸãã
V3083ã€ãã³ããOnKeyEscapeãã®å®å
šã§ãªãåŒã³åºããNullReferenceExceptionãçºçããå¯èœæ§ããããŸãã ã€ãã³ããåŒã³åºãåã«ãããŒã«ã«å€æ°ã«ã€ãã³ããå²ãåœãŠãããšãæ€èšããŠãã ããã QuickFind.cs 849
protected void OnPressEscapeKey() { if (OnKeyEscape != null) OnKeyEscape(); }
äžèŠãã³ãŒãã¯å®å
šã«æ£ããããã§ããOnKeyEscapeãã£ãŒã«ããnullã§ãªãå Žåããã®ã€ãã³ããçºçãããŸãã ãã ãããã®ã¢ãããŒãã¯æšå¥šãããŸããã OnKeyEscapeã€ãã³ãã«1ã€ã®ãµãã¹ã¯ã©ã€ããŒããããšä»®å®ãããã®ãã£ãŒã«ãã§nullããã§ãã¯ããåŸããã®ãµãã¹ã¯ã©ã€ããŒãïŒããšãã°ãå¥ã®ã¹ã¬ããã§ïŒãã®ã€ãã³ããããµãã¹ã¯ã©ã€ãè§£é€ãããšããŸãã ã€ãã³ãã«ãµãã¹ã¯ã©ã€ããŒããªãå ŽåãOnKeyEscapeãã£ãŒã«ãã«ã¯ç©ºã®ãªã³ã¯ãå«ãŸããã€ãã³ããçºçãããããšãããšNullReferenceExceptionãçºçããŸãã
ãããéåžžã«é£ããåçŸå¯èœãªãšã©ãŒã§ããããšã¯ç¹ã«äžå¿«ã§ãã ãŠãŒã¶ãŒã¯ãESCãæŒããšãšã©ãŒãçºçãããšäžå¹³ãèšããããããŸããã ãã ããESCã1000åæŒããŠããããã°ã©ããäœãééã£ãŠããã®ããçè§£ã§ãããšã¯èããããŸããã
远å ã®äžé倿°ã宣èšããããšã«ãããã€ãã³ãåŒã³åºããä¿è·ã§ããŸãã
var handler = OnKeyEscape if (handler != null) handler();
CïŒããŒãžã§ã³6ã§ã¯ãnullïŒïŒãïŒCheckã¹ããŒãã¡ã³ãã衚瀺ãããã³ãŒãã倧å¹
ã«ç°¡çŽ åã§ããŸãã
OnKeyEscape?.Invoke();
èããããã¿ã€ããã¹
ã¢ãã©ã€ã¶ãŒã®ãã¥ãŒãªã¹ãã£ãã¯æ©èœã«ãããã³ãŒãå
ã®éåžžã«è峿·±ãçãããå Žæãæ€åºã§ããŸãã äŸïŒ
V3056 ãa1ãã¢ã€ãã ã®äœ¿çšã®æ£ç¢ºããæ€èšããããšãæ€èšããŠãã ããã LzmaEncoder.cs 225
public void SetPrices(....) { UInt32 a0 = _choice.GetPrice0(); UInt32 a1 = _choice.GetPrice1(); UInt32 b0 = a1 + _choice2.GetPrice0(); UInt32 b1 = a1 + _choice2.GetPrice1(); .... }
ãã®ã³ãŒãã¯ã³ããŒã¢ã³ãããŒã¹ãã䜿çšããŠæžãããå¯èœæ§ããããŸãã ãŸãã倿°
b0ã®å€ãèšç®ããã«ã¯ã倿°
a1ã®ä»£ããã«å€æ°
a0ã䜿çšããå¿
èŠãããããã«æããŸãã ãããã«ãããçºèŠãããçãããå Žæã¯ãéçºè
ããã®ã³ãŒããæ³šææ·±ãèŠãæ©äŒã§ããã¯ãã§ãã äžè¬ã«ãããæçãªå€æ°åã䜿çšããæ¹ãé©åã§ãã
åã³äŸå€ãæãã
ãã£ãããããäŸå€ãããã«ã¹ããŒãããã³ãŒãå
ã®ããã€ãã®å ŽæãèŠã€ãããŸããã ããã¯ãããšãã°æ¬¡ã®ããã«å®è£
ãããŸãã
public void Copy(string fromPath, string toPath) { .... try { .... } catch (UserCancelException uex) { throw uex; } .... }
ãã®ã¡ãœããããã§ãã¯ãããšãã¢ãã©ã€ã¶ãŒã¯æ¬¡ã®ã¡ãã»ãŒãžã衚瀺ããŸãã
V3052å
ã®äŸå€ãªããžã§ã¯ããuexãã飲ã¿èŸŒãŸããŸããã å
ã®äŸå€ã®ã¹ã¿ãã¯ã倱ãããå¯èœæ§ããããŸãã FileActions.cs 598
ãã®ãããªäŸå€ã®ã¹ããŒã¯ãå
ã®åŒã³åºãã¹ã¿ãã¯ãçŸåšã®ã¡ãœããã§å§ãŸãæ°ãããã®ã«ãã£ãŠäžæžãããããšããäºå®ã«ã€ãªãããŸãã ããã«ããããããã°äžã«å
ã®äŸå€ãçºçããå ŽæãèŠã€ããããšãéåžžã«é£ãããªããŸãã
åã³äŸå€ãã¹ããŒãããšãã«å
ã®åŒã³åºãã¹ã¿ãã¯ãä¿æããã«ã¯ã
throwã¹ããŒãã¡ã³ãã䜿çšããã ãã§ãã
try { .... } catch (UserCancelException uex) { throw; }
ã³ã¬ã¯ã·ã§ã³ãèµ°æ»ãããšãã«çºçããå¯èœæ§ã®ããInvalidCastException
ã³ãŒããããã«åæãããšãæœåšçã«å®å
šã§ãªãå Žæãæããã«ãªããŸããã
V3087 ãforeachãã§åæããã倿°ã®åã¯ãã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ã®åã«ãã£ã¹ãå¯èœã§ãããšã¯éããŸããã VS2005DockPaneStrip.cs 1436
private void WindowList_Click(object sender, EventArgs e) { .... List<Tab> tabs = new List<Tab>(Tabs); foreach (TabVS2005 tab in tabs) .... }
tabsã³ã¬ã¯ã·ã§ã³ã«ã¯
Tabåã®èŠçŽ ãå«ãŸããŸãããå埩äžã«ãã®ã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ã¯
Tabåã®åå«ã§ãã
TabVS2005åã«
ãã£ã¹ããããŸãã ãã®ãã£ã¹ãã¯å®å
šã§ã¯ãªãããã
System.InvalidCastExceptionãã¹ããŒãããå ŽåããããŸãã
åã蚺æã§åæ§ã®å®å
šã§ãªãã³ãŒããæ€åºãããŸããïŒ
public int DocumentsCount { get { int count = 0; foreach (DockContent content in Documents) count++; return count; } }
ããã§ã
Documentsã³ã¬ã¯ã·ã§ã³ã«ã¯
IDockContentèŠçŽ ãå«ãŸããŠããã
DockContentåãžã®æç€ºçãªå€æã¯å®å
šã§
ã¯ãªãå ŽåããããŸãã
éåºŠã®æ¡ä»¶ä»ããã§ãã¯
æåŸã«ããšã©ãŒãå«ãŸãªãããããã§ãéåžžã«è€éãªã³ãŒãã®äŸãèŠãŠã¿ãŸãããã
V3031éå°ãªãã§ãã¯ãç°¡çŽ åã§ããŸãã ã||ã æŒç®åã¯å察ã®åŒã§å²ãŸããŠããŸãã DockContentHandler.cs 540
internal void SetDockState(....) { .... if ((Pane != oldPane) || (Pane == oldPane && oldDockState != oldPane.DockState)) { RefreshDockPane(Pane); } .... }
æ¡ä»¶
PaneïŒ= OldPaneãš
Pane == oldPaneã¯çžäºã«æä»çã§ããããããã®åŒã¯åçŽåã§ããŸãã
if (Pane != oldPane || oldDockState != oldPane.DockState)
åæ§ã«ãå¥ã®ã¡ãœããã®æ¡ä»¶åŒïŒ
void SetProject(....) { .... if (!internalOpening || (internalOpening && !PluginBase.Settings.RestoreFileSession)) { RestoreProjectSession(project); } .... }
次ã®ããã«ç°¡ç¥åããããšãã§ããŸãã
if (!internalOpening || !PluginBase.Settings.RestoreFileSession)
ãããã«
FlashDevelopãããžã§ã¯ãã¯10幎以äžéçºãããŠãããããªã倧ããªã³ãŒãããŒã¹ãæã£ãŠããŸãã ãã®ãããªãããžã§ã¯ãã§éçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšãããšãè峿·±ãçµæãåŸããããœãããŠã§ã¢è£œåã®å質ãåäžããŸãã ãããžã§ã¯ãã®éçºè
ãèŠã€ãããšã©ãŒãèŠãããšã¯è峿·±ããšæããŸãã CãC ++ããŸãã¯CïŒã®ãã¹ãŠã®éçºè
ã¯
ãææ°ããŒãžã§ã³ã®PVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã
ããŠã³ããŒãã㊠ããããžã§ã¯ãã確èªããããšããå§ãããŸãã
詊çšçã§ã¯äžååãªå ŽåïŒ
詳现 ïŒãç§ãã¡ã«
é£çµ¡ããŠãããŒã«ã®ãã詳现ãªç ç©¶ã®éµãååŸããããšããå§ãããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒPavel Kusnetsovã
PVS-Studioã䜿çšããFlashDevelopã®ãœãŒã¹ã³ãŒãã®ç¢ºèª ã