Subversion Repositories ssvnc

Compare Revisions

Ignore whitespace Rev 42 → Rev 43

/ssvnc/trunk/debian/changelog
7,8 → 7,10
#1312966). In addition to the command-line option "-scale auto"
creating a 1×1 window, rescaling when resizing the window didn't
happen, at least not when Caps Lock or other modifiers were active.
* samemachine_ipv6_overflow.patch (new): Fix stack overflow when
connecting over IPv6, caused by non-IPv6-aware code (Closes: #774622).
 
-- Magnus Holmgren <holmgren@debian.org> Sat, 30 Jul 2016 19:39:36 +0200
-- Magnus Holmgren <holmgren@debian.org> Sat, 30 Jul 2016 22:25:20 +0200
 
ssvnc (1.0.29-2) unstable; urgency=low
 
/ssvnc/trunk/debian/patches/samemachine_ip6_overflow.patch
0,0 → 1,44
Description: Use a struct sockaddr_storage to retrieve local and peer addresses and compare according to address family.
Also check if -rawlocal was specified before even checking whether the remote machine is the local one.
Bug-Debian: https://bugs.debian.org/774622
 
--- a/vnc_unixsrc/vncviewer/sockets.c
+++ b/vnc_unixsrc/vncviewer/sockets.c
@@ -1165,13 +1165,21 @@ char *ip2host(char *ip) {
Bool
SameMachine(int sock)
{
- struct sockaddr_in peeraddr, myaddr;
- int addrlen = sizeof(struct sockaddr_in);
+ struct sockaddr_storage peeraddr, myaddr;
+ int addrlen = sizeof(struct sockaddr_storage);
getpeername(sock, (struct sockaddr *)&peeraddr, &addrlen);
getsockname(sock, (struct sockaddr *)&myaddr, &addrlen);
- return (peeraddr.sin_addr.s_addr == myaddr.sin_addr.s_addr);
+ assert(((struct sockaddr*)&peeraddr)->sa_family == ((struct sockaddr*)&myaddr)->sa_family);
+ if (((struct sockaddr*)&myaddr)->sa_family == AF_INET6) {
+ return 0 == memcmp(&((struct sockaddr_in6*)&peeraddr)->sin6_addr.s6_addr,
+ &((struct sockaddr_in6*)&myaddr)->sin6_addr.s6_addr,
+ sizeof(struct in6_addr));
+ } else {
+ return ((struct sockaddr_in*)&peeraddr)->sin_addr.s_addr
+ == ((struct sockaddr_in*)&myaddr)->sin_addr.s_addr;
+ }
}
--- a/vnc_unixsrc/vncviewer/rfbproto.c
+++ b/vnc_unixsrc/vncviewer/rfbproto.c
@@ -2204,8 +2204,8 @@ if (getenv("DEBUG_SETFORMAT")) {
} else {
/* DIFFERENT CASE */
- if (SameMachine(rfbsock)) {
- if (!tunnelSpecified && appData.useRawLocal) {
+ if (appData.useRawLocal && SameMachine(rfbsock)) {
+ if (!tunnelSpecified) {
fprintf(stderr,"Same machine: preferring raw encoding\n");
encs[se->nEncodings++] = Swap32IfLE(rfbEncodingRaw);
} else {
/ssvnc/trunk/debian/patches/series
5,3 → 5,4
nostrip.patch
format-security.patch
auto-scale.patch
samemachine_ip6_overflow.patch