MantisBT
Mantis Bug Tracker Workflow

View Issue Details Jump to Notes ] Related Changesets ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0026377Open CASCADE[OCCT] OCCT:Foundation Classespublic2015-06-28 13:462016-04-20 15:51
Reporterabv 
Assigned Toabv 
PrioritynormalSeverityminor 
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version 
Target Version[OCCT] 7.0.0Fixed in Version[OCCT] 7.0.0 
Summary0026377: Passing Handle objects as arguments to functions as non-const reference to base type is dangerous
DescriptionAs pointed out by Roman Lygin, passing Handle object as argument to function accepting non-const reference to handle to base type may be dangerous, as the handle can be modified by that function, and there is no guarantee that the new object pointed by it will be compatible with the original handle type.

Example:

  Handle(TDataStd_Real) A;
  if (Label.FindAttribute (TDataStd_Integer::GetID(), A)) {
    // A is used as TData_Std_Real, while the object pointed by it is TDataStd_Integer
  }

It would be good to have protection in this situation, to ensure that either exception is raised or at least handle is nullified if it is assigned non-compatible type. This should be possible when new handles are implemented in the frames of 0024023
Steps To ReproduceNot required
TagsNo tags attached.
Test case number
Attached Files

- Relationships
related to 0024023closedabv Open CASCADE Revamp the OCCT Handle 
related to 0027104closedabv Community DownCast() cannot return null for mismatched handle 
related to 0027111closedabv Community Add generalized copy constructor in handle class for old compilers 
related to 0027185newgka Open CASCADE IGES - incorrect reading of DE for undefined entity 

-  Notes
(0042518)
git (administrator)
2015-06-29 07:08

Branch CR26377 has been created by abv.

SHA-1: 87f01da0abf201904b5ae6b1c06b98492aa94ad9


Detailed log of new commits:

Author: abv
Date: Sun Jun 28 13:52:12 2015 +0300

    0026377: Passing Handle objects as arguments to functions as non-const reference to base type is dangerous
    
    Function SafeUpCast() added in opencascade::handle class to allow safe passing of handle as argument to functions accepting non-const reference to handle of base type.
    Operator of cast to non-const reference is removed.
(0050997)
bugmaster (administrator)
2016-02-19 11:03

Tested with CR26711_6
(0053250)
git (administrator)
2016-04-17 15:06

Branch CR26377 has been deleted by kgv.

SHA-1: 87f01da0abf201904b5ae6b1c06b98492aa94ad9

- Related Changesets
occt: master aa00364d
Timestamp: 2016-02-17 14:33:18
Author: abv
Committer: abv
Details ] Diff ]
0026377: Passing Handle objects as arguments to functions as non-const reference to base type is dangerous

Operator of cast to non-const reference is declared deprecated to produce compiler warning if used (usually implicitly).

