
ä»æ¥ãç§ã¯åã³Tizenãããžã§ã¯ãã«æ»ããŸãã ç§ãã¡ã®ããã°ã®æè¿ã®èšäºãTizenã®CïŒã³ã³ããŒãã³ãã®ã³ãŒãã§ãšã©ãŒãèŠã€ããå®éšãã§è¡šé¢åæãè¡ããPVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšããŠãšã©ãŒã«ã€ããŠãã®ãããžã§ã¯ãã®ã³ã³ããŒãã³ãã®ãã¹ãŠã®CïŒã³ãŒãããã§ãã¯ããããã«ã€ããŠæžãããšãçã«ããªã£ãŠãããšããçµè«ã«éããŸããèšäºã é
æ»ãªããç§ã¯ãã®äœæ¥ãè¡ããŸããããã®çµæãããªããšå
±æããããšæããŸãã CïŒã³ãŒãã§ã¯ãPVS-Studioã¢ãã©ã€ã¶ãŒã¯ããèªäœãäžååã§ãããšããã«èšã£ãã¯ãã§ãã ãã ãããŸãæåã«ãã¢ãã©ã€ã¶ãŒãäœãèŠã€ããããšãã§ããããèŠãŠã¿ãŸãããã次ã«ãçµ±èšãåããèŠçŽããŸãã
ã¯ããã«
ç§ã®ååã®Andrei Karpovã¯æè¿ãCããã³C ++ã§æžãããTizenãããžã§ã¯ãã³ãŒãã®åæã«é¢ãã2ã€ã®å£®å€§ãªèšäºãå
¬éããŸããã
- Tizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®27,000ãšã©ãŒ
- Tizenã³ãŒãã®äŸã䜿çšããŠããã€ã¯ãæé©åã«ã€ããŠè©±ããŸããã
Tizenãããžã§ã¯ãã«CïŒã®ã³ãŒããå«ãŸããŠããããšã«æ°ä»ãããšãããã®èšèªã§æžãããã³ã³ããŒãã³ãã®ãã§ãã¯ã«é¢ããåæ§ã®èšäºãäœæãããã£ãã®ã§ãã æ®å¿µãªãããä»åã¯ã¢ãã©ã€ã¶ãŒãé¡èãªæåãå®èšŒã§ããŸããã§ããããæ¥ãã§åé¡ã詳现ã«èª¿æ»ããããšã¯ã§ããŸããã
ç§ããã§ãã¯ããããš
TizenãœãŒã¹ã³ãŒãã¯ã
ãªã³ã¯ããããŠã³ããŒãã§ããŸãã ãªããžããªã«ã¯ãçŽ1,000ã®ãããžã§ã¯ããå«ãŸããŠããŸããåãããžã§ã¯ãã¯ããœãŒã¹ã³ãŒããšãµããŒããã¡ã€ã«ãå«ãã¢ãŒã«ã€ãã§æ§æãããŠããŸãã ã¢ãŒã«ã€ãã®ååãŸãã¯èª¬æã«ãã£ãŠãå
éšã®å
容ãåžžã«ç解ã§ãããšã¯éããŸããã ãã®ããããªããžããªå
šäœã®ã¢ãŒã«ã€ããããŠã³ããŒããå±éãããã³èª¿æ»ããå¿
èŠããããŸããã
ååã®
èšäºã§ãTizenãããžã§ã¯ãã«å«ãŸããCïŒãœãŒã¹ã³ãŒããã¡ã€ã«ã®ç·æ°ïŒ4,929ã* .Designer.csãé€ãïŒãšãã®äžã®ã³ãŒãè¡ïŒçŽ691,000ïŒãåŒçšããŸããã ããã§ããã詳现ãªåæãå¿
èŠã§ãã æåã«ãæ¡åŒµåã.slnãŸãã¯.csprojã®ãã¡ã€ã«ãèŠã€ããŠãã ããã ãã®ãããªãã¡ã€ã«ãååšãããšãVisual Studio IDEã§åæãå¯èœã«ãªããäœæ¥ã倧å¹
ã«ç°¡çŽ åãããŸãã
ãã®ãããæ€çŽ¢äžã«ã227åã®ãœãªã¥ãŒã·ã§ã³ïŒ* .slnïŒãš166åã®CïŒãããžã§ã¯ãïŒ* .csprojïŒãèŠã€ãããŸããã ãœãªã¥ãŒã·ã§ã³ãã¡ã€ã«ãããCïŒãããžã§ã¯ããå«ããã®ãéžæããŸããã ãã®ãããªè§£æ±ºçã¯3ã€ãããããŸããã§ããã
- Tizen.Xamarin.Forms.Extension.sln
- Xamarin.Forms.Tizen.sln
- Xamarin.Forms.sln
æåã®2ã€ã®ãœãªã¥ãŒã·ã§ã³ã¯ãXamarin.Formsã®ãµãŒãããŒãã£ã³ã³ããŒãã³ãäžã®Tizenã¢ããªã³ã§ããã3çªç®ã«ã¯ã³ã³ããŒãã³ãèªäœãå«ãŸããŠããŸãã 1幎ã¡ãã£ãšåã«ãXamarin.Formsã®ãã§ãã¯
ã«é¢ããèšäºãæžããŸã
ã ã ç§ã®ä»äºã§ã¯ããããã®çµæãèæ
®ããŠãæ°ãããšã©ãŒãèŠã€ããããšããŸãã
ããã«ããããã®ãœãªã¥ãŒã·ã§ã³ã®äžéšã§ãããããžã§ã¯ããã¡ã€ã«ïŒ* .csprojïŒãé€å€ããããšã§ããœãªã¥ãŒã·ã§ã³ã«é¢é£ä»ããããŠããªã107åã®CïŒãããžã§ã¯ããåãåããŸããã ãããã®ã»ãšãã©ãã¹ãŠã¯ããcsapi- *ããšãã圢åŒã®ååãæã€æäžäœã®ãã©ã«ããŒã«ãããŸãã ãã®11åã®ãã¹ããããžã§ã¯ããšããµããŒããããŠããªãVisual Studio圢åŒã®9åã®ãããžã§ã¯ããé€ããæ®ãã®87åã®ãããžã§ã¯ããåãåããŸããã ãããããåå¥ã«ãã§ãã¯ããŸããã
ãã®ç 究ã®çŽåºŠã®ããã«ãTizenã®å
éšCïŒã³ã³ããŒãã³ãïŒåã87ãããžã§ã¯ãïŒã§åŸãããçµæããXamarin.Formsã«åºã¥ããŠã³ã³ããŒãã³ãããã§ãã¯ããçµæããåé¢ããããšã«ããŸããã æåã¯Xamarin.Formsãèæ
®ããããããŸããã§ããããçèããçµæãTizenã¯ãã®ã³ã³ããŒãã³ããç¬èªã®ç®çã§äœ¿çšããŠãããããXamarin.Formsãšã©ãŒãTizenã«åœ±é¿ãäžããå¯èœæ§ããããšçµè«ä»ããŸããã
ãŸãã以åã®
èšäºã§æ¢ã«åŒçšãããŠãããšã©ãŒã«ã€ããŠã¯èª¬æããŸããã

