RealVNC 4.0b4 and TightVNC compatibility?

Phil Budne phil "at" ultimate.com
Fri Jan 23 07:56:01 2004


I've run into problems mixing RealVNC 4.0b4 and TightVNC.

Running an (essentially) unmodified TightVNC Java viewer (built from
sources fetched from their CVS repository on January 2nd), and the
RealVNC 4.0b4 server (built from sources using Visual Studio .NET
2003) running on Windows XP.  I can reliably crash the RealVNC server
by going into "view slide show" mode in PowerPoint.  The crash is due
to a divide by zero in RawEncoder::writeRect (both h and w are zero)
called via VNCSConnectionST::writeRenderedCursorRect.  I can supply a
.dmp file, or more details as needed.

Running the RealVNC 4.0b4 Unix vncviewer (running on FreeBSD 4.7,
built with gcc 2.95.4) against a (locally modified and built) UltraVNC
server (under WinXP); the viewer always displays a "dot" cursor.  I've
also gotten the viewer to crash, but I can't reproduce it at the moment.

Have the RealVNC4 and Tight/UltraVNC implementations of cursor shape
encoding have previously been tested and found interoperable?

When running the RealVNC4 viewer against an UltraVNC server in "single
window" mode, I found the following change helpful;

peecee% diff -c CMsgReader.cxx.orig CMsgReader.cxx
*** CMsgReader.cxx.orig Sun Jan 18 11:19:26 2004
--- CMsgReader.cxx      Sun Jan 18 11:21:13 2004
***************
*** 94,100 ****
  
  void CMsgReader::readRect(const Rect& r, unsigned int encoding)
  {
!   if ((r.br.x > handler->cp.width) || (r.br.y > handler->cp.height)) {
      fprintf(stderr, "Rect too big: %dx%d at %d,%d exceeds %dx%d\n",
            r.width(), r.height(), r.tl.x, r.tl.y,
              handler->cp.width, handler->cp.height);
--- 94,100 ----
  
  void CMsgReader::readRect(const Rect& r, unsigned int encoding)
  {
!   if ((r.width() > handler->cp.width) || (r.height() > handler->cp.height)) {
      fprintf(stderr, "Rect too big: %dx%d at %d,%d exceeds %dx%d\n",
            r.width(), r.height(), r.tl.x, r.tl.y,
              handler->cp.width, handler->cp.height);