Join The Works program to have access to the most current content, and to be able to ask questions and get answers from Revelation staff and the Revelation community

At 12 OCT 2023 01:44:59PM Donald Bakke wrote:

We have run into a problem with the CLIENTSIZE property sometimes returning bad data when running on an RDP/Citrix client. This does not happen when running on a local client. It also does not seem to be a problem with OI 10 (we are running the same code base on both versions).

The problem is exasperated when the CLIENTSIZE property is requested after other commands. When the CLIENTSIZE property is running at the top of the code it seems to always work. Also, when we debug the program, it always works.

We have seen examples where CLIENTSIZE returns the same results as the SYSTEM.VERSION property. We have seen examples where it returns text like this:

<Stored Procedure> MY_PROG successfully opened

We are doing what we can to workaround the issue, but I am curious if anybody can provide any insight into why CLIENTSIZE would get confused in OI 9.

Don Bakke

SRP Computer Solutions, Inc.


At 13 OCT 2023 12:19PM Carl Pates wrote:

Hi Don,

I've reviewed the v9 code and there is nothing even remotely special about the CLIENTSIZE property when compared to any other property. It's a simple call to GetClientRect(), and then translating the resulting coordinates to a string format in a buffer that has plenty of capacity.

This might be one of those areas where something like a buffer overrun in another part of the program is causing the bad data to overwrite the string buffer used by the CLIENTSIZE property, as this can manifest as the buffer containing "random" data like you describe.

The fact that it only happens on RDP/Citrix may point to an issue with a video driver perhaps, as they will be quite different to a local client video driver, and the issue appears to be related in some respect to window coordinates. Just a guess though…

You _may_ be able to use a tool like the Microsoft Application Verifier to trap an overwrite as it can add "guards" around memory blocks to trigger a fault when something like this happens - it may point to what the problem is.

Regards,

Carl Pates


At 13 OCT 2023 03:14PM Donald Bakke wrote:

Hi Carl - Thank you very much for taking a peek at this. We had assumed it was a simple call to GetClientRect(). Your theory seems plausible. We'll see if we can dig deeper based on some of your feedback.

Don Bakke

SRP Computer Solutions, Inc.

View this thread on the Works forum...

  • third_party_content/community/commentary/forums_works/3042fcf7e1fbe745a192149e84433da5.txt
  • Last modified: 2024/12/10 16:16
  • by 127.0.0.1