OCCT code is updated to avoid that cast, occurring when function accepting non-const reference to handle is called with handle to derived type.
For that, local variable of argument type is passed instead, and down-cast is used to get it to desired type after the call.
A few occurrences of use of uninitialized variable are corrected.
mod - src/AIS/AIS_AngleDimension.cxx Diff ] File ]
mod - src/AIS/AIS_Chamf2dDimension.cxx Diff ] File ]
mod - src/AIS/AIS_SymmetricRelation.cxx Diff ] File ]
mod - src/BinDrivers/BinDrivers_DocumentRetrievalDriver.cxx Diff ] File ]
mod - src/BinDrivers/BinDrivers_DocumentStorageDriver.cxx Diff ] File ]
mod - src/BinMXCAFDoc/BinMXCAFDoc.cxx Diff ] File ]
mod - src/DDF/DDF.hxx Diff ] File ]
mod - src/DDocStd/DDocStd.hxx Diff ] File ]
mod - src/Dico/Dico_DictionaryOfTransient.hxx Diff ] File ]
mod - src/DrawTrSurf/DrawTrSurf.cxx Diff ] File ]
mod - src/GeomTools/GeomTools.cxx Diff ] File ]
mod - src/GeomTools/GeomTools_Curve2dSet.cxx Diff ] File ]
mod - src/GeomTools/GeomTools_Curve2dSet.hxx Diff ] File ]
mod - src/GeomTools/GeomTools_CurveSet.cxx Diff ] File ]
mod - src/GeomTools/GeomTools_CurveSet.hxx Diff ] File ]
mod - src/GeomTools/GeomTools_SurfaceSet.cxx Diff ] File ]
mod - src/GeomTools/GeomTools_SurfaceSet.hxx Diff ] File ]
mod - src/IFSelect/IFSelect_Activator.cxx Diff ] File ]
mod - src/IGESData/IGESData_BasicEditor.cxx Diff ] File ]
mod - src/IGESData/IGESData_FreeFormatEntity.cxx Diff ] File ]
mod - src/IGESData/IGESData_IGESReaderTool.cxx Diff ] File ]
mod - src/IGESData/IGESData_ParamReader.cxx Diff ] File ]
mod - src/IGESData/IGESData_ParamReader.hxx Diff ] File ]
mod - src/IGESData/IGESData_ToolLocation.cxx Diff ] File ]
mod - src/IGESDraw/IGESDraw_ToolViewsVisible.cxx Diff ] File ]
mod - src/IGESDraw/IGESDraw_ToolViewsVisibleWithAttr.cxx Diff ] File ]
mod - src/IGESGeom/IGESGeom_ToolBoundedSurface.cxx Diff ] File ]
mod - src/IGESSelect/IGESSelect_RebuildDrawings.cxx Diff ] File ]
mod - src/IGESSolid/IGESSolid_ToolManifoldSolid.cxx Diff ] File ]
mod - src/IGESSolid/IGESSolid_ToolToroidalSurface.cxx Diff ] File ]
mod - src/Interface/Interface_CopyTool.cxx Diff ] File ]
mod - src/IntTools/IntTools_FaceFace.cxx Diff ] File ]
mod - src/MoniTool/MoniTool_Profile.cxx Diff ] File ]
mod - src/OpenGl/OpenGl_Context.cxx Diff ] File ]
mod - src/OpenGl/OpenGl_Context.hxx Diff ] File ]
mod - src/OpenGl/OpenGl_View_Raytrace.cxx Diff ] File ]
mod - src/PrsMgr/PrsMgr_PresentationManager.cxx Diff ] File ]
mod - src/QANCollection/QANCollection_Handle.cxx Diff ] File ]
mod - src/Select3D/Select3D_SensitiveGroup.cxx Diff ] File ]
mod - src/Standard/Standard_Handle.hxx Diff ] File ]
mod - src/StdObjMgt/StdObjMgt_ReadData.hxx Diff ] File ]
mod - src/STEPCAFControl/STEPCAFControl_Writer.cxx Diff ] File ]
mod - src/StepData/StepData_StepReaderData.cxx Diff ] File ]
mod - src/StepData/StepData_StepReaderData.hxx Diff ] File ]
mod - src/StepData/StepData_StepReaderTool.cxx Diff ] File ]
mod - src/TDF/TDF_Attribute.hxx Diff ] File ]
mod - src/TDF/TDF_Label.hxx Diff ] File ]
mod - src/TDF/TDF_RelocationTable.hxx Diff ] File ]
mod - src/TNaming/TNaming_NamedShape.cxx Diff ] File ]
mod - src/TPrsStd/TPrsStd_ConstraintTools.cxx Diff ] File ]
mod - src/Transfer/Transfer_ProcessForFinder.hxx Diff ] File ]
mod - src/VrmlData/VrmlData_IndexedFaceSet.cxx Diff ] File ]
mod - src/VrmlData/VrmlData_IndexedLineSet.cxx Diff ] File ]
mod - src/VrmlData/VrmlData_Node.cxx Diff ] File ]
mod - src/XmlDrivers/XmlDrivers_DocumentRetrievalDriver.cxx Diff ] File ]
mod - src/XmlDrivers/XmlDrivers_DocumentStorageDriver.cxx Diff ] File ]
mod - src/XmlMXCAFDoc/XmlMXCAFDoc.cxx Diff ] File ]
mod - tests/de/iges_2/F9 Diff ] File ]
mod - tests/perf/fclasses/handle Diff ] File ]

- Issue History
Date Modified Username Field Change
2015-06-28 13:46 abv New Issue
2015-06-28 13:46 abv Assigned To => abv
2015-06-28 13:57 abv Relationship added related to 0024023
2015-06-29 07:08 git Note Added: 0042518
2015-12-14 22:39 abv Target Version 7.0.0 => 7.1.0
2016-01-21 16:30 Roman Lygin Relationship added related to 0026497
2016-01-21 16:31 Roman Lygin Relationship deleted related to 0026497
2016-01-21 16:31 Roman Lygin Relationship added related to 0027104
2016-01-25 20:36 Roman Lygin Relationship added related to 0027111
2016-02-18 19:00 abv Relationship added related to 0027185
2016-02-19 11:02 bugmaster Status new => resolved
2016-02-19 11:02 bugmaster Steps to Reproduce Updated View Revisions
2016-02-19 11:02 bugmaster Steps to Reproduce Updated View Revisions
2016-02-19 11:03 bugmaster Assigned To abv => bugmaster
2016-02-19 11:03 bugmaster Status resolved => reviewed
2016-02-19 11:03 bugmaster Note Added: 0050997
2016-02-19 11:03 bugmaster Status reviewed => tested
2016-02-19 11:21 abv Target Version 7.1.0 => 7.0.0
2016-02-21 08:52 abv Changeset attached => occt master aa00364d
2016-02-21 08:52 abv Assigned To bugmaster => abv
2016-02-21 08:52 abv Status tested => verified
2016-02-21 08:52 abv Resolution open => fixed
2016-04-17 15:06 git Note Added: 0053250
2016-04-20 15:42 aiv Fixed in Version => 7.0.0
2016-04-20 15:51 aiv Status verified => closed


Copyright © 2000 - 2019 MantisBT Team
Powered by Mantis Bugtracker