LibreOfficeã¯ãå人ãæè²ãããã³åæ¥ç®çã§ç¡æã§äœ¿çšã§ãã匷åãªãªãã£ã¹ã¹ã€ãŒãã§ãã ãã®éçºè
ã¯ãå€ãã®åéã§Microsoft Officeã®ä»£æ¿ãšããŠäœ¿çšãããçŽ æŽããã補åãäœã£ãŠããŸãã PVS-StudioããŒã ã¯ããã®ãããªããç¥ãããŠãããããžã§ã¯ãã®ã³ãŒããèŠãŠããšã©ãŒãèŠã€ããããšåžžã«å¿ãããŠããŸãã ä»åã¯ç°¡åã§ããã ãããžã§ã¯ãã«ã¯ãæ·±å»ãªåé¡ãåŒãèµ·ããå¯èœæ§ã®ããå€ãã®ãšã©ãŒãå«ãŸããŠããŸãã ãã®èšäºã§ã¯ãã³ãŒãã§èŠã€ãã£ãããã€ãã®è峿·±ãæ¬ é¥ã«ã€ããŠèª¬æããŸãã
ã¯ããã«
LibreOfficeã¯éåžžã«å€§ããªC ++ãããžã§ã¯ãã§ãã ãã®ãµã€ãºã®ãããžã§ã¯ããç¶æããããšã¯ãéçºããŒã ã«ãšã£ãŠé£ããã¿ã¹ã¯ã§ãã ãããŠãæ®å¿µãªãããLibreOfficeã®ã³ãŒãå質ãååãªæ³šæãæã£ãŠããªããšããå°è±¡ãåããŸãã
äžæ¹ã§ã¯ããããžã§ã¯ãã¯åçŽã«å·šå€§ã§ããããã¹ãŠã®éçãŸãã¯åçåæããŒã«ã13kãœãŒã¹ã³ãŒããã¡ã€ã«ã®åæãåŠçã§ããããã§ã¯ãããŸããã éåžžã«å€ãã®ãã¡ã€ã«ãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãšãšãã«ãªãã£ã¹ã¹ã€ãŒãã®æ§ç¯ã«é¢äžããŠããŸãã ã¡ã€ã³ã®LibreOfficeãªããžããªã«ã¯ãçŽ8kã®ãœãŒã¹ã³ãŒããã¡ã€ã«ãä¿åãããŸãã ãã®éã®ã³ãŒãã¯ãéçºè
ã ãã§ãªãåé¡ãåŒãèµ·ãããŸãã