æ€èšŒçµæ
å
éšCïŒTizenã³ã³ããŒãã³ã
Tizenãããžã§ã¯ãã®ãã®éšåã®æ€èšŒäžã«ãPVS-Studioã¢ãã©ã€ã¶ãŒã¯356åã®èŠåãçºè¡ããŸããããã®ãã¡18å-é«ä¿¡é Œã¬ãã«ã157-äžä¿¡é Œã¬ãã«ã181-äœä¿¡é Œã¬ãã«ã§ãã çŽ325,000è¡ã®ã³ãŒããåæãããŸããã
誀æ€ç¥ã®å²åã¯éåžžé«ããããäœä¿¡é Œã¬ãã«ã®èŠåã¯èæ
®ããŸããã§ããã ãã ããæ®å¿µãªãããä»åã®å€ãã®èª€æ€ç¥ã¯äœã¬ãã«ã ãã§ã¯ãããŸããã é«ã¬ãã«ããã³äžã¬ãã«ã®175ã®èŠåã®ãã¡ãç§ã¯12åã®ãšã©ãŒã®ã¿ãæ€åºã§ããŸããã æãèå³æ·±ããã®ãèŠãŠã¿ãŸãããã
PVS-StudioèŠåïŒ
V3008 ã_scanDataãå€æ°ã«ã¯å€ãé£ç¶ããŠ2åå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ138ã137ãTizen.Network.Bluetooth BluetoothLeAdapter.cs 138
CWE-563ã 䜿çšããªãå€æ°ãžã®å²ãåœãŠïŒãæªäœ¿çšå€æ°ãïŒ
internal BluetoothLeDevice(BluetoothLeScanData scanData) { _scanData = new BluetoothLeScanData (); _scanData = scanData; .... }
_scanDataãã£ãŒã«ãã«ã¯ ãå€ã2åå²ãåœãŠãããŸãã éåžžã«çãããããã§ãã 念ã®ããã
BluetoothLeScanDataã¯ã©ã¹ã®å®£èšãšãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãèŠãŠãã ããã ãããããã³ã³ã¹ãã©ã¯ã¿ãŒåŒã³åºãã«ã¯ããã€ãã®è¿œå ã®ã¢ã¯ã·ã§ã³ãå«ãŸããŠããŸãã ã¯ã©ã¹ã¯å°ããã®ã§ãå
ã®ã³ãŒããå°ããã©ãŒãããããŠãå
šäœãæäŸããŸãã
internal class BluetoothLeScanData { internal string RemoteAddress { get; set; } internal BluetoothLeDeviceAddressType AddressType { get; set; } internal int Rssi { get; set; } internal int AdvDataLength { get; set; } internal byte[] AdvData { get; set; } internal int ScanDataLength { get; set; } internal byte[] ScanData { get; set; } }
ã芧ã®ãšãããã¯ã©ã¹ã«ã¯ãªãŒããŒã©ã€ããããããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ãå«ãŸããŠããªããããæããã«ã
_scanDataãã£ãŒã«ããžã®å€ã®äºéå²ãåœãŠã¯ãšã©ãŒã«ãªããŸãã
PVS-StudioèŠåïŒ
V3009ãã®ã¡ãœãããåžžã«1ã€ã®åãå€ã0ããè¿ãã®ã¯å¥åŠã§ãã Tizen.Applications.WidgetApplication WidgetType.cs 47
CWE-393ã 誀ã£ãã¹ããŒã¿ã¹ã³ãŒãã®è¿åŽ
private int OnCreate(....) { WidgetBase b = Activator.CreateInstance(ClassType) as WidgetBase; .... if (b == null) return 0; .... return 0; }
ã¡ãœããã¯ãäœæ¥ã®çµæã«é¢ä¿ãªããåžžã«0ãè¿ããŸãã ããšãã°ã次ã®ããã«ä¿®æ£ã§ããééãããããŸãã
private int OnCreate(....) { WidgetBase b = Activator.CreateInstance(ClassType) as WidgetBase; .... if (b == null) return 0; .... return 1; }
PVS-Studioã®èŠåïŒ
- V3022åŒ 'ïŒLeftBoundIsForward'ã¯åžžã«falseã§ãã clipper_library clipper.cs 838
- V3022åŒ 'ïŒLeftBoundIsForward'ã¯åžžã«trueã§ãã clipper_library clipper.cs 863
CWE-570 / CWE-571åŒã¯åžžã«False / Trueã§ã
private TEdge ProcessBound(TEdge E, bool LeftBoundIsForward) { .... if (LeftBoundIsForward) { .... if (!LeftBoundIsForward) Result = Horz.Prev; .... } else { .... if (!LeftBoundIsForward) Result = Horz.Next; .... } .... }
ãã®ã³ãŒããã©ã°ã¡ã³ãã«ã¯ãåãã¿ã€ãã®ãšã©ãŒãã§ãã¯ãããã«2ã€å«ãŸããŠããŸãã ãã®å Žåãæåã®å Žåã
Resultå€æ°ã¯
Horz.Prevã®å€ãååŸããŸãã
ã2çªç®ã®å Žåãåã
Resultå€æ°ã¯åžžã«
Horz.Nextã®å€ãååŸããŸãã äœæè
ã¯ãã®ã³ãŒããæ
éã«æ€èšããèªåã§ãšã©ãŒãä¿®æ£ããå¿
èŠããããŸãã
PVS-Studio
èŠå ïŒ
V3022åŒ 'e.OutIdx> = 0'ã¯åžžã«trueã§ãã clipper_library clipper.cs 3144
CWE-571åŒã¯åžžã«çã§ã
private void DoMaxima(TEdge e) { .... if(....) { .... } else if( e.OutIdx >= 0 && eMaxPair.OutIdx >= 0 ) { if (e.OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e.Top); .... } .... }
æ€èšŒã誀ã£ãŠããå¥ã®ã³ãŒãã æŒç®åã||ããæ¡ä»¶
e.OutIdx> = 0 && eMaxPair.OutIdx> = 0ã§äœ¿çšããã
å Žå ããã¹ãããã
ifãããã¯ã§
e.OutIdx> = 0ããã§ãã¯ããã®ãçã«ããªã£ãŠããŸãã ä»ã§ã¯äžå¯©ã«èŠããŸãã
PVS-StudioèŠåïŒ
V3110 'InsertBefore'ã¡ãœããå
ã§ç¡éååž°ã
çºçããå¯èœæ§ããããŸãã ElmSharp Toolbar.cs 288
CWE-674éå¶åŸ¡ååž°
public ToolbarItem InsertBefore(ToolbarItem before, string label) { return InsertBefore(before, label); }
InsertBeforeã¡ãœãããåŒã³åºããšãç¡éååž°ãçæãããŸãã ãã®ãšã©ãŒã¯ãããããééã£ãã¡ãœãããªãŒããŒããŒãã®åŒã³åºããåå ã§ãã ã³ãŒãã«ã¯
InsertBeforeãšããå¥ã®ã¡ãœããããããŸãã
public ToolbarItem InsertBefore(ToolbarItem before, string label, string icon) { .... }
ããããããããã¯ãã¹ãŠãã®ã»ã¯ã·ã§ã³ã®èå³æ·±ããšã©ãŒã§ãã çãããã³ãŒãã»ã¯ã·ã§ã³ãããã€ããããŸããããããã«ã€ããŠã¯è©³ãã説æããŸããã CïŒã§èšè¿°ãããSamsung Electronicsã®ã³ãŒãã¯ãåªããå質ã瀺ããŠããŸãã æ€èšŒæžã¿ã®ã³ãŒããSamsungã§ããããšã確信ããŠããã®ã¯ãªãã§ããïŒ ã¯ãããã§ãã¯ãããåãã¡ã€ã«ã«ã¯ãããããŒã«ãCopyright©2016 Samsung Electronics Co.ãLtd All Rights Reservedããšãã圢åŒã®ã³ã¡ã³ããå«ãŸããŠããããã§ãã
Xizarin.Forms Tizenã³ã³ããŒãã³ã
TizenãXamarin.Formsã§äœ¿çšããã¢ããªã³ã«ã¯ãçŽ242,000è¡ã®ã³ãŒããå«ãŸããŠããŸãã æ€èšŒäžãPVS-Studioã¢ãã©ã€ã¶ãŒã¯163åã®èŠåãçºè¡ããŸããããã®ãã¡10å-é«ä¿¡é Œã¬ãã«ã46-äžä¿¡é Œã¬ãã«ã107-äœä¿¡é Œã¬ãã«ïŒèæ
®ãªãïŒã
çŽæã©ãããXamarin.Formsã®ãã§ãã¯ã«é¢ãã以åã®
èšäºã§èª¬æãããŠããªããšã©ãŒãèŠã€ããããšããŸãã ã¡ãªã¿ã«ãæ°ãããã§ãã¯äžã«ããã«ãªã¹ããããŠãããšã©ãŒã®ããã€ãã¯èŠã€ãããŸããã§ããã ã©ããããèè
ãèšäºãç¥ã£ãåŸã«ä¿®æ£ãããããã§ãã
å°æ°ã®èŠåãçºè¡ãããŸãããããããã®éã«ããã€ãã®æ°ãããšã©ãŒãèŠã€ããããšãã§ããŸããã
PVS-StudioèŠåïŒ
V3095 nullã«å¯ŸããŠæ€èšŒãããåã«ãã³ã³ããã¹ãããªããžã§ã¯ãã䜿çšãããŸããã ãã§ãã¯è¡ïŒ16ã18ãXamarin.Forms.Xaml XamlServiceProvider.cs 16
CWE-476 NULLãã€ã³ã¿ãŒéåç
§
internal XamlServiceProvider(INode node, HydratationContext context) { .... if (node != null && node.Parent != null && context.Values.TryGetValue(node.Parent,
ã³ã³ããã¹ãå€æ°ãæåã«äœ¿çšããããã®åŸã«ã®ã¿
nullããã§ãã¯ãã
ãŸã ã
PVS-StudioèŠåïŒ
V3095 nullã«å¯ŸããŠæ€èšŒãããåã« 'type'ãªããžã§ã¯ãã䜿çšãããŸããã è¡ã確èªïŒ147ã149ãXamarin.Forms.Xaml ExpandMarkupsVisitor.cs 147
CWE-476 NULLãã€ã³ã¿ãŒéåç
§
public INode Parse(....) { .... var xmltype = new XmlType(namespaceuri, type.Name, null);
èããããäŸå€ã®å¥ã®äŸã¯ã
NullReferenceExceptionã§ãã
åå€æ°ã¯ã
XmlTypeã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã«äœ¿çšããããã®åŸã
nullã®ç䟡æ§ããã§ãã¯ãã
ãŸã ã
ä»ã®åæ§ã®ãšã©ãŒïŒ
- V3095ãe.NewElementããªããžã§ã¯ãã¯ãnullãšç
§åãããåã«äœ¿çšãããŸããã è¡ã確èªããŠãã ããïŒ32ã46ãXamarin.Forms.Platform.Tizen MasterDetailPageRenderer.cs 32
- V3095ãe.NewItemsããªããžã§ã¯ãã¯ãnullã«å¯ŸããŠæ€èšŒãããåã«äœ¿çšãããŸããã è¡ã確èªããŠãã ããïŒ557ã567ãXamarin.Forms.Core Element.cs 557
- V3095ãe.OldItemsããªããžã§ã¯ãã¯ãnullã«å¯ŸããŠæ€èšŒãããåã«äœ¿çšãããŸããã è¡ã確èªããŠãã ããïŒ561ã574ãXamarin.Forms.Core Element.cs 561
- V3095ãpartããªããžã§ã¯ãã¯ãnullã«å¯ŸããŠæ€èšŒãããåã«äœ¿çšãããŸããã è¡ã確èªããŠãã ããïŒ135ã156ãXamarin.Forms.Core BindingExpression.cs 135
PVS-StudioèŠåïŒ
V3125 ãe.NewItemsããªããžã§ã¯ãã¯ãnullã«å¯ŸããŠæ€èšŒãããåŸã«äœ¿çšãããŸããã è¡ã確èªããŠãã ããïŒ999ã986ãXamarin.Forms.Core TemplatedItemsList.cs 999
CWE-476 NULLãã€ã³ã¿ãŒéåç
§
void OnProxyCollectionChanged(....) { .... if (e.NewStartingIndex >= 0 && e.NewItems != null)
ãããŠãããã¯éã®ç¶æ³ã§ãã
e.NewItemså€æ°
㯠ãæåã«äœ¿çšããåã«
null ããã§ãã¯ãã
ãŸã ã ãã ããåå©çšãããšãã圌ãã¯ãããè¡ãããšãå¿ããŸãã
çµ±èš
ååã®Andrei Karpovã以åã®èšäºã§æžããããã«ãPVS-Studioã¢ãã©ã€ã¶ãŒã¯ãTizenãããžã§ã¯ãããã®1000è¡ã®C / C ++ã³ãŒãããšã«çŽ0.4ã®ãšã©ãŒãæ€åºããŸãã CïŒã³ãŒãã§åŸããããã®ãèšç®ããŠã¿ãŸãããã
åèšã§ãçŽ567,000è¡ã®CïŒã³ãŒãããã§ãã¯ãããŸããã
ç§ã®æèŠã§ã¯ã15åã®ã³ãŒããã©ã°ã¡ã³ãã®ã¿ãèŠã€ãã£ãããããšã©ãŒãå«ãŸããŠãããšèšããŸãã
ã¢ãã©ã€ã¶ãŒã¯ãã³ãŒã1000è¡ããšã«0.02ãšã©ãŒãæ€åºããããšãããããŸããã ãŸãã¯ãèšãæããã°ã50,000è¡ã®ã³ãŒãããšã«1ã€ã®ãšã©ãŒãæ€åºããŸãã ååã§ã¯ãããŸããã

ãã®å Žåãã¢ãã©ã€ã¶ãŒããã®æçšæ§ãå®èšŒã§ããªãã£ãããšãèªããªããã°ãªããŸããã ãªãèµ·ãã£ãã®ããèšãã®ã¯é£ããã§ãã ä»ã®éããŠãããããžã§ã¯ãããã§ãã¯ãããšããã¢ãã©ã€ã¶ãŒã¯ãã°ãã°è¯ãçµæã瀺ããŸããã
ããšãã° ãéããŠããUnity3Dã³ã³ããŒãã³ãããã§ãã¯ãããšãæ€åºããããšã©ãŒã®å¯åºŠã¯ã³ãŒã1000è¡ããã0.5ãšã©ãŒã§ããã ããªãã¡ ã¬ãŒãã¯25ååäžããŸããã
çŸåšãã¹ããããŠããã³ã³ããŒãã³ãã¯éåžžã«é«å質ã§ããå¯èœæ§ããããããããã¢ãã©ã€ã¶ãŒã¯ãã®ãããžã§ã¯ãã«å
žåçãªã¿ã€ãã®ãšã©ãŒãèŠã€ããããšãã§ããŸããã ãã¶ããã®çç±ã¯ãTizenã®è€éãªã€ã³ãã©ã¹ãã©ã¯ãã£ã§ãã å€ãã®å Žåãå¿
èŠãªãã¹ãŠã®ç°å¢ãå«ãŸããŠããªããããžã§ã¯ãããã§ãã¯ãããå€ãã®ãªã³ã¯ãæ¬ èœããŠãããããäžéšã®èšºæãå®è¡ã§ããŸããã§ããã äžéšã®ãããžã§ã¯ãããŸã£ãã確èªã§ããŸããã§ããã
çµè«
ãã®ããããã¹ãçµæã¯ããã®ãããªå€§éã®ã³ãŒãã«å¯ŸããŠæåŸ
ãããã®ã§ã¯ãããŸããã§ããã ççŽã«èšã£ãŠãç§ã¯å°ãªããšãæ°çŸã®ãšã©ãŒãèŠã€ãããšäºæ³ããŠããŸãããã15件ã»ã©ãããŸããã
ãã ããPVS-Studioã¢ãã©ã€ã¶ãŒãTizenãããžã§ã¯ãã®CïŒã³ãŒããåæããã¿ã¹ã¯ã«å¯ŸåŠããããšãéèŠã§ãã ãããã£ãŠãCïŒèšèªã䜿çšããŠèšè¿°ãããæ°ããã³ã³ããŒãã³ããTizenã«è¡šç€ºãããããã«ãªã£ãå ŽåãçŸåšã§ã¯ãªããå°æ¥çã«ã¯äŸ¿å©ã§ãã æœåšçãªå©ç¹ã®ç¢ºèªã¯ãã¢ãã©ã€ã¶ãŒãä»ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§æ¢ã«çºèŠããèšå€§ãªæ°ã®ãšã©ãŒã§ãïŒ
èšäºã®ãªã¹ããåç
§ïŒã
ããã«ãç¹°ãè¿ãããšã«ããããããŠããªããããã¢ãã©ã€ã¶ãŒã䜿çšããåäžãã§ãã¯ã®ã·ããªãªã¯æé©ã§ã¯ãããŸããããšã©ãŒã¯ãã§ã«ããŒãžã§ã³ç®¡çã·ã¹ãã ã«å«ãŸããŠããŸãããããã¯æªãããšã§ãã éçã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšããæ¹ãã¯ããã«å¹ççã§ããããã«ãããã³ãŒããèšè¿°ãã段éã§ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«å
¥ããŸã§ãšã©ãŒãä¿®æ£ã§ããŸãã

PVS-StudioãããŠã³ããŒãããŠãè©Šããã ãããµã€ããªã³ã¯
- Tizenã³ã³ããŒãã³ãCïŒã³ãŒããšã©ãŒå®éš
- Microsoftã¯Xamarin.Formsã®ãœãŒã¹ãå
¬éããŸããã PVS-Studioã§ãã¹ãããæ©äŒãéãããšã¯ã§ããŸããã§ãã
- PVS-StudioããŒã ã¯Tizenãããžã§ã¯ãã«åãçµãæºåãã§ããŠããŸãïŒå
¬éã¬ã¿ãŒïŒ
- ã»ãã¥ãªãã£ã®å°é家ã«PVS-Studioã¢ãã©ã€ã¶ãŒãæäŸããŸã
- PVS-Studioã¯è匱æ§ã®æ€çŽ¢ã«ã©ã®ããã«åœ¹ç«ã¡ãŸããïŒ
- Tizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®27,000ãšã©ãŒ
- Tizenã³ãŒãã®äŸã䜿çšããŠããã€ã¯ãæé©åã«ã€ããŠè©±ããŸããã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSergey Khrenovã
Tizenã®æ¢çŽ¢ãç¶ããŸãïŒé«å質ã§ããããšã蚌æãããCïŒã³ã³ããŒãã³ã