View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004029 | .NET API | Api Change | public | 2017-10-23 15:01 | 2018-03-16 11:12 |
Reporter | Ed Hume | Assigned To | |||
Priority | normal | Severity | crash | Reproducibility | always |
Status | new | Resolution | open | ||
Platform | Windows x64 | OS | Windows | OS Version | 10 |
Summary | 0004029: 64 bit DA3 Client heap corruption crash with IOPCBrowse::Browse | ||||
Description | When connected to the DA3 .net reference server with a 64bit C++ client, the Browse call always crashes with a heap corruption exception. The 64bit app works fine for other API calls, and the same app compiled as 32bit works fine. I believe the issue is an API flaw, that the OPCBROWSEELEMENT is not typed as a long pointer to a long pointer. Under the debugger, the 64 bit client is passing a 64 bit pointer, and the 32 bit client is passing a 32 bit pointer as the OPCBROWSEELEMENT . Therefore, the server is likely working with the argument as a 32 bit pointer and writing into an invalid address causing the crash. | ||||
Steps To Reproduce | Compile a DA client as a 64 bit app. Connect to a DA 3 server. Make the Browse call. | ||||
Additional Information | The issue can be worked around by using version 2 BrowseServerAddressSpace calls. It is too late to fix the IDL since every server in existence is using 32 bit pointers for the OPCBROWSEELEMENT ** argument. The OPC Errata document should be updated. | ||||
Tags | No tags attached. | ||||
Date Modified | Username | Field | Change |
---|---|---|---|
2017-10-23 15:01 | Ed Hume | New Issue | |
2018-03-16 11:12 | Paul Hunkar | Project | Classic DA Client => .NET API |
2018-03-16 11:12 | Paul Hunkar | Category | Spec => Api Change |