äžæ¹ããããžã§ã¯ãã«ã¯å€ãã®ãŠãŒã¶ãŒãããŠãã§ããã ãå€ãã®ãšã©ãŒãèŠã€ããŠä¿®æ£ããå¿
èŠããããŸãã ãã¹ãŠã®ééãã¯äœçŸãäœåãã®ãŠãŒã¶ãŒãå·ã€ããå¯èœæ§ããããŸãã ãããã£ãŠãã³ãŒãããŒã¹ã®ãµã€ãºã倧ããããšã¯ããšã©ãŒãæ€åºã§ããç¹å®ã®ããŒã«ã®äœ¿çšãæåŠããèšãèš³ã«ãªãã¹ãã§ã¯ãããŸããã èªè
ã¯ãã§ã«éçã³ãŒãã¢ãã©ã€ã¶ãŒã«ã€ããŠè©±ããŠãããšæšæž¬ããŠãããšæããŸã:)ã
ã¯ããéçã¢ãã©ã€ã¶ãŒã䜿çšããŠãããããžã§ã¯ãã«ãšã©ãŒããªãããšãä¿èšŒããŸããã ãã ããPVS-Studioãªã©ã®ããŒã«ã¯ãéçºæ®µéã§ã倿°ã®ãšã©ãŒãæ€åºã§ããããããããã°ããã³ãããžã§ã¯ããµããŒãã«é¢é£ããäœæ¥éãåæžã§ããŸãã
PVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããå ŽåãLibreOfficeã®ãœãŒã¹ã³ãŒãã§äœãããããããšæããèŠãŠã¿ãŸãããã ã¢ãã©ã€ã¶ãŒãèµ·åããå¯èœæ§ã¯åºç¯å²ã«ããããŸãïŒWindowsãLinuxãmacOSã ãã®ã¬ãã¥ãŒãæžãããã«ãWindowsã§ã®ãããžã§ã¯ãã®åæäžã«äœæãããPVS-Studioã¬ããŒãã䜿çšãããŸããã
2015å¹Žã®æåŸã®ãã§ãã¯ä»¥éã®å€æŽ
2015幎3æãæåã®LibreOfficeåæïŒã
LibreOfficeãããžã§ã¯ãã®æ€èšŒ ãïŒãPVS-Studioã䜿çšããŠå®è¡ãããŸããã ãã以æ¥ããªãã£ã¹ã¹ã€ãŒãã¯è£œåãšããŠå€§ããé²åããŸããããå
éšã«ã¯å€ãã®ãšã©ãŒãå«ãŸããŠããŸãã ãŸãããã以éãäžéšã®ãšã©ãŒãã¿ãŒã³ã¯ãŸã£ãã倿ŽãããŠããŸããã ããã§ãããšãã°ãæåã®èšäºã®ãšã©ãŒïŒ
V656倿°ãaVRPãããaVPNãã¯ãåã颿°ã®åŒã³åºãã«ãã£ãŠåæåãããŸãã ãããããšã©ãŒãŸãã¯æé©åãããŠããªãã³ãŒãã§ãã ãrSceneCamera.GetVRPïŒïŒãåŒã®æ€æ»ãæ€èšããŠãã ããã è¡ã確èªããŠãã ããïŒ177ã178ãviewcontactofe3dscene.cxx 178
void ViewContactOfE3dScene::createViewInformation3D(....) { .... const basegfx::B3DPoint aVRP(rSceneCamera.GetVRP()); const basegfx::B3DVector aVPN(rSceneCamera.GetVRP());
ãã®ãã°ã¯ä¿®æ£ãããŸããããææ°ããŒãžã§ã³ã®ã³ãŒãã§èŠã€ãã£ããã®ã¯æ¬¡ã®ãšããã§ãã
V656倿°ãaSdvURLãããaStrURLãã¯ãåã颿°ã®åŒã³åºãã«ãã£ãŠåæåãããŸãã ãããããšã©ãŒãŸãã¯æé©åãããŠããªãã³ãŒãã§ãã ãpThm-> GetSdvURLïŒïŒãåŒã®æ€æ»ãæ€èšããŠãã ããã è¡ã確èªããŠãã ããïŒ658ã659ãgallery1.cxx 659
const INetURLObject& GetThmURL() const { return aThmURL; } const INetURLObject& GetSdgURL() const { return aSdgURL; } const INetURLObject& GetSdvURL() const { return aSdvURL; } const INetURLObject& GetStrURL() const { return aStrURL; } bool Gallery::RemoveTheme( const OUString& rThemeName ) { .... INetURLObject aThmURL( pThm->GetThmURL() ); INetURLObject aSdgURL( pThm->GetSdgURL() ); INetURLObject aSdvURL( pThm->GetSdvURL() ); INetURLObject aStrURL( pThm->GetSdvURL() );
ãæ°ã¥ããããããŸãããã埮åŠãªè€å颿°åã¯äŸç¶ãšããŠãšã©ãŒã®åå ã§ãã
å€ãã³ãŒãããã®å¥ã®è峿·±ãäŸïŒ
V656倿°ãnDragWãããnDragHãã¯ãåã颿°ã®åŒã³åºãã«ãã£ãŠåæåãããŸãã ãããããšã©ãŒãŸãã¯æé©åãããŠããªãã³ãŒãã§ãã ãrMSettings.GetStartDragWidthïŒïŒãåŒã調ã¹ãããšãæ€èšããŠãã ããã è¡ã確èªããŠãã ããïŒ471ã472ãwinproc.cxx 472
class VCL_DLLPUBLIC MouseSettings { .... long GetStartDragWidth() const; long GetStartDragHeight() const; .... } bool ImplHandleMouseEvent( .... ) { .... long nDragW = rMSettings.GetStartDragWidth(); long nDragH = rMSettings.GetStartDragWidth(); .... }
ãã®ã³ãŒãã«ã¯ãå®éã«ã¯ä¿®æ£ããããã°ãå«ãŸããŠããŸããã ããããã³ãŒãã®ãšã©ãŒã¯å°ãããªã£ãŠããŸãã...åæ§ã®ç¶æ³ãç¹å®ãããŸããã
V656倿°ãdefaultZoomXãããdefaultZoomYãã¯ãåã颿°ã®åŒã³åºãã«ãã£ãŠåæåãããŸãã ãããããšã©ãŒãŸãã¯æé©åãããŠããªãã³ãŒãã§ãã ãpViewData-> GetZoomXïŒïŒãåŒã®æ€æ»ãæ€èšããŠãã ããã è¡ã確èªããŠãã ããïŒ5673ã5744ãgridwin.cxx 5674
OString ScGridWindow::getCellCursor(....) const { .... SCCOL nX = pViewData->GetCurX(); SCROW nY = pViewData->GetCurY(); Fraction defaultZoomX = pViewData->GetZoomX(); Fraction defaultZoomY = pViewData->GetZoomX();
ãšã©ãŒã¯é¡æšã«ãã£ãŠæåéãã³ãŒãã«å°å
¥ãããŸãã
ã ãŸãããŠã¯ãããŸãã
V765è€å代å
¥åŒãx-= x
-... ãã¯çãããã§ãã ãšã©ãŒã®å¯èœæ§ã調ã¹ãããšãæ€èšããŠãã ããã swdtflvr.cxx 3509
bool SwTransferable::PrivateDrop(...) { .... if ( rSrcSh.IsSelFrameMode() ) {
V765蚺æã䜿çšããŠçºèŠããããã®ãããªè峿·±ããããã¯ãã¯æ¬¡ã®
ãšããã§ãã ã³ã¡ã³ãã䜿çšããŠã³ãŒãè¡ãåçŽåãããšãäºæããªãçµæãçããå¯èœæ§ããããŸãã
æåã®ã¹ãããïŒ
aSttPt = aSttPt - (aSttPt - rSrcSh.GetObjRect().Pos());
第2ã¹ãããïŒ
aSttPt = aSttPt - aSttPt + rSrcSh.GetObjRect().Pos();
ç¬¬äžæ®µé
aSttPt = rSrcSh.GetObjRect().Pos();
ãããŠãããã¯ãšã¯äœã§ããïŒ
ãã®ãããã¯ã®å¥ã®äŸïŒ
V567 ãnCountã倿°ã®å€æŽã¯ãåã倿°ã«å¯Ÿããå¥ã®æäœã«å¯ŸããŠé åºä»ããããŠããŸããã ããã«ãããæªå®çŸ©ã®åäœãçºçããå ŽåããããŸãã stgio.cxx 214
FatError EasyFat::Mark(....) { if( nCount > 0 ) { --nCount /= GetPageSize(); nCount++; } .... }
ãã®ãããªç¶æ³ã§ã®ã³ãŒãã®å®è¡ã¯ãã³ã³ãã€ã©ãšèšèªæšæºã«äŸåããå ŽåããããŸãã ãã®ã³ãŒãã¹ããããããããã·ã³ãã«ã§æç¢ºã§ä¿¡é Œæ§ã®é«ãæ¹æ³ã§æžãæããŠã¿ãŸãããïŒ
é
åãšãã¯ãã«ã䜿çšããªãæ¹æ³
äœããã®çç±ã§ãé
åãšãã¯ã¿ãŒãæäœãããšãã«èª°ããåæ§ã®ãšã©ãŒãããããç¯ããŸããã ãããã®äŸãèŠãŠã¿ãŸãããã
V557é
åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ãnPageNumãã€ã³ããã¯ã¹ã¯ãé
åã®å¢çãè¶
ããŠããŸãã pptx-epptooxml.cxx 1168
void PowerPointExport::ImplWriteNotes(sal_uInt32 nPageNum) { ....
æåŸã®æå¹ãªã€ã³ããã¯ã¹ã¯ã
sizeïŒïŒ-1ã«çããå€ã§ãªããã°ãªããŸããã ãã ãããã®ã³ãŒããã©ã°ã¡ã³ãã§ã¯ã
nPageNumã€ã³ããã¯ã¹ãå€
mpSlidesFSArray.sizeïŒïŒãæã€ããšãã§ããç¶æ³ãèš±å¯ãããŸãããããã¯ãç¯å²å€ã®é
åãããããã¬ããŒãžãã§æ§æãããèŠçŽ ãåŠçããããã§ãã
V557é
åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ãmnSelectedMenuãã€ã³ããã¯ã¹ã¯é
åã®å¢çãè¶
ããŠããŸãã checklistmenu.cxx 826
void ScMenuFloatingWindow::ensureSubMenuNotVisible() { if (mnSelectedMenu <= maMenuItems.size() && maMenuItems[mnSelectedMenu].mpSubMenuWin && maMenuItems[mnSelectedMenu].mpSubMenuWin->IsVisible()) { maMenuItems[mnSelectedMenu].mpSubMenuWin->ensureSubMenuNotVisible(); } EndPopupMode(); }
è峿·±ãããšã«ããã®ã³ãŒããã©ã°ã¡ã³ãã§ã¯ãã€ã³ããã¯ã¹ãã§ãã¯ãããæç¢ºã«èšè¿°ããŸããããåæã«åãééããç¯ããŸããã
V557é
åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ãnXFIndexãã€ã³ããã¯ã¹ã¯ãé
åã®å¢çãè¶
ããŠããŸãã xestyle.cxx 2613
sal_Int32 XclExpXFBuffer::GetXmlStyleIndex( sal_uInt32 nXFIndex ) const { OSL_ENSURE( nXFIndex < maStyleIndexes.size(), "...." ); if( nXFIndex > maStyleIndexes.size() ) return 0;
ãããŠããã®ééãã¯äºéã«è峿·±ãã§ãïŒ ãããã°ãã¯ãã§ã¯ãæ£ããã€ã³ããã¯ã¹ãã§ãã¯ãäœæããå¥ã®å Žæã§åã³ãã¹ãç¯ããé
åã®å€ã«åºãããšãèš±å¯ããŸããã
次ã«ãã€ã³ããã¯ã¹ã«é¢é£ããªãå¥ã®çš®é¡ã®ãšã©ãŒã«ã€ããŠèããŠã¿ãŸãããã
V554 shared_ptrã®èª€ã£ã䜿çšã ãnew []ãã§å²ãåœãŠãããã¡ã¢ãªã¯ããdeleteãã䜿çšããŠæ¶å»ãããŸãã dx_vcltools.cxx 158
struct RawRGBABitmap { sal_Int32 mnWidth; sal_Int32 mnHeight; std::shared_ptr< sal_uInt8 > mpBitmapData; }; RawRGBABitmap bitmapFromVCLBitmapEx( const ::BitmapEx& rBmpEx ) { ....
ãã®ã³ãŒãã«ã¯ãæªå®çŸ©ã®ããã°ã©ã ã®åäœã«ã€ãªãããšã©ãŒãå«ãŸããŠããŸãã å®éã«ã¯ãã¡ã¢ãªã¯ããŸããŸãªæ¹æ³ã§å²ãåœãŠãããè§£æŸãããŸãã ã¡ã¢ãªãé©åã«è§£æŸããã«ã¯ã次ã®ãããªã¯ã©ã¹ãã£ãŒã«ãã宣èšããå¿
èŠããããŸããã
std::shared_ptr< sal_uInt8[] > mpBitmapData;
ãã¯ãã2åäœæããæ¹æ³
V568 sizeofïŒïŒæŒç®åã®åŒæ°ã 'bTextFrameïŒ aPropsïŒaShapePropsã®åŒã wpscontext.cxx 134
oox::core::ContextHandlerRef WpsContext::onCreateContext(....) { .... OUString aProps[] = { .... }; OUString aShapeProps[] = { .... }; for (std::size_t i = 0; i < SAL_N_ELEMENTS(bTextFrame ? aProps : aShapeProps);
å€ãã®éçºè
ã«ãšã£ãŠæ®å¿µãªããšã«ããã¯ãåŒæ°ã¯é¢æ°åŒæ°ã®ããã«ã¯åäœããŸããã ãã®äºå®ãç¡èŠãããšãå€ãã®å Žåãšã©ãŒãçºçããŸãã ã±ãŒã¹ïŒ1ãšïŒ2ã§ã¯ãäžé
æŒç®åã䜿çšããŠã»ãŒåãæ§é ã䜿çšãããŸãã ããããæåã®å Žå-ãã¯ãã2çªç®ã®å Žå-颿°ã ãã ããããã¯åé¡ã®ãããã«ãããŸããã
ã±ãŒã¹1ã§ã¯ãã¢ãã©ã€ã¶ãŒã¯å®éã«æ¬¡ã®ãšã©ãŒã³ãŒããæ€åºããŸããã
for (std::size_t i = 0; i < (sizeof (bTextFrame ? aProps : aShapeProps) / sizeof ((bTextFrame ? aProps : aShapeProps)[0])); ++i)
ããã¯ã
SAL_N_ELEMENTSãã¯ãã䜿çšããã«ãŒãã§ãã
sizeofæŒç®åã¯ãäžé
æŒç®åã®åŒãè©äŸ¡ããŸããã ãã®å Žåãç®è¡ã¯ãã€ã³ã¿ãŒã®ãµã€ãºã䜿çšããŠå®è¡ãããŸãããã®çµæã¯ã瀺ãããé
åã®å®éã®ãµã€ãºããããé¢ããå€ã«ãªããŸãã 誀ã£ãå€ã®èšç®ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãããæ·±åºŠã«ãã£ãŠããã«åœ±é¿ãåããŸãã
ãããããã®åŸ2ã€ã®
SAL_N_ELEMENTSãã¯ããããããšã倿ããŸããïŒ ã€ãŸã ããªããã»ããµãééã£ããã¯ããéããã®ã§ãããããã¯ã©ã®ããã«èµ·ãããŸããïŒ ãã¯ãå®çŸ©ãšéçºè
ã®ã³ââã¡ã³ãã¯ç§ãã¡ãå©ããŸãïŒ
#ifndef SAL_N_ELEMENTS # if defined(__cplusplus) && ( defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L ) template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S]; # define SAL_N_ELEMENTS(arr) (sizeof(sal_n_array_size(arr))) # else # define SAL_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) # endif #endif
ãã¯ãã®å¥ã®ããŒãžã§ã³ã«ã¯å®å
šãªãã³ãã¬ãŒã颿°ãå«ãŸããŠããŸãããäœãåé¡ããããŸããã
- å®å
šãªãã¯ãã¯ã³ãŒãã«å«ãŸããŠããŸããã
- å¥ã®ãã¯ãã䜿çšããããšã¯ãŸã äžå¯èœã§ãã ãã³ãã¬ãŒã颿°ã®æ£åžžãªã€ã³ã¹ã¿ã³ã¹åã¯ãåããµã€ãºã®é
åãäžé
æŒç®åã«æž¡ãããå Žåã«ã®ã¿å®è¡ãããŸãã ãããŠãã®å Žåããã®ãããªãã¯ãã®äœ¿çšã¯ãã®æå³ã倱ããŸãã
å
¥åãã¹ãšã³ããŒã¢ã³ãããŒã¹ã
V1013çãããéšååŒf1.Pitch == f2.CharSetåæ§ã®æ¯èŒã®ã·ãŒã±ã³ã¹ã xmldlg_export.cxx 1251
inline bool equalFont( Style const & style1, Style const & style2 ) { awt::FontDescriptor const & f1 = style1._descr; awt::FontDescriptor const & f2 = style2._descr; return ( f1.Name == f2.Name && f1.Height == f2.Height && f1.Width == f2.Width && f1.StyleName == f2.StyleName && f1.Family == f2.Family && f1.CharSet == f2.CharSet &&
ãã®ãšã©ãŒã¯ãã
æªãæ¯èŒæ©èœã«äœãã§ãã ããšããèšäºãæŽæ°ãŸãã¯æ¡åŒµããããšã«æ±ºããå Žåã«ãæŽæ°ãã䟡å€ã®ããåè£ã§ãã ãã®ãããªãšã©ãŒïŒãã¹
f2.Pitch ïŒãèŠã€ããå¯èœæ§ã¯ãããèªäœã§ã¯éåžžã«å°ãããšæããŸãã ã©ãæããŸããïŒ
V501 ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãmpTable [ocArrayColSep]ïŒ= MpTable [eOp]ãããããŸãã formulacompiler.cxx 632
void FormulaCompiler::OpCodeMap::putOpCode(....) { .... case ocSep: bPutOp = true; bRemoveFromMap = (mpTable[eOp] != ";" && mpTable[ocArrayColSep] != mpTable[eOp] && mpTable[ocArrayColSep] != mpTable[eOp]); break; .... }
軜çãªã³ããŒã®çµæã¯ããã®ãããªã³ãŒãã§ããã ãããããæ¡ä»¶åŒã¯ããäžåºŠåçŽã«è€è£œãããŸãããããã§ãã³ãŒãã«ã¯ãã®ãããªãããŸããã®å Žæã¯ãããŸããã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŸãïŒ781ã783ãmysqlc_databasemetadata.cxx 781
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(....) { .... bool bIsCharMax = !xRow->wasNull(); if (sDataType.equalsIgnoreAsciiCase("year")) nColumnSize = sColumnType.copy(6, 1).toInt32(); else if (sDataType.equalsIgnoreAsciiCase("date"))
æ¡ä»¶åŒãã³ããŒããçµæãã³ãŒãã§ãšã©ãŒãçºçããŸããããã®ããã倿°
nColumnSizeã®å€
8ã¯èšå®ãããŸããã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã svdpdf.hxx 146
ããã§ã颿°
minïŒïŒãš
maxïŒïŒã¯æ··åãããŠããŸãã 確ãã«ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã®ã¿ã€ããã¹ã®ããã«ãäœããå¥åŠã«ã¹ã±ãŒãªã³ã°ãããŸãã
å¥åŠãªãµã€ã¯ã«
V533 ãforãæŒç®åå
ã§èª€ã£ã倿°ãã€ã³ã¯ãªã¡ã³ããããŠããå¯èœæ§ããããŸãã ãiãã®æ€èšãæ€èšããŠãã ããã javatypemaker.cxx 602
void printConstructors(....) { .... for (std::vector< unoidl::SingleInterfaceBasedServiceEntity::Constructor:: Parameter >::const_iterator j(i->parameters.begin()); j != i->parameters.end(); ++i) { o << ", "; printType(o, options, manager, j->type, false); if (j->rest) { o << "..."; } o << ' ' << codemaker::java::translateUnoToJavaIdentifier( u2b(j->name), "param"); } .... }
ã«ãŒãå
ã®åŒ
++ iã¯éåžžã«çãããèŠããŸãã ãã¶ã
++ jãããã¯ãã§ãã
V756 ãnIndex2ãã«ãŠã³ã¿ãŒã¯ããã¹ããããã«ãŒãå
ã§ã¯äœ¿çšãããŸããã ãnIndexãã«ãŠã³ã¿ãŒã®äœ¿çšãæ€æ»ããããšãæ€èšããŠãã ããã treex.cxx 34
SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) { OString sXHPRoot; for (int nIndex = 1; nIndex != argc; ++nIndex) { if (std::strcmp(argv[nIndex], "-r") == 0) { sXHPRoot = OString( argv[nIndex + 1] ); for( int nIndex2 = nIndex+3; nIndex2 < argc; nIndex2 = nIndex2 + 2 ) { argv[nIndex-3] = argv[nIndex-1]; argv[nIndex-2] = argv[nIndex]; } argc = argc - 2; break; } } common::HandledArgs aArgs; if( !common::handleArguments(argc, argv, aArgs) ) { WriteUsage(); return 1; } .... }
å
åŽã® forã«ãŒãã«äœããã®ãšã©ãŒããããŸãã ãªããªã
nIndex倿°
ã¯å€æŽããããé
åã®åã2ã€ã®èŠçŽ ãåå埩ã§äžæžããããŸãã ã»ãšãã©ã®å Žåã
nIndexã®ä»£ããã«ã倿°
nIndex2ã
ã©ãã§ã䜿çšãããŠããã¯ãã§ãã
V1008 ãforãæŒç®åã®æ€æ»ãæ€èšããŠãã ããã ã«ãŒãã®å埩ã¯1åããå®è¡ãããŸããã diagramhelper.cxx 292
void DiagramHelper::setStackMode( const Reference< XDiagram > & xDiagram, StackMode eStackMode ) { .... sal_Int32 nMax = aChartTypeList.getLength(); if( nMax >= 1 ) nMax = 1; for( sal_Int32 nT = 0; nT < nMax; ++nT ) { uno::Reference< XChartType > xChartType( aChartTypeList[nT] ); .... } .... }
forã«ãŒãã¯ãæå³çã«1åã®å埩ã«å¶éãããŠããŸãã ããããªããã®ããã«è¡ãããã®ãã¯æããã§ã¯ãããŸããã
V612ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ãæ»ããã pormulti.cxx 891
SwTextAttr const* MergedAttrIterMulti::NextAttr(....) { .... SwpHints const*const pHints(m_pNode->GetpSwpHints()); if (pHints) { while (m_CurrentHint < pHints->Count()) { SwTextAttr const*const pHint(pHints->Get(m_CurrentHint)); ++m_CurrentHint; rpNode = m_pNode; return pHint; } } return nullptr; .... }
1ã€ã®å埩ããã®ããåçŽãªã¹ãã¬ã³ãžã«ãŒãã®äŸãæ¡ä»¶ä»ãã¹ããŒãã¡ã³ãã«æžãçŽãæ¹ãé©åã§ãã
ããã«ããã€ãã®ãã®ãããªå ŽæïŒ
- V612ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ãæ»ããã txtfrm.cxx 144
- V612ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ãæ»ããã txtfrm.cxx 202
- V612ã«ãŒãå
ã®ç¡æ¡ä»¶ã®ãæ»ããã txtfrm.cxx 279
å¥åŠãªæ¡ä»¶
V637å察ã®2ã€ã®æ¡ä»¶ãçºçããŸããã 2çªç®ã®æ¡ä»¶ã¯åžžã«falseã§ãã è¡ã確èªïŒ281ã285ãauthfld.cxx 281
sal_uInt16 SwAuthorityFieldType::GetSequencePos(sal_IntPtr nHandle) { .... SwTOXSortTabBase* pOld = aSortArr[i].get(); if(*pOld == *pNew) {
ã¢ãã©ã€ã¶ãŒã¯ç«¶åããæ¯èŒãèŠã€ããŸããã ãã®ã³ãŒãã«ã¯äœãæããã«åé¡ããããŸãã
åãå Žæã«ãã®ã³ãŒãããããŸãïŒ
- V637å察ã®2ã€ã®æ¡ä»¶ãçºçããŸããã 2çªç®ã®æ¡ä»¶ã¯åžžã«falseã§ãã è¡ã確èªããŠãã ããïŒ1827ã1829ãdoctxm.cxx 1827
V590ãã®è¡šçŸã
調ã¹ãããšãæ€èšããŠãã ããã 衚çŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã fileurl.cxx 55
OUString convertToFileUrl(char const * filename, ....) { .... if ((filename[0] == '.') || (filename[0] != SEPARATOR)) { .... } .... }
äžèšã®ã³ãŒããã©ã°ã¡ã³ãã®åé¡ã¯ãæåã®æ¡ä»¶åŒãåŒå
šäœã®çµæã«åœ±é¿ãäžããªãããšã§ãã
ãã®ãããªãšã©ãŒã«åºã¥ããŠãçè«çãªèšäºã§ããã
C / C ++ã®è«çåŒãå°éå®¶ã¯ã©ã®ããã«ééã£ãŠãããããŸã§
æžããŸãã ã
V590ãã®è¡šçŸã
調ã¹ãããšãæ€èšããŠãã ããã 衚çŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã unoobj.cxx 1895
uno::Sequence< beans::PropertyState > SwUnoCursorHelper::GetPropertyStates(....) { .... if (((SW_PROPERTY_STATE_CALLER_SWX_TEXT_PORTION == eCaller) || (SW_PROPERTY_STATE_CALLER_SWX_TEXT_PORTION_TOLERANT == eCaller)) && pEntry->nWID < FN_UNO_RANGE_BEGIN && pEntry->nWID > FN_UNO_RANGE_END && pEntry->nWID < RES_CHRATR_BEGIN && pEntry->nWID > RES_TXTATR_END ) { pStates[i] = beans::PropertyState_DEFAULT_VALUE; } .... }
ãã®ç¶æ
ã®åé¡ãäœã§ãããããã«ã¯ããããŸããããããã£ãŠãååŠçããããã¡ã€ã«ãã詳现ãªã³ãŒããã©ã°ã¡ã³ããæžãåºãããŸããã
if (((SW_PROPERTY_STATE_CALLER_SWX_TEXT_PORTION == eCaller) || (SW_PROPERTY_STATE_CALLER_SWX_TEXT_PORTION_TOLERANT == eCaller)) && pEntry->nWID < (20000 + 1600) && pEntry->nWID > ((20000 + 2400) + 199) && pEntry->nWID < 1 && pEntry->nWID > 63 ) { pStates[i] = beans::PropertyState_DEFAULT_VALUE; }
æ¡ä»¶ã«ãã£ãŠçªå·ã§æå®ããã4ã€ã®ç¯å²ã«åæã«å«ãŸããæ°å€ã¯1ã€ã§ã¯ãªãããšã倿ããŸããã éçºè
ã¯ééããç¯ããŸããã
V590 ã* pData <= MAXLEVEL && * pData <= 9ãåŒã®æ€æ»ãæ€èšããŠãã ããã 衚çŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã ww8par2.cxx 756
const sal_uInt8 MAXLEVEL = 10; void SwWW8ImplReader::Read_ANLevelNo(....) { ....
æåã®æ¡ä»¶ã¯å€
10ã®å®æ°ã䜿çšãããšããäºå®ã«ãããæ¡ä»¶ã¯åé·ã§ããããšã倿ããŸããã ãã®ã³ãŒãã¯æ¬¡ã®ããã«æžãæããããšãã§ããŸãã
if (*pData <= 9) { .... } else if( *pData == 10 || *pData == 11 ) { .... }
ããããããããæç€ºãããã³ãŒãã«å¥ã®åé¡ããã£ãã
V757 ãdynamic_castãã䜿çšããå倿åŸã誀ã£ã倿°ãnullptrãšæ¯èŒãããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ2709ã2710ãmenu.cxx 2709
void PopupMenu::ClosePopup(Menu* pMenu) { MenuFloatingWindow* p = dynamic_cast<MenuFloatingWindow*>(ImplGetWindow()); PopupMenu *pPopup = dynamic_cast<PopupMenu*>(pMenu); if (p && pMenu) p->KillActivePopup(pPopup); }
ã»ãšãã©ã®å Žåãæ¡ä»¶ã«ãšã©ãŒãå«ãŸããŠããŸãã ãã€ã³ã¿ãŒ
pããã³
pPopupã確èªããå¿
èŠããã
ãŸãã ã
V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããm_pStreamããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã zipfile.cxx 408
ZipFile::ZipFile(const std::wstring &FileName) : m_pStream(nullptr), m_bShouldFree(true) { m_pStream = new FileStream(FileName.c_str()); if (m_pStream && !isZipStream(m_pStream)) { delete m_pStream; m_pStream = nullptr; } }
ã¢ãã©ã€ã¶ãŒã¯ã
newãªãã¬ãŒã¿ãŒã«ãã£ãŠè¿ããããã€ã³ã¿ãŒã®å€ããŒããšæ¯èŒãããç¶æ³ãæ€åºããŸããã C ++èšèªæšæºã«ããã°ãã¡ã¢ãªå²ãåœãŠãäžå¯èœãªå Žåã
newæŒç®åã¯äŸå€
std :: bad_allocãã¹ããŒããŸãã LibreOfficeãããžã§ã¯ãã§ã¯ããã®ãããªå Žæã45åããèŠã€ãããŸããã§ãããããã¯ããã®ãããªå€§éã®ã³ãŒãã«å¯ŸããŠã¯éåžžã«å°ãããã®ã§ãã ããã§ããããã¯ãŠãŒã¶ãŒã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã éçºè
ã¯ãæ¬¡ã®æ¹æ³ã§äžèŠãªãã§ãã¯ãåé€ãããããªããžã§ã¯ããäœæããå¿
èŠããããŸãã
m_pStream = new (std::nothrow) FileStream(FileName.c_str());
V728éå°ãªãã§ãã¯ãç°¡çŽ åã§ããŸãã 'ïŒA &&ïŒBïŒ|| ïŒïŒA && BïŒ 'åŒã¯ã' boolïŒAïŒïŒ= BoolïŒBïŒ 'åŒãšåçã§ãã toolbox2.cxx 1042
void ToolBox::SetItemImageMirrorMode( sal_uInt16 nItemId, bool bMirror ) { ImplToolItems::size_type nPos = GetItemPos( nItemId ); if ( nPos != ITEM_NOTFOUND ) { ImplToolItem* pItem = &mpData->m_aItems[nPos]; if ((pItem->mbMirrorMode && !bMirror) ||
ããªãåã«ã
V728蚺æã¯ã
ãããããšã©ãŒã§ã¯ãªãããã³ãŒããè€éã«ããã±ãŒã¹ã«æ¡åŒµãããŸããã ãŸããè€éãªã³ãŒãã§ã¯ãé
ããæ©ãããšã©ãŒãçºçããŸãã
ãã®ç¶æ
ã¯æ¬¡ã®ããã«ç°¡ç¥åãããŠããŸã
if (pItem->mbMirrorMode != bMirror) { .... }
ãããžã§ã¯ãã«ã¯çŽ60ã®åæ§ã®æ§é ãããããã®äžéšã¯éåžžã«ããã°ã£ãŠããŸãã ãããžã§ã¯ãã®äœæè
ã¯ãPVS-Studioã¢ãã©ã€ã¶ãŒã®å®å
šãªã¬ããŒãã«ç²ŸéããŠããŸãã
ã»ãã¥ãªãã£ã®åé¡
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã docxattributeoutput.cxx 1571
void DocxAttributeOutput::DoWritePermissionTagEnd( const OUString & permission) { OUString permissionIdAndName; if (permission.startsWith("permission-for-group:", &permissionIdAndName)) { const sal_Int32 sparatorIndex = permissionIdAndName.indexOf(':'); const OUString permissionId = permissionIdAndName.copy(....); const OString rId = OUStringToOString(....).getStr(); m_pSerializer->singleElementNS(XML_w, XML_permEnd, FSNS(XML_w, XML_id), rId.getStr(), FSEND); } else { const sal_Int32 sparatorIndex = permissionIdAndName.indexOf(':'); const OUString permissionId = permissionIdAndName.copy(....); const OString rId = OUStringToOString(....).getStr(); m_pSerializer->singleElementNS(XML_w, XML_permEnd, FSNS(XML_w, XML_id), rId.getStr(), FSEND); } }
éåžžã«å€§ããªã³ãŒããããã«ã³ããŒãããŸãã ç¹å®ã®æš©éã倿Žããæ©èœã®å Žåãç¹å®ãããåé¡ã¯éåžžã«çãããèŠããŸãã
V1001 ãDLã倿°ãå²ãåœãŠãããŠããŸããã颿°ã®çµãããŸã§äœ¿çšãããŠããŸããã cipher.cxx 811
static void BF_updateECB( CipherContextBF *ctx, rtlCipherDirection direction, const sal_uInt8 *pData, sal_uInt8 *pBuffer, sal_Size nLength) { CipherKeyBF *key; sal_uInt32 DL, DR; key = &(ctx->m_key); if (direction == rtl_Cipher_DirectionEncode) { RTL_CIPHER_NTOHL64(pData, DL, DR, nLength); BF_encode(key, &DL, &DR); RTL_CIPHER_HTONL(DL, pBuffer); RTL_CIPHER_HTONL(DR, pBuffer); } else { RTL_CIPHER_NTOHL(pData, DL); RTL_CIPHER_NTOHL(pData, DR); BF_decode(key, &DL, &DR); RTL_CIPHER_HTONL64(DL, DR, pBuffer, nLength); } DL = DR = 0; }
DL倿°ãš
DR倿°ã¯ã颿°ã®æåŸã®åçŽãªå²ãåœãŠã«ãã£ãŠç¡å¹åããã䜿çšãããªããªããŸããã ã³ã³ãã€ã©ã«ãšã£ãŠãããã¯æé©åã®ããã«ã³ãã³ããåé€ããèšãèš³ã§ãã
Windowsã¢ããªã±ãŒã·ã§ã³ã®å€æ°ãé©åã«æ¶å»ããã«ã¯ãæ¬¡ã®æ¹æ³ã§ã³ãŒããæžãçŽãããšãã§ããŸãã
RtlSecureZeroMemory(&DL, sizeof(DL)); RtlSecureZeroMemory(&DR, sizeof(DR));
ãã ããLibreOfficeã®å Žåã¯ãããã§ã¯ãã¹ãã©ãããã©ãŒã ãœãªã¥ãŒã·ã§ã³ãå¿
èŠã§ãã
å¥ã®æ©èœããã®åæ§ã®èŠåïŒ
- V1001ãDLã倿°ãå²ãåœãŠãããŠããŸããã颿°ã®çµãããŸã§äœ¿çšãããŠããŸããã cipher.cxx 860
V764 ãqueryStreamã颿°ã«æž¡ãããåŒæ°ã®èª€ã£ãé åºã®å¯èœæ§ïŒãrUriãããã³ãrPasswordãã tdoc_storage.cxx 271
css::uno::Reference< css::io::XStream > queryStream( const css::uno::Reference< css::embed::XStorage > & xParentStorage, const OUString & rPassword, const OUString & rUri, StorageAccessMode eMode, bool bTruncate ); uno::Reference< io::XOutputStream > StorageElementFactory::createOutputStream( const OUString & rUri, const OUString & rPassword, bool bTruncate ) { .... uno::Reference< io::XStream > xStream = queryStream( xParentStorage, rUri, rPassword, READ_WRITE_CREATE, bTruncate ); .... }
queryStream颿°ã®ãã©ã¡ãŒã¿ãŒãªã¹ãã§ã¯ãæåã«
rPassword ãæ¬¡ã«
rUriã«æ³šæããŠãã ããã ãã®é¢æ°ãåŒã³åºããããšãã«ã察å¿ããåŒæ°ãæ··åãããå Žæãã³ãŒãã«ãããŸããã
V794代å
¥æŒç®åã¯ããthis ==ïŒrToBeCopiedãã®ã±ãŒã¹ããä¿è·ããå¿
èŠããããŸãã hommatrixtemplate.hxx 121
ImplHomMatrixTemplate& operator=(....) {
ãã®ã±ãŒã¹ã¯ãå®å
šãªã³ãŒãèšè¿°ã«é¢ãããã®ã§ãã copyã¹ããŒãã¡ã³ãã«ã¯ããªããžã§ã¯ããèªåèªèº«ã«å²ãåœãŠãããã®ãã§ãã¯ã¯ãããŸããã åèšã§ããããžã§ã¯ãã«ã¯çŽ30ã®ãã®ãããªã³ããŒæŒç®åã®å®è£
ããããŸãã
SysAllocStringã®ãšã©ãŒ
V649åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯é¢æ°ã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãã ãã§ãã¯è¡ïŒ125ã137ãacctable.cxx 137
STDMETHODIMP CAccTable::get_columnDescription(long column, BSTR * description) { SolarMutexGuard g; ENTER_PROTECTED_BLOCK
SysAllocStringïŒïŒé¢æ°ã¯ã
NULLã®å¯èœæ§ããããã€ã³ã¿ãŒãè¿ã
ãŸã ã å¥åŠãªäœãããã®ã³ãŒãã®äœè
ã«ãã£ãŠæžãããŸããã å²ãåœãŠãããã¡ã¢ãªãžã®ãã€ã³ã¿ã¯ãã§ãã¯ãããªããããããã°ã©ã ã§åé¡ãçºçããå¯èœæ§ããããŸãã
ä»ã®æ©èœããã®åæ§ã®èŠåïŒ
- V649åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯é¢æ°ã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãã è¡ã確èªããŠãã ããïŒ344ã356ãacctable.cxx 356
- V649åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯é¢æ°ã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãã è¡ã確èªïŒ213ã219ãtrvlfrm.cxx 219
V530颿° 'SysAllocString'ã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã maccessible.cxx 1077
STDMETHODIMP CMAccessible::put_accValue(....) { .... if(varChild.lVal==CHILDID_SELF) { SysAllocString(m_pszValue); m_pszValue=SysAllocString(szValue); return S_OK; } .... }
SysAllocStringïŒïŒé¢æ°ã®åŒã³åºãã®1ã€ã®çµæã¯äœ¿çšãããŸããã éçºè
ã¯ãã®ã³ãŒãã«æ³šæãæãå¿
èŠããããŸãã
ãã®ä»
V716 returnã¹ããŒãã¡ã³ãã§ã®çãããå倿ïŒHRESULTãè¿ããŸãããã颿°ã¯å®éã«ã¯BOOLãè¿ããŸãã maccessible.cxx 2649
BOOL CMAccessible::get_IAccessibleFromXAccessible(....) { ENTER_PROTECTED_BLOCK
颿°ã®å®è¡ã®åå²ã®1ã€ã¯ã颿°ã®æ»ãå€ã®åãšäžèŽããªãåã®å€ãè¿ããŸãã
HRESULTåã¯ãBOOLåãããè€éãªåœ¢åŒã§ãããæäœã¹ããŒã¿ã¹ãæ ŒçŽããããã«èšèšãããŠããŸããããšãã°ãE_INVALIDARGã®å€ã¯0x80070057Lã§ããããšãã°ã次ã®ããã«æžãã®ãæ£ããã§ãããã return FAILED(E_INVALIDARG);
詳现ã«ã€ããŠã¯ãV716蚺æè³æãã芧ãã ããã䌌ããããªå ŽæïŒ- V716 returnã¹ããŒãã¡ã³ãã§ã®çãããå倿ïŒHRESULTãè¿ããŸãããã颿°ã¯å®éã«ã¯BOOLãè¿ããŸããinprocembobj.cxx 1299
- V716 returnã¹ããŒãã¡ã³ãã§ã®çãããå倿ïŒHRESULTãè¿ããŸãããã颿°ã¯å®éã«ã¯BOOLãè¿ããŸããmaccessible.cxx 2660
V670åæåãããŠããªãã¯ã©ã¹ã¡ã³ããŒãm_aMutexãã¯ããm_aModifyListenersãã¡ã³ããŒãåæåããããã«äœ¿çšãããŸããã¡ã³ããŒã¯ãã¯ã©ã¹å
ã®å®£èšã®é åºã§åæåãããããšã«æ³šæããŠãã ãããfmgridif.cxx 1033 FmXGridPeer::FmXGridPeer(const Reference< XComponentContext >& _rxContext) :m_aModifyListeners(m_aMutex) ,m_aUpdateListeners(m_aMutex) ,m_aContainerListeners(m_aMutex) ,m_aSelectionListeners(m_aMutex) ,m_aGridControlListeners(m_aMutex) ,m_aMode( getDataModeIdentifier() ) ,m_nCursorListening(0) ,m_bInterceptingDispatch(false) ,m_xContext(_rxContext) {
èšèªæšæºã«ããã°ãã³ã³ã¹ãã©ã¯ã¿ãŒã§ã®ã¯ã©ã¹ã¡ã³ããŒã®åæåã®é åºã¯ãã¯ã©ã¹ã§ã®å®£èšã®é åºã§çºçããŸãããã®å Žåãã¯ã©ã¹ã®ä»ã®5ã€ã®ãã£ãŒã«ãã®åæåã«åå ããåŸãm_aMutexãã£ãŒã«ããåæåãããŸããã¯ã©ã¹ãã£ãŒã«ãã®1ã€ã®ã³ã³ã¹ãã©ã¯ã¿ã¯æ¬¡ã®ããã«ãªããŸãã OInterfaceContainerHelper2( ::osl::Mutex & rMutex );
çžäºæä»ãªããžã§ã¯ãã¯åç
§æž¡ããããŸãããã®å ŽåãããŸããŸãªåé¡ãçºçããå¯èœæ§ããããŸããåæåãããŠããªãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ããããã®åŸã®ãªããžã§ã¯ã倿Žã®æå€±ãŸã§ãV763ãã©ã¡ãŒã¿ãŒ 'nNativeNumberMode'ã¯ã䜿çšãããåã«åžžã«é¢æ°æ¬äœã§æžãæããããŸããcalendar_jewish.cxx 286 OUString SAL_CALL Calendar_jewish::getDisplayString(...., sal_Int16 nNativeNumberMode ) {
颿°ã®åŒæ°ã¯ããŸããŸãªçç±ã§äžæžããããŸãïŒã³ã³ãã€ã©ã®èŠåãšã®æŠããåŸæ¹äºææ§ãæŸèæãªã©ããã ãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ã©ããè¯ããªããã³ãŒãã¯ãããã«ããããã«èŠããŸãããã®å Žæã®ã³ãŒããšä»ã®é¡äŒŒã®ã³ãŒãã確èªããå¿
èŠããããŸãã- V763ãã©ã¡ãŒã¿ãŒ 'bExtendedInfo'ã¯ã䜿çšãããåã«åžžã«é¢æ°æ¬äœã§æžãæããããŸããgraphicfilter2.cxx 442
- V763ãã©ã¡ãŒã¿ãŒ 'nVerbID'ã¯ã䜿çšãããåã«åžžã«é¢æ°æ¬äœã§æžãæããããŸããoleembed.cxx 841
- V763 Parameter 'pCursor' is always rewritten in function body before being used. edlingu.cxx 843
- V763 Parameter 'pOutput' is always rewritten in function body before being used. vnew.cxx 181
- V763 Parameter 'pOutput' is always rewritten in function body before being used. vnew.cxx 256
ãããã«
LibreOfficeã³ãŒãã確èªããããšããæãã¯ã補åãå人çã«äœ¿çšããåŸã«çŸããŸãããäœããã®çç±ã§ãã©ã³ãã ã«èµ·åãããšããã¹ãŠã®ã¡ãã¥ãŒé
ç®ããããã¹ããæ¶ããŸããã¢ã€ã³ã³ãšå調ãªã¹ãã©ã€ãã®ã¿ãæ®ããŸãããšã©ãŒã¯é«ã¬ãã«ã§ããå¯èœæ§ãé«ãããããããéçåæããŒã«ã®å©ããåããŠèŠã€ããããšã¯ã§ããŸãããããã§ããã¢ãã©ã€ã¶ãŒã¯ããã«é¢é£ããªãå€ãã®åé¡ãçºèŠããŸãããLibreOfficeéçºè
ãéçã³ãŒãã¢ãã©ã€ã¶ãŒã«æ³šæãæãããããã䜿çšããŠãããžã§ã¯ãã®å質ãšä¿¡é Œæ§ãåäžãããŠããããå¬ããã§ãã誰ã«ãšã£ãŠã圹ç«ã€ã§ãããããæž
èŽããããšãããããŸããã
ç§ãã¡ã®ãã£ã³ãã«ã賌èªããŠãããã°ã©ãã³ã°ã®äžçããã®ãã¥ãŒã¹ããæ¥œãã¿ã«ïŒ
è±èªã話ãèŽè¡ãšãã®èšäºãå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã
LibreOffice: Accountant's Nightmare