C ++ã§èšè¿°ããããªãŒãã³ãœãŒã¹ãšã³ãžã³ã¯ãCïŒã§èšè¿°ãããåæ§ã®ãšã³ãžã³ãããã¯ããã«åªããŠããŸãã ããããäŸå€ããããŸãã Xenkoã¯CïŒã§æžããããšã³ãžã³ã®1ã€ã§ããããªãŒãã³ãœãŒã¹ã³ãŒããæã£ãŠããŸãã ãã®èå³æ·±ãããšã¯ããã®ãšã³ãžã³ã®ã³ãŒãã§èŠã€ããããšãã§ãããã®èšäºã§èª¬æããŸãã
åæããããããžã§ã¯ã
Xenko ïŒæ§ç§°ParadoxïŒã¯ãCïŒããã°ã©ãã³ã°èšèªã䜿çšããŠã²ãŒã ãéçºã§ããã¯ãã¹ãã©ãããã©ãŒã ã²ãŒã ãšã³ãžã³ã§ãã ãã®ãšã³ãžã³ã«ãããAndroidãiOSãWindowsãã¹ã¯ããããWindows PhoneãPlayStation 4ã®ç°ãªããã©ãããã©ãŒã çšã«2Dãš3Dã®äž¡æ¹ã®ã²ãŒã ãéçºã§ããŸããå°æ¥ãMacOSXãšLinuxã®ãµããŒããèšç»ãããŠããŸãã ãšã³ãžã³ã®ãœãŒã¹ã³ãŒãã¯GitHubã®ãªããžããªããå ¥æã§ããŸã ã ã»ãšãã©ã®ã³ãŒãïŒGitHubã®æ å ±ã«ãããš89ïŒ ïŒã¯CïŒã§èšè¿°ãããŠããŸãã
åæããŒã«
ãããžã§ã¯ãã¯PVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšããŠç¢ºèªãããŸããã éåžžã®ééãïŒ V3001ãªã© ïŒã«å ããŠãææ°ã®ã¢ãã©ã€ã¶ãŒãªãªãŒã¹ã®ã«ãŒã«ã«ãã£ãŠèšºæãããçãããã³ãŒããã©ã°ã¡ã³ããæããã«ããŸããã
ãã¹ãŠã®èšºæã¡ãã»ãŒãžã«ã¯ããšã©ãŒã®äŸã説æãããã³ããããä¿®æ£ããæ¹æ³ãæäŸããããã¥ã¡ã³ããå«ãŸããŠããŸãã ãªã³ã¯ããã¢ãã©ã€ã¶ã®ææ°ããŒãžã§ã³ãããŠã³ããŒãã§ããŸãã
æ ¹æ ããªãããã«ããããã«ãäœãããããããšããã£ãã®ããèŠãããææ¡ããŸãã
çãããã³ãŒãã¹ãããã
å€ãã®å Žåããšã©ãŒã¯äžèŠæããããããæ·±å»ãªçµæã«ã€ãªãããŸãã ãããã®æ¬è³ªãšä¿®æ£æ¹æ³ãããããç解ããããã«ã蚺æã«ãŒã«ã®ããã¥ã¡ã³ãã«ç²Ÿéããããšããå§ãããŸãã
public bool CanHandleRequest(TexImage image, IRequest request) { .... return SupportFormat(compress.Format) && SupportFormat(image.Format); .... return SupportFormat(converting.Format) && SupportFormat(converting.Format); //<= .... }
PVS-StudioèŠåïŒ V3001 ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãSupportFormatïŒconverting.FormatïŒãããããŸãã SiliconStudio.TextureConverter DxtTexLib.cs 141
å€ãã®å Žåã人ã ã¯ããŸããæ¡ä»¶ã2åãã§ãã¯ããŸããããåé¡ã¯ãããŸãããã äžèŠãã¯ãããããŠæã ããã§ãã ããããå€ãã®å Žåãåé¡ã¯ç°ãªããŸããæ¡ä»¶ãæ··åããããããè«çãšã©ãŒãçºçããããã°ã©ã ããžãã¯ãèšç»ã«å¯Ÿå¿ããŸããã ããã«ãããŸãã ãµãæ¡ä»¶ã¯ã 'SupportFormatïŒconverting.FormatïŒ'ã¡ãœãããåŒã³åºãããšã«ãã£ãŠ2åãã§ãã¯ãããŸããã2çªç®ã®ã±ãŒã¹ã§ã¯ãåŒã³åºãã¯æ¬¡ã®åœ¢åŒã§ããå¯èœæ§ããããŸãïŒ 'SupportFormatïŒimage.FormatïŒ'ã ãã®åŸãåŒå šäœã¯æ¬¡ã®åœ¢åŒãåããŸãã
return SupportFormat(converting.Format) && SupportFormat(image.Format);
åæ§ã®ãšã©ãŒïŒåãã¡ãœããã®ãšã©ãŒïŒïŒ
public enum Rescaling { Box = 0, Bicubic = 1, Bilinear = 2, BSpline = 3, CatmullRom = 4, Lanczos3 = 5, Nearest, } public bool CanHandleRequest(TexImage image, IRequest request) { .... return rescale.Filter == Filter.Rescaling.Box || rescale.Filter == Filter.Rescaling.Bicubic || //<= rescale.Filter == Filter.Rescaling.Bicubic || //<= rescale.Filter == Filter.Rescaling.Nearest; .... }
PVS-StudioèŠåïŒ V3001 '||'ã®å·Šãšå³ã«åäžã®ãµãåŒ 'rescale.Filter == Filter.Rescaling.Bicubic'ããããŸã æŒç®åã SiliconStudio.TextureConverter DxtTexLib.cs 148
ãã®èšäºã«èšèŒãããŠããã³ãŒãã§ã¯ããšã©ãŒã¯èçŒã§ç¢ºèªã§ããŸãã ãããããã®ã³ãŒããå«ããã¡ã€ã«ã§ã¯ãæ§ããã«èšã£ãŠãå°è±¡çã§ã¯ãããŸããã ããã¯ãéšåçã«æžåŒèšå®ã®ãã¡ãªãããã«ãããã®ã§ãããã¡ã€ã«ã§ã¯ããã®åŒã¯1è¡ã§èšè¿°ããããããã³ãŒãã詳现ã«ç¢ºèªããã«éšååŒãè€è£œããŠãæ°ä»ããªãå ŽåããããŸãã åæã®å¥ã®èŠçŽ ãããšãã° 'BSpline'ãæå³ãããšæããŸãã
äžè¬ã«ã倧ããªåŒã§ã¯ã次ã®äŸã«èŠãããããã«ãåæ§ã®ééããç¯ãã®ã¯éåžžã«ç°¡åã§ãã ã¢ãã©ã€ã¶ãŒã®èŠåãšã³ãŒãã®èª¬æãèªãŸãã«ãèªåã§ãšã©ãŒãèŠã€ããŠãã ããã
public static ContainmentType BoxContainsSphere( ref BoundingBox box, ref BoundingSphere sphere) { .... if ((((box.Minimum.X + sphere.Radius <= sphere.Center.X) && (sphere.Center.X <= box.Maximum.X - sphere.Radius)) && ((box.Maximum.X - box.Minimum.X > sphere.Radius) && (box.Minimum.Y + sphere.Radius <= sphere.Center.Y))) && (((sphere.Center.Y <= box.Maximum.Y - sphere.Radius) && (box.Maximum.Y - box.Minimum.Y > sphere.Radius)) && (((box.Minimum.Z + sphere.Radius <= sphere.Center.Z) && (sphere.Center.Z <= box.Maximum.Z - sphere.Radius)) && (box.Maximum.X - box.Minimum.X > sphere.Radius)))) .... }
PVS-Studioã® èŠå ïŒ V3001 ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãbox.Maximum.X-box.Minimum.X> sphere.RadiusãããããŸãã SiliconStudio.Core.Mathematics Collision.cs 1322
ãã®ã³ãŒããç解ããããšã¯æããã«ç°¡åã§ã¯ãããŸãã...éšååŒãåçŽãªæåã«çœ®ãæããŠïŒæ¬åŒ§ãçç¥ããŠïŒåŒãåçŽåããŠã¿ãŸãããã 次ã«ã次ã®ã³ãŒããååŸããŸãã
if (A && B && C && D && E && F && G && H && C)
éšååŒã®æ°ã¯äŸç¶ãšããŠå°è±¡çã§ããããšã©ãŒãèŠã€ããã®ã¯ç°¡åã§ãã ãbox.Maximum.X-box.Minimum.X> sphere.Radiusãã«å¯Ÿå¿ããéšååŒãCãã¯ãã³ãŒãå ã§ããã«ãã§ãã¯ãããŸãã å ã®åŒã泚ææ·±ãèŠããšãå®éã«ã¯ããã®éšååŒã®ä»£ããã«ã次ã®ããã«ãªã£ãŠããããšãç解ã§ããŸãã
box.Maximum.Z - box.Minimum.Z > sphere.Radius
ã©ãã
.... /// <exception cref="System.ArgumentNullException"> /// key is null.</exception> public bool Remove(KeyValuePair<TKey, Tvalue> item) { if (item.Key == null || item.Key == null) throw new ArgumentException(); .... }
PVS-StudioèŠåïŒ V3001 ã||ãã®å·ŠåŽãšå³åŽã«åäžã®ãµãåŒãitem.Key == nullãããããŸã æŒç®åã SiliconStudio.Core MultiValueSortedDictionary.cs 318
å°ãªããšã-ç¶æ ã¯å¥åŠã«èŠããŸãã ããã§ã¯å¥ã®éšååŒãæ瀺ãããŠãããšæšæž¬ã§ããŸããã泚éã§å€æããŸãã ããã¯ã¿ã€ããã¹ã§ããããšãå€æããŸããããã©ã®ããã«èš±å¯ããããã¯å®å šã«ã¯æããã§ã¯ãããŸããã ãããã«ããŠããã³ãŒããä¿®æ£ããå¿ èŠããããŸãã
å€ãã®å Žåããªããžã§ã¯ããèªåèªèº«ã«å²ãåœãŠããããšãå²ãåœãŠã«ééããçããŸãã ãã®ãããªå ŽåãåŽé¢ããèŠãŠãã³ãŒãã®ä¿®æ£æ¹æ³ãèšãã®ã¯é£ããå ŽåããããŸãã ãããã®å Žæã®ããã€ããèŠãŠã¿ãŸãããã
public ParameterComposedKey(ParameterKey key, string name, int indexer) { Key = key; Name = name; Indexer = indexer; unchecked { hashCode = hashCode = Key.GetHashCode(); hashCode = (hashCode * 397) ^ Name.GetHashCode(); hashCode = (hashCode * 397) ^ Indexer; } }
PVS-StudioèŠåïŒ V3005 ãhashCodeãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã SiliconStudio.Xenko ParameterKeys.cs 346
hashCodeãã£ãŒã«ãã¯ããèªäœã«å²ãåœãŠãããŸãã å°ãªããšãããã¯äžå¿ èŠãªå²ãåœãŠã§ãããã»ãšãã©ã®å Žåãããã·ã¥æ¹æ³ã«ééãããããŸãã ããã€ãã®ä¿®æ£ãªãã·ã§ã³ã衚瀺ãããŸãã
- äžèŠãªå²ãåœãŠãåé€ããŸãã
- æåã®å²ãåœãŠã次ã®ãããªãµãåŒã«çœ®ãæããŸãïŒhashCode * 397ïŒã
- ããããããIndexerãããããã£ã®ãGetHashCodeïŒïŒãã¡ãœãããåŒã³åºãå¿ èŠããããŸãã
ãã®å Žåã®å¯ŸåŠæ¹æ³ã¯ãã³ãŒãã®äœæè 次第ã§ãã
ã³ãŒãã«ã¯ãåžžã«çãŸãã¯åœã®æå³ãæã€åŒããããŸããã åæ§ã®ã±ãŒã¹ãV3022蚺æã«ãã£ãŠæ€åºããã次ã«ããã®å©ããåããŠæ€åºã§ããã³ãŒãã®äžéšã以äžã«ç€ºããŸãã
private void SetTime(CompressedTimeSpan timeSpan) { .... while (....) { var moveNextFrame = currentKeyFrame.MoveNext(); if (!moveNextFrame) { .... break; } var keyFrame = moveNextFrame ? currentKeyFrame.Current : data.ValueNext; .... } .... }
PVS-StudioèŠåïŒ V3022åŒ 'moveNextFrame'ã¯åžžã«trueã§ãã SiliconStudio.Xenko.Engine AnimationChannel.cs 314
äžé æŒç®åã§ã¯ãå€æ° 'moveNextFrame'ã¯åžžã«trueã§ãã ãã以å€ã®å Žåã¯ãåé¡ã®ã¹ããŒãã¡ã³ããå®è¡ãããåã«ã«ãŒããçµäºããŸãã ãããã£ãŠãå®è¡ããŸã äžé æŒç®åã«å°éããå ŽåããkeyFrameããªããžã§ã¯ãã¯åžžã«åãå€-ãcurrentKeyFrame.Currentããæã¡ãŸãã
åæ§ã®ç¶æ³ã远跡ããã³ãŒãã¹ããããã®èŠåïŒ
- V3022åŒ 'inputTexture.Dimension == TextureDimension.TextureCube'ã¯åžžã«trueã§ãã SiliconStudio.Xenko.Engine LambertianPrefilteringNoCompute.cs 66
- V3022åŒ 'inputTexture.Dimension == TextureDimension.TextureCube'ã¯åžžã«trueã§ãã SiliconStudio.Xenko.Engine LambertianPrefilteringSH.cs 72
ã¬ãã¥ãŒãç¶ç¶ããŸãã
public enum Diff3ChangeType { None, Children, MergeFromAsset1, MergeFromAsset2, MergeFromAsset1And2, Conflict, ConflictType, ConflictArraySize, InvalidNodeType, } private static bool CheckVisitChildren(Diff3Node diff3) { return diff3.ChangeType == Diff3ChangeType.Children || diff3.ChangeType != Diff3ChangeType.None; }
èŠåPVS-StudioïŒ V3023ãã®åŒã®æ€æ»ãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã SiliconStudio.Assets Diff3Node.cs 70
ãã®åŒã¯åé·ã§ãããããšã©ãŒãå«ãŸããŠããŸãã æåã®éšååŒãçã®å Žåã2çªç®ã®éšååŒãåžžã«çã«ãªããŸãïŒãã ããå®è¡ã¯èšç®ã«éããŸããïŒã ãã®åŒã¯ããdiff3.ChangeTypeïŒ= Diff3ChangeType.Noneãã«ç°¡ç¥åã§ããŸãã ãããããæ€èšäžã®ã±ãŒã¹ã§ã¯ãäžå¿ èŠãªãã§ãã¯ã ããå®è£ ãããŠããŸãããééã£ãå€æ°ããã§ãã¯ãããå Žåãå¥ã®ãšã©ãŒã瀺ããŠããå ŽåããããŸãã 詳现ã«ã€ããŠã¯ã蚺æã®ããã¥ã¡ã³ããåç §ããŠãã ããã
æžåŒèšå®æååã®èå³æ·±ãå Žæãããã€ããããŸããã
public string ToString(string format, IFormatProvider formatProvider) { if (format == null) return ToString(formatProvider); return string.Format(formatProvider, "Red:{1} Green:{2} Blue:{3}", R.ToString(format, formatProvider), G.ToString(format, formatProvider), B.ToString(format, formatProvider)); }
èŠåPVS-StudioïŒ V3025ã®åœ¢åŒãæ£ãããããŸãã ã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ4.çŸåšïŒ3. SiliconStudio.Core.Mathematics Color3.cs 765
ãã©ãŒãããæååãã©ã¡ãŒã¿ãŒã¯{0}ã§ã€ã³ããã¯ã¹ä»ããããŸããããã§ã¯ãã€ã³ããã¯ã¹ä»ãã¯{1}ã§å§ãŸããŸãã ãã®å Žåããã©ãŒãããæååã«ã¯4ã€ã®åŒæ°ãå¿ èŠã§ããã3ã€ãã衚瀺ãããªãããããFormatExceptionãã¿ã€ãã®äŸå€ãã¹ããŒãããŸãã ãã®ãšã©ãŒãä¿®æ£ããã«ã¯ããã©ãŒãããæååã®ã€ã³ããã¯ã¹ã«æ£ããçªå·ãä»ããå¿ èŠããããŸãã
"Red:{0} Green:{1} Blue:{2}"
å¥ã®äŸïŒ
public static bool IsValidNamespace(string text, out string error) { .... error = items.Where(s => !IsIdentifier(s)) .Select(item => string.Format("[{0}]", item, text)) .FirstOrDefault(); .... }
èŠåPVS-StudioïŒ V3025ã®åœ¢åŒãæ£ãããããŸãã ã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ1.çŸåšïŒ2. SiliconStudio.Core.Design NamingHelper.cs 56
æ£å察ã¯çã§ã-圢åŒæååã«ã¯1ã€ã®åŒæ°ãå¿ èŠã§ãããã¡ãœããã«ã¯2-ãã¢ã€ãã ããšãããã¹ãããå«ãŸããŸãã ãã®å Žåãäžå¿ èŠãªåŒæ°ã¯åçŽã«ç¡èŠãããŸããããã®ãããªã³ãŒãã¯ç念ã«ã€ãªããã¯ãã§ãã æè¯ã®å Žåã2çªç®ã®åŒæ°ã¯åã«äžèŠã§ãããææªã®å Žåã¯åé€ã§ããŸã-圢åŒæååãæ£ãããããŸããã
private bool requestedExit; public void MainLoop(IGameDebuggerHost gameDebuggerHost) { .... while (!requestedExit) { Thread.Sleep(10); } }
PVS-StudioèŠåïŒ V3032ãã®åŒã§åŸ æ©ããããšã¯ãã³ã³ãã€ã©ãããã€ãã®å€æ°ãæé©åããå¯èœæ§ããããããä¿¡é Œã§ããŸããã ãããåé¿ããã«ã¯ãæ®çºæ§å€æ°ãŸãã¯åæããªããã£ãã䜿çšããŸãã SiliconStudio.Xenko.Debugger GameDebuggerTarget.cs 225
ãã®ã«ãŒãã¯ãå€éšããç¹å®ã®ã€ãã³ããäºæããå€æ° 'requestedExit'ã®å€ã 'false'ã§ããéãå®è¡ããå¿ èŠããããŸãã ãã ããæé©åã®åŸãã³ã³ãã€ã©ã¯å€æ° 'requestedExit'ã®å€ããã£ãã·ã¥ã§ããããããã®ã«ãŒãã¯ç¡éã«ãªãå¯èœæ§ããããŸãã ãããã®ãšã©ãŒã¯ãããããã°ãããŒãžã§ã³ãšããªãªãŒã¹ãããŒãžã§ã³ã®åäœãç°ãªãå¯èœæ§ãããã®ã¯æé©åäžã®ãã£ãã·ã³ã°ãåå ã§ããããããã£ããããã®ã¯ããªãå°é£ã§ãã ãšã©ãŒãä¿®æ£ããã«ã¯ããã£ãŒã«ãã宣èšãããšãã«ãvolatileã修食åãè¿œå ããããå°çšã®åæããŒã«ã䜿çšããŸãã 詳现ã«ã€ããŠã¯ã ãã®èšºæã®ããã¥ã¡ã³ããåç §ããŠãã ãã ã
次ã®å¥åŠãªã³ãŒãïŒ
private void QuickSort(List<TexImage> list, int left, int right) { int i = left; int j = right; double pivotValue = ((left + right) / 2); int x = list[(int)pivotValue].DataSize; .... }
PVS-StudioèŠåïŒ V3041åŒã¯æé»çã« 'int'åãã 'double'åã«ãã£ã¹ããããŸããã åæ°éšåã®æ倱ãé¿ããããã«ãæ瀺çãªåãã£ã¹ãã®äœ¿çšãæ€èšããŠãã ããã äŸïŒdouble A =ïŒdoubleïŒïŒXïŒ/ Y;ã SiliconStudio.TextureConverter AtlasTexLibrary.cs 422
äžèšã®ãã©ã°ã¡ã³ããé€ããŠãå€æ°ãpivotValueãã¯ã©ãã§ã䜿çšãããŠããŸããã ãã®å€æ°ã¯ 'double'åã§ãããåæååŒã«å«ãŸãããã¹ãŠã®å€æ°ã®åã¯æŽæ°ã§ãããããåæåããããšæŽæ°é€ç®ãå®è¡ãããŸãã ããã«ããã®å€æ°ã®ãintãåãžã®å€æãããã«å®è¡ãããŸãã ãããã£ãŠãå€æ° 'pivotValue'ã宣èšãããšãã«ããã«å 'int'ã䜿çšããããåæååŒã䜿çšããŠé åã®ã€ã³ããã¯ã¹ãèšç®ã§ããŸãã ãããã«ãããã³ãŒãã¯å¥åŠã«èŠããåçŽåããå¿ èŠããããŸãã
次ã®èŠåã¯ãWPFãµãã·ã¹ãã ã«é¢é£ããŠããŸãã
public static readonly DependencyProperty KeyProperty = DependencyProperty.Register("Key", typeof(object), typeof(TextBoxKeyUpCommandBehavior), new PropertyMetadata(Key.Enter)); public Key Key { get { return (Key)GetValue(KeyProperty); } set { SetValue(KeyProperty, value); } }
èŠåPVS-StudioïŒ V3046 WPFïŒDependencyPropertyã«ç»é²ãããã¿ã€ãã¯ãã¢ã¯ã»ã¹ã«äœ¿çšãããããããã£ã®ã¿ã€ããšäžèŽããŸããã SiliconStudio.Presentation TextBoxKeyUpCommandBehavior.cs 18
äŸåé¢ä¿ããããã£ãç»é²ãããšãã«ãããããã£ãããªããžã§ã¯ããã¿ã€ãã®å€ãæ ŒçŽããããšã瀺ãããŸããã ãããã£ãŠãä»»æã®ã¿ã€ãã®å€ããã®ããããã£ã«æžã蟌ãããšãã§ããŸãããã¢ã¯ã»ã¹ããããšãããšãããããã£ã«æžã蟌ãŸãããªããžã§ã¯ãã®ã¿ã€ãããããŒãã¿ã€ãã«ãã£ã¹ãã§ããªãå ŽåãäŸå€ãçºçããå¯èœæ§ããããŸãã ããããã£ãä¿ååãšããŠç»é²ããå ŽåããKeyããæå®ããå¿ èŠããããšããäºå®ã¯ãå€ãKey.Enterããããããã£ã®ããã©ã«ãå€ãšããŠæå®ãããŠãããšããäºå®ãããæããã§ãã
æ°ãã蚺æã«ãŒã«
èšäºã®åé ã§è¿°ã¹ãããã«ããããžã§ã¯ãã¯ãPVS-Studioã®ææ°ãªãªãŒã¹ã§è¿œå ãããæ°ãã蚺æã¡ãã»ãŒãžã«ãã£ãŠç¹å®ãããå Žæãæ€åºããããšã«æåããŸããã ãããã®å Žæã®äžéšã®æŠèŠã以äžã«ç€ºããŸãã
ã¡ãœãããã©ã¡ãŒã¿ã®1ã€ãäžæžããããã³ãŒãã®ããã€ãã®éšåãäžèŽããŸãããããã以åã¯ããã®å€ã¯ãŸã£ãã䜿çšãããŠããŸããã§ããã ãããã£ãŠãã¡ãœããã«å ¥ã£ãŠããå€ã¯åã«å€±ãããŸãã
internal delegate void InternalValueChangedDelegate( InternalValue internalValue, object oldValue); private static InternalValueChangedDelegate CreateInternalValueChangedEvent( ParameterKey key, InternalValueChangedDelegate internalEvent, ValueChangedDelegate originalEvent) { internalEvent = (internalValue, oldValue) => originalEvent(key, internalValue, oldValue); return internalEvent; }
PVS-StudioèŠåïŒ V3061ãã©ã¡ãŒã¿ãŒ 'internalEvent'ã¯ã䜿çšãããåã«åžžã«ã¡ãœããæ¬äœã§æžãæããããŸãã SiliconStudio.Xenko ParameterCollection.cs 1158
ãinternalEventããªããžã§ã¯ãã¯ã©ãã§ã䜿çšããããããã«äžæžããããŠããã¡ãœããããè¿ãããããããã®ã³ãŒãã¯å¥åŠã«èŠããŸãã 次ã«ãäžè¬çã«ã¡ãœããã·ã°ããã£ãããã®ãã©ã¡ãŒã¿ãŒãåé€ããã¡ãœããã®æ¬äœã次ã®åœ¢åŒã«åçŽåããããšãã§ããŸãã
return (internalValue, oldValue) => originalEvent(key, internalValue, oldValue);
ãããããšã©ãŒãããèå³æ·±ãå¯èœæ§ããããå®éããã®ã¡ãœããã¯ããªã²ãŒãã®ãã§ãŒã³ãäœæããããšãç®çãšããŠããŸããã ãã®å Žåãåé¡ã®è§£æ±ºçã¯ãèšå·ã=ããã+ =ãã«ä¿®æ£ããããšã§ãã
ãã©ã¡ãŒã¿ãŒã®æžãæãã«é¢ããŠãããã«2ã€ã®ã±ãŒã¹ããããŸããã
private void Load(TexImage image, DxtTextureLibraryData libraryData, LoadingRequest loader) { .... libraryData = new DxtTextureLibraryData(); //<= image.LibraryData[this] = libraryData; libraryData.Image = new ScratchImage(); .... }
PVS-StudioèŠåïŒ V3061ãã©ã¡ãŒã¿ãŒ 'libraryData'ã¯ã䜿çšãããåã«åžžã«ã¡ãœããæ¬äœã§æžãæããããŸãã SiliconStudio.TextureConverter DxtTexLib.cs 213
ãlibraryDataããã©ã¡ãŒã¿ãŒã¯ããã®å€ãã©ããã§äœ¿çšãããåã«äžæžããããŸãã ãã ãã修食å 'ref'ãŸã㯠'out'ã§ããŒã¯ãããŠããŸããã ã¡ãœããã«ãã£ãŠåãå ¥ããããå€ãåã«å€±ããããããããã¯éåžžã«å¥åŠã§ãã
åæ§ã®ã³ãŒãã«å¯ŸããŠçºè¡ãããèŠåïŒ V3061ãã©ã¡ãŒã¿ãŒ 'libraryData'ã¯ã䜿çšãããåã«åžžã«ã¡ãœããæ¬äœã§æžãæããããŸãã SiliconStudio.TextureConverter FITexLib.cs 244
å察ã®ç¶æ³-ã¡ãœããã¯å€ã䜿çšãããªãåŒæ°ãåããŸãïŒ
private static ImageDescription CreateDescription(TextureDimension dimension, int width, int height, int depth, ....) public static Image New3D(int width, int height, int depth, ....) { return new Image(CreateDescription(TextureDimension.Texture3D, width, width, depth, mipMapCount, format, 1), dataPointer, 0, null, false); }
PVS-StudioèŠåïŒ V3065ãã©ã¡ãŒã¿ãŒ 'height'ã¯ã¡ãœããã®æ¬äœå ã§ã¯äœ¿çšãããŸããã SiliconStudio.Xenko Image.cs 473
ã¢ãã©ã€ã¶ãŒã®èŠåãããããããã«ããheightããã©ã¡ãŒã¿ãŒã¯ã©ãã§ã䜿çšãããŠããŸããã 代ããã«ããã©ã¡ãŒã¿ãå¹ ãã2åãCreateDescriptionãã¡ãœããã«æž¡ãããŸãããããã¯ãšã©ãŒã瀺ããŠããå¯èœæ§ããããŸãã 'CreateDescription'ã¡ãœããã®æ£ããåŒã³åºãã¯æ¬¡ã®ããã«ãªããŸãã
CreateDescription(TextureDimension.Texture3D, width, height, depth, mipMapCount, format, 1)
ãããã«
CïŒã§èšè¿°ãããã²ãŒã ãšã³ãžã³ããã§ãã¯ã¢ãŠãããã®ã¯èå³æ·±ãããšã§ããã 誰ããééããç¯ããããŸããŸãªããŒã«ããã®æ°ãæå°éã«æããéçã¢ãã©ã€ã¶ãŒããã®ãããªããŒã«ã®1ã€ã§ãã ãããŠããšã©ãŒãããã«èŠã€ãããšãä¿®æ£ã«ãããè²»çšã¯å®ããªããŸãã
ãã¡ããããããžã§ã¯ãã§èŠã€ãã£ããã¹ãŠã®ãšã©ãŒãèšäºã«èšèŒãããŠããããã§ã¯ãããŸããã 第äžã«ãããã«ããèšäºã®ãµã€ãºãå€§å¹ ã«å¢å ããŸãã第äºã«ã蚺æã¡ãã»ãŒãžã®äžéšã¯ç¹å®ã®ãã®ã§ãã ãããã£ãŠãç¹å®ã®ã¿ã€ãã®ãããžã§ã¯ãã«é¢é£ãããã®ã¯ããã¹ãŠã®äººã«ãšã£ãŠé¢å¿ãããããã§ã¯ãããŸããã ãããããã¡ãããéçºè ïŒããã³ãããã奜å¥å¿programmerçãªããã°ã©ããŒïŒã¯ãã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããããã¹ãŠã®çãããå ŽæãèŠãããšã«èå³ããããŸãã ããã¯ãè©Šçšçã®ã¢ãã©ã€ã¶ãããŠã³ããŒãããããšã§å®è¡ã§ããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSergey Vasilievã Xenkoã²ãŒã ãšã³ãžã³ã§ãšã©ãŒããã£ãã ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã