![](https://habrastorage.org/getpro/habr/post_images/bf0/ff5/4b4/bf0ff54b40fb8527f7bf79edc4050d37.png)
LibreOfficeã¯ãå人ãæè²ãããã³åæ¥ç®çã§ç¡æã§äœ¿çšã§ãã匷åãªãªãã£ã¹ã¹ã€ãŒãã§ãã ãã®éçºè ã¯ãå€ãã®åéã§Microsoft Officeã®ä»£æ¿ãšããŠäœ¿çšãããçŽ æŽããã補åãäœã£ãŠããŸãã PVS-StudioããŒã ã¯ããã®ãããªããç¥ãããŠãããããžã§ã¯ãã®ã³ãŒããèŠãŠããšã©ãŒãèŠã€ããããšåžžã«å¿ãããŠããŸãã ä»åã¯ç°¡åã§ããã ãããžã§ã¯ãã«ã¯ãæ·±å»ãªåé¡ãåŒãèµ·ããå¯èœæ§ã®ããå€ãã®ãšã©ãŒãå«ãŸããŠããŸãã ãã®èšäºã§ã¯ãã³ãŒãã§èŠã€ãã£ãããã€ãã®èå³æ·±ãæ¬ é¥ã«ã€ããŠèª¬æããŸãã
ã¯ããã«
LibreOfficeã¯éåžžã«å€§ããªC ++ãããžã§ã¯ãã§ãã ãã®ãµã€ãºã®ãããžã§ã¯ããç¶æããããšã¯ãéçºããŒã ã«ãšã£ãŠé£ããã¿ã¹ã¯ã§ãã ãããŠãæ®å¿µãªãããLibreOfficeã®ã³ãŒãå質ãååãªæ³šæãæã£ãŠããªããšããå°è±¡ãåããŸãã
äžæ¹ã§ã¯ããããžã§ã¯ãã¯åçŽã«å·šå€§ã§ããããã¹ãŠã®éçãŸãã¯åçåæããŒã«ã13kãœãŒã¹ã³ãŒããã¡ã€ã«ã®åæãåŠçã§ããããã§ã¯ãããŸããã éåžžã«å€ãã®ãã¡ã€ã«ãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãšãšãã«ãªãã£ã¹ã¹ã€ãŒãã®æ§ç¯ã«é¢äžããŠããŸãã ã¡ã€ã³ã®LibreOfficeãªããžããªã«ã¯ãçŽ8kã®ãœãŒã¹ã³ãŒããã¡ã€ã«ãä¿åãããŸãã ãã®éã®ã³ãŒãã¯ãéçºè ã ãã§ãªãåé¡ãåŒãèµ·ãããŸãã
![](https://habrastorage.org/getpro/habr/post_images/95d/8f8/322/95d8f8322f57ac9af0206a3ef955e55e.png)
äžæ¹ããããžã§ã¯ãã«ã¯å€ãã®ãŠãŒã¶ãŒãããŠãã§ããã ãå€ãã®ãšã©ãŒãèŠã€ããŠä¿®æ£ããå¿ èŠããããŸãã ãã¹ãŠã®ééãã¯äœçŸãäœåãã®ãŠãŒã¶ãŒãå·ã€ããå¯èœæ§ããããŸãã ãããã£ãŠãã³ãŒãããŒã¹ã®ãµã€ãºã倧ããããšã¯ããšã©ãŒãæ€åºã§ããç¹å®ã®ããŒã«ã®äœ¿çšãæåŠããèšãèš³ã«ãªãã¹ãã§ã¯ãããŸããã èªè ã¯ãã§ã«éçã³ãŒãã¢ãã©ã€ã¶ãŒã«ã€ããŠè©±ããŠãããšæšæž¬ããŠãããšæããŸã:)ã
ã¯ããéçã¢ãã©ã€ã¶ãŒã䜿çšããŠãããããžã§ã¯ãã«ãšã©ãŒããªãããšãä¿èšŒããŸããã ãã ããPVS-Studioãªã©ã®ããŒã«ã¯ãéçºæ®µéã§ãå€æ°ã®ãšã©ãŒãæ€åºã§ããããããããã°ããã³ãããžã§ã¯ããµããŒãã«é¢é£ããäœæ¥éãåæžã§ããŸãã
PVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããå ŽåãLibreOfficeã®ãœãŒã¹ã³ãŒãã§äœãããããããšæããèŠãŠã¿ãŸãããã ã¢ãã©ã€ã¶ãŒãèµ·åããå¯èœæ§ã¯åºç¯å²ã«ããããŸãïŒWindowsãLinuxãmacOSã ãã®ã¬ãã¥ãŒãæžãããã«ãWindowsã§ã®ãããžã§ã¯ãã®åæäžã«äœæãããPVS-Studioã¬ããŒãã䜿çšãããŸããã
2015幎ã®æåŸã®ãã§ãã¯ä»¥éã®å€æŽ
![](https://habrastorage.org/getpro/habr/post_images/b28/750/671/b28750671ffb2784af092ee21c716259.png)
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()); // <= const basegfx::B3DVector aVUV(rSceneCamera.GetVUV()); .... }
ãã®ãã°ã¯ä¿®æ£ãããŸããããææ°ããŒãžã§ã³ã®ã³ãŒãã§èŠã€ãã£ããã®ã¯æ¬¡ã®ãšããã§ãã
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(); // <= .... }
ãšã©ãŒã¯é¡æšã«ãã£ãŠæåéãã³ãŒãã«å°å ¥ãããŸãã
ã ãŸãããŠã¯ãããŸãã
![](https://habrastorage.org/getpro/habr/post_images/e64/21a/1a9/e6421a1a9d0e05a1dff0c27f304ce403.png)
V765è€åä»£å ¥åŒãx-= x -... ãã¯çãããã§ãã ãšã©ãŒã®å¯èœæ§ã調ã¹ãããšãæ€èšããŠãã ããã swdtflvr.cxx 3509
bool SwTransferable::PrivateDrop(...) { .... if ( rSrcSh.IsSelFrameMode() ) { //Hack: fool the special treatment aSttPt -= aSttPt - rSrcSh.GetObjRect().Pos(); } .... }
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++; } .... }
ãã®ãããªç¶æ³ã§ã®ã³ãŒãã®å®è¡ã¯ãã³ã³ãã€ã©ãšèšèªæšæºã«äŸåããå ŽåããããŸãã ãã®ã³ãŒãã¹ããããããããã·ã³ãã«ã§æ確ã§ä¿¡é Œæ§ã®é«ãæ¹æ³ã§æžãæããŠã¿ãŸãããïŒ
é åãšãã¯ãã«ã䜿çšããªãæ¹æ³
![](https://habrastorage.org/getpro/habr/post_images/d61/38d/483/d6138d483ed86734a4b6d20405af255c.png)
äœããã®çç±ã§ãé åãšãã¯ã¿ãŒãæäœãããšãã«èª°ããåæ§ã®ãšã©ãŒãããããç¯ããŸããã ãããã®äŸãèŠãŠã¿ãŸãããã
V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ãnPageNumãã€ã³ããã¯ã¹ã¯ãé åã®å¢çãè¶ ããŠããŸãã pptx-epptooxml.cxx 1168
void PowerPointExport::ImplWriteNotes(sal_uInt32 nPageNum) { .... // add slide implicit relation to notes if (mpSlidesFSArray.size() >= nPageNum) addRelation(mpSlidesFSArray[ nPageNum ]->getOutputStream(), oox::getRelationship(Relationship::NOTESSLIDE), OUStringBuffer() .append("../notesSlides/notesSlide") .append(static_cast<sal_Int32>(nPageNum) + 1) .append(".xml") .makeStringAndClear()); .... }
æåŸã®æå¹ãªã€ã³ããã¯ã¹ã¯ã 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; // should be caught/debugged via above assert; return maStyleIndexes[ nXFIndex ]; }
ãããŠããã®ééãã¯äºéã«èå³æ·±ãã§ãïŒ ãããã°ãã¯ãã§ã¯ãæ£ããã€ã³ããã¯ã¹ãã§ãã¯ãäœæããå¥ã®å Žæã§åã³ãã¹ãç¯ããé åã®å€ã«åºãããšãèš±å¯ããŸããã
次ã«ãã€ã³ããã¯ã¹ã«é¢é£ããªãå¥ã®çš®é¡ã®ãšã©ãŒã«ã€ããŠèããŠã¿ãŸãããã
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 ) { .... // convert transparent bitmap to 32bit RGBA // ======================================== const ::Size aBmpSize( rBmpEx.GetSizePixel() ); RawRGBABitmap aBmpData; aBmpData.mnWidth = aBmpSize.Width(); aBmpData.mnHeight = aBmpSize.Height(); aBmpData.mpBitmapData.reset( new sal_uInt8[ 4*aBmpData.mnWidth *aBmpData.mnHeight ] ); .... }
ãã®ã³ãŒãã«ã¯ãæªå®çŸ©ã®ããã°ã©ã ã®åäœã«ã€ãªãããšã©ãŒãå«ãŸããŠããŸãã å®éã«ã¯ãã¡ã¢ãªã¯ããŸããŸãªæ¹æ³ã§å²ãåœãŠããã解æŸãããŸãã ã¡ã¢ãªãé©åã«è§£æŸããã«ã¯ã次ã®ãããªã¯ã©ã¹ãã£ãŒã«ãã宣èšããå¿ èŠããããŸããã
std::shared_ptr< sal_uInt8[] > mpBitmapData;
ãã¯ãã2åäœæããæ¹æ³
![](https://habrastorage.org/getpro/habr/post_images/ead/1d2/de0/ead1d2de04413fc43dba4e42280f98ed.png)
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 ++i) if (oInsets[i]) xPropertySet->setPropertyValue((bTextFrame ? aProps : aShapeProps)[i], //2 uno::makeAny(*oInsets[i])); .... }
å€ãã®éçºè ã«ãšã£ãŠæ®å¿µãªããšã«ããã¯ãåŒæ°ã¯é¢æ°åŒæ°ã®ããã«ã¯åäœããŸããã ãã®äºå®ãç¡èŠãããšãå€ãã®å Žåãšã©ãŒãçºçããŸãã ã±ãŒã¹ïŒ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 ) /* * Magic template to calculate at compile time the number of elements * in an array. Enforcing that the argument must be a array and not * a pointer, eg * char *pFoo="foo"; * SAL_N_ELEMENTS(pFoo); * fails while * SAL_N_ELEMENTS("foo"); * or * char aFoo[]="foo"; * SAL_N_ELEMENTS(aFoo); * pass * * Unfortunately if arr is an array of an anonymous class then we need * C++0x, ie see * http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757 */ 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
ãã¯ãã®å¥ã®ããŒãžã§ã³ã«ã¯å®å šãªãã³ãã¬ãŒãé¢æ°ãå«ãŸããŠããŸãããäœãåé¡ããããŸããã
- å®å šãªãã¯ãã¯ã³ãŒãã«å«ãŸããŠããŸããã
- å¥ã®ãã¯ãã䜿çšããããšã¯ãŸã äžå¯èœã§ãã ãã³ãã¬ãŒãé¢æ°ã®æ£åžžãªã€ã³ã¹ã¿ã³ã¹åã¯ãåããµã€ãºã®é åãäžé æŒç®åã«æž¡ãããå Žåã«ã®ã¿å®è¡ãããŸãã ãããŠãã®å Žåããã®ãããªãã¯ãã®äœ¿çšã¯ãã®æå³ã倱ããŸãã
å ¥åãã¹ãšã³ããŒã¢ã³ãããŒã¹ã
![](https://habrastorage.org/getpro/habr/post_images/19d/419/905/19d41990527e23e0654820cfcddcbe9a.png)
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 && // <= f1.Pitch == f2.CharSet && // <= f1.CharacterWidth == f2.CharacterWidth && f1.Weight == f2.Weight && f1.Slant == f2.Slant && f1.Underline == f2.Underline && f1.Strikeout == f2.Strikeout && f1.Orientation == f2.Orientation && bool(f1.Kerning) == bool(f2.Kerning) && bool(f1.WordLineMode) == bool(f2.WordLineMode) && f1.Type == f2.Type && style1._fontRelief == style2._fontRelief && style1._fontEmphasisMark == style2._fontEmphasisMark ); }
ãã®ãšã©ãŒã¯ãã æªãæ¯èŒæ©èœã«äœãã§ãã ããšããèšäºãæŽæ°ãŸãã¯æ¡åŒµããããšã«æ±ºããå Žåã«ãæŽæ°ãã䟡å€ã®ããåè£ã§ãã ãã®ãããªãšã©ãŒïŒãã¹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 = 10; else if (sDataType.equalsIgnoreAsciiCase("date")) // <= nColumnSize = 8; else if (sDataType.equalsIgnoreAsciiCase("datetime") || sDataType.equalsIgnoreAsciiCase("timestamp")) nColumnSize = 19; else if (!bIsCharMax) nColumnSize = xRow->getShort(7); else nColumnSize = nCharMaxLen; .... }
æ¡ä»¶åŒãã³ããŒããçµæãã³ãŒãã§ãšã©ãŒãçºçããŸããããã®ãããå€æ°nColumnSizeã®å€8ã¯èšå®ãããŸããã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã svdpdf.hxx 146
/// Transform the rectangle (left, right, top, bottom) by this Matrix. template <typename T> void Transform(....) { .... if (top > bottom) top = std::max(leftTopY, rightTopY); else top = std::min(leftTopY, rightTopY); if (top > bottom) bottom = std::max(leftBottomY, rightBottomY); // <= else bottom = std::max(leftBottomY, rightBottomY); // <= }
ããã§ãé¢æ°minïŒïŒãšmaxïŒïŒã¯æ··åãããŠããŸãã 確ãã«ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã®ã¿ã€ããã¹ã®ããã«ãäœããå¥åŠã«ã¹ã±ãŒãªã³ã°ãããŸãã
å¥åŠãªãµã€ã¯ã«
![](https://habrastorage.org/getpro/habr/post_images/361/175/35d/36117535d4e5edba8d6a11ce89ae5cbc.gif)
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
å¥åŠãªæ¡ä»¶
![](https://habrastorage.org/getpro/habr/post_images/9f6/73a/01b/9f673a01bb41965f47539e9311546201.png)
V637å察ã®2ã€ã®æ¡ä»¶ãçºçããŸããã 2çªç®ã®æ¡ä»¶ã¯åžžã«falseã§ãã è¡ã確èªïŒ281ã285ãauthfld.cxx 281
sal_uInt16 SwAuthorityFieldType::GetSequencePos(sal_IntPtr nHandle) { .... SwTOXSortTabBase* pOld = aSortArr[i].get(); if(*pOld == *pNew) { //only the first occurrence in the document //has to be in the array if(*pOld < *pNew) pNew.reset(); else // remove the old content aSortArr.erase(aSortArr.begin() + i); break; } .... }
ã¢ãã©ã€ã¶ãŒã¯ç«¶åããæ¯èŒãèŠã€ããŸããã ãã®ã³ãŒãã«ã¯äœãæããã«åé¡ããããŸãã
åãå Žæã«ãã®ã³ãŒãããããŸãïŒ
- 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(....) { .... // Range WW:1..9 -> SW:0..8 no bullets / numbering if (*pData <= MAXLEVEL && *pData <= 9) { .... } else if( *pData == 10 || *pData == 11 ) { // remember type, the rest happens at Sprm 12 m_xStyles->mnWwNumLevel = *pData; } .... }
æåã®æ¡ä»¶ã¯å€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) || // <= (!pItem->mbMirrorMode && bMirror)) // <= { .... } } }
ããªãåã«ã V728蚺æã¯ã ãããããšã©ãŒã§ã¯ãªãããã³ãŒããè€éã«ããã±ãŒã¹ã«æ¡åŒµãããŸããã ãŸããè€éãªã³ãŒãã§ã¯ãé ããæ©ãããšã©ãŒãçºçããŸãã
ãã®ç¶æ ã¯æ¬¡ã®ããã«ç°¡ç¥åãããŠããŸã
if (pItem->mbMirrorMode != bMirror) { .... }
ãããžã§ã¯ãã«ã¯çŽ60ã®åæ§ã®æ§é ãããããã®äžéšã¯éåžžã«ããã°ã£ãŠããŸãã ãããžã§ã¯ãã®äœæè ã¯ãPVS-Studioã¢ãã©ã€ã¶ãŒã®å®å šãªã¬ããŒãã«ç²ŸéããŠããŸãã
ã»ãã¥ãªãã£ã®åé¡
![](https://habrastorage.org/getpro/habr/post_images/38b/9aa/9ba/38b9aa9ba87c83eb5207957913b918af.png)
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=(....) { // complete initialization using copy for(sal_uInt16 a(0); a < (RowSize - 1); a++) { memcpy(&maLine[a], &rToBeCopied.maLine[a], sizeof(....)); } if(rToBeCopied.mpLine) { mpLine.reset( new ImplMatLine< RowSize >(....) ); } return *this; }
ãã®ã±ãŒã¹ã¯ãå®å šãªã³ãŒãèšè¿°ã«é¢ãããã®ã§ãã copyã¹ããŒãã¡ã³ãã«ã¯ããªããžã§ã¯ããèªåèªèº«ã«å²ãåœãŠãããã®ãã§ãã¯ã¯ãããŸããã åèšã§ããããžã§ã¯ãã«ã¯çŽ30ã®ãã®ãããªã³ããŒæŒç®åã®å®è£ ããããŸãã
SysAllocStringã®ãšã©ãŒ
![](https://habrastorage.org/getpro/habr/post_images/39c/568/55a/39c56855adffe06a5e0d517f764ecea6.png)
V649åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯é¢æ°ã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãã ãã§ãã¯è¡ïŒ125ã137ãacctable.cxx 137
STDMETHODIMP CAccTable::get_columnDescription(long column, BSTR * description) { SolarMutexGuard g; ENTER_PROTECTED_BLOCK // #CHECK# if(description == nullptr) return E_INVALIDARG; // #CHECK XInterface# if(!pRXTable.is()) return E_FAIL; .... SAFE_SYSFREESTRING(*description); *description = SysAllocString(o3tl::toW(ouStr.getStr())); if(description==nullptr) // <= return E_FAIL; return S_OK; LEAVE_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 // #CHECK# if(ppIA == nullptr) { return E_INVALIDARG; // <= } BOOL isGet = FALSE; if(g_pAgent) isGet = g_pAgent->GetIAccessibleFromXAccessible(....); if(isGet) return TRUE; else return FALSE; LEAVE_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) { // Create must be called after this constructor m_pGridListener.reset( new GridListenerDelegator( this ) ); } class __declspec(dllexport) FmXGridPeer: public cppu::ImplInheritanceHelper<....> { .... ::comphelper::OInterfaceContainerHelper2 m_aModifyListeners, m_aUpdateListeners, m_aContainerListeners, m_aSelectionListeners, m_aGridControlListeners; .... protected: css::uno::Reference< css::uno::XComponentContext > m_xContext; ::osl::Mutex m_aMutex; .... };
èšèªæšæºã«ããã°ãã³ã³ã¹ãã©ã¯ã¿ãŒã§ã®ã¯ã©ã¹ã¡ã³ããŒã®åæåã®é åºã¯ãã¯ã©ã¹ã§ã®å®£èšã®é åºã§çºçããŸãããã®å Žåãã¯ã©ã¹ã®ä»ã®5ã€ã®ãã£ãŒã«ãã®åæåã«åå ããåŸãm_aMutexãã£ãŒã«ããåæåãããŸãã
ã¯ã©ã¹ãã£ãŒã«ãã®1ã€ã®ã³ã³ã¹ãã©ã¯ã¿ã¯æ¬¡ã®ããã«ãªããŸãã
OInterfaceContainerHelper2( ::osl::Mutex & rMutex );
çžäºæä»ãªããžã§ã¯ãã¯åç §æž¡ããããŸãããã®å ŽåãããŸããŸãªåé¡ãçºçããå¯èœæ§ããããŸããåæåãããŠããªãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ããããã®åŸã®ãªããžã§ã¯ãå€æŽã®æ倱ãŸã§ã
V763ãã©ã¡ãŒã¿ãŒ 'nNativeNumberMode'ã¯ã䜿çšãããåã«åžžã«é¢æ°æ¬äœã§æžãæããããŸããcalendar_jewish.cxx 286
OUString SAL_CALL Calendar_jewish::getDisplayString(...., sal_Int16 nNativeNumberMode ) { // make Hebrew number for Jewish calendar nNativeNumberMode = NativeNumberMode::NATNUM2; if (nCalendarDisplayCode == CalendarDisplayCode::SHORT_YEAR) { sal_Int32 value = getValue(CalendarFieldIndex::YEAR) % 1000; return mxNatNum->getNativeNumberString(...., nNativeNumberMode ); } else return Calendar_gregorian::getDisplayString(...., 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éçºè ãéçã³ãŒãã¢ãã©ã€ã¶ãŒã«æ³šæãæãããããã䜿çšããŠãããžã§ã¯ãã®å質ãšä¿¡é Œæ§ãåäžãããŠããããå¬ããã§ãã誰ã«ãšã£ãŠã圹ç«ã€ã§ãããã
ãæž èŽããããšãããããŸããã ç§ãã¡ã®ãã£ã³ãã«ã賌èªããŠãããã°ã©ãã³ã°ã®äžçããã®ãã¥ãŒã¹ãã楜ãã¿ã«ïŒ
- VkïŒ@pvsstudio_rus
- é»å ±ïŒ@pvsstudio_rus
- InstagramïŒ@pvsstudio_rus
- Twitter: @pvsstudio_rus
- YouTube: @PVSStudioTool
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã LibreOffice: Accountant's Nightmare