aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml8
-rw-r--r--CMakeLists.txt1
-rw-r--r--common/rfb/EncodeManager.cxx7
-rw-r--r--common/rfb/EncodeManager.h2
-rw-r--r--common/rfb/VNCSConnectionST.cxx1
-rw-r--r--contrib/packages/deb/ubuntu-focal/debian/rules2
-rw-r--r--contrib/packages/deb/ubuntu-jammy/debian/rules2
-rw-r--r--contrib/packages/deb/ubuntu-noble/debian/rules2
-rw-r--r--unix/vncserver/vncsession.c10
-rw-r--r--vncviewer/vncviewer.cxx4
10 files changed, 32 insertions, 7 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9d5f33af..578c49c2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -6,6 +6,8 @@ jobs:
build-linux:
runs-on: ubuntu-latest
timeout-minutes: 10
+ env:
+ VERBOSE: 1
steps:
- uses: actions/checkout@v4
- name: Install dependencies
@@ -42,6 +44,8 @@ jobs:
build-windows:
runs-on: windows-latest
timeout-minutes: 20
+ env:
+ VERBOSE: 1
defaults:
run:
shell: msys2 {0}
@@ -88,6 +92,8 @@ jobs:
build-macos:
runs-on: macos-latest
timeout-minutes: 20
+ env:
+ VERBOSE: 1
steps:
- uses: actions/checkout@v4
- name: Install dependencies
@@ -121,6 +127,8 @@ jobs:
build-java:
runs-on: ubuntu-latest
timeout-minutes: 5
+ env:
+ VERBOSE: 1
strategy:
matrix:
java: [ '8', '11', '17', '21' ]
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75773460..0c0344df 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -75,6 +75,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
# Tell the compiler to be stringent
+add_compile_definitions(_FORTIFY_SOURCE=2)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat=2 -Wvla")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wformat=2 -Wvla")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wzero-as-null-pointer-constant")
diff --git a/common/rfb/EncodeManager.cxx b/common/rfb/EncodeManager.cxx
index 7ec70e69..6a63fa6f 100644
--- a/common/rfb/EncodeManager.cxx
+++ b/common/rfb/EncodeManager.cxx
@@ -278,6 +278,13 @@ void EncodeManager::pruneLosslessRefresh(const core::Region& limits)
pendingRefreshRegion.assign_intersect(limits);
}
+void EncodeManager::forceRefresh(const core::Region& req)
+{
+ lossyRegion.assign_union(req);
+ if (!recentChangeTimer.isStarted())
+ pendingRefreshRegion.assign_union(req);
+}
+
void EncodeManager::writeUpdate(const UpdateInfo& ui, const PixelBuffer* pb,
const RenderedCursor* renderedCursor)
{
diff --git a/common/rfb/EncodeManager.h b/common/rfb/EncodeManager.h
index 959c13d6..4ce6d0ce 100644
--- a/common/rfb/EncodeManager.h
+++ b/common/rfb/EncodeManager.h
@@ -54,6 +54,8 @@ namespace rfb {
void pruneLosslessRefresh(const core::Region& limits);
+ void forceRefresh(const core::Region& req);
+
void writeUpdate(const UpdateInfo& ui, const PixelBuffer* pb,
const RenderedCursor* renderedCursor);
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index 0b3537ad..0038daff 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -467,6 +467,7 @@ void VNCSConnectionST::setPixelFormat(const PixelFormat& pf)
pf.print(buffer, 256);
vlog.info("Client pixel format %s", buffer);
setCursor();
+ encodeManager.forceRefresh(server->getPixelBuffer()->getRect());
}
void VNCSConnectionST::pointerEvent(const core::Point& pos,
diff --git a/contrib/packages/deb/ubuntu-focal/debian/rules b/contrib/packages/deb/ubuntu-focal/debian/rules
index 0245a065..6c3fd051 100644
--- a/contrib/packages/deb/ubuntu-focal/debian/rules
+++ b/contrib/packages/deb/ubuntu-focal/debian/rules
@@ -126,7 +126,7 @@ build-arch-stamp:
# Add here command to compile/build the package.
# Build first things.
# Build Xvnc
- make $(NUMJOBS) LDFLAGS="-lpng"
+ make $(NUMJOBS) LDFLAGS="-lpng" VERBOSE=1
make $(NUMJOBS) -C unix/xserver
touch build-arch-stamp
diff --git a/contrib/packages/deb/ubuntu-jammy/debian/rules b/contrib/packages/deb/ubuntu-jammy/debian/rules
index 1b4fd6f8..9ed05508 100644
--- a/contrib/packages/deb/ubuntu-jammy/debian/rules
+++ b/contrib/packages/deb/ubuntu-jammy/debian/rules
@@ -126,7 +126,7 @@ build-arch-stamp:
# Add here command to compile/build the package.
# Build first things.
# Build Xvnc
- make $(NUMJOBS) LDFLAGS="-lpng"
+ make $(NUMJOBS) LDFLAGS="-lpng" VERBOSE=1
make $(NUMJOBS) -C unix/xserver
touch build-arch-stamp
diff --git a/contrib/packages/deb/ubuntu-noble/debian/rules b/contrib/packages/deb/ubuntu-noble/debian/rules
index 1b4fd6f8..9ed05508 100644
--- a/contrib/packages/deb/ubuntu-noble/debian/rules
+++ b/contrib/packages/deb/ubuntu-noble/debian/rules
@@ -126,7 +126,7 @@ build-arch-stamp:
# Add here command to compile/build the package.
# Build first things.
# Build Xvnc
- make $(NUMJOBS) LDFLAGS="-lpng"
+ make $(NUMJOBS) LDFLAGS="-lpng" VERBOSE=1
make $(NUMJOBS) -C unix/xserver
touch build-arch-stamp
diff --git a/unix/vncserver/vncsession.c b/unix/vncserver/vncsession.c
index 0830e81a..79683ff9 100644
--- a/unix/vncserver/vncsession.c
+++ b/unix/vncserver/vncsession.c
@@ -134,7 +134,7 @@ begin_daemon(void)
static void
finish_daemon(void)
{
- write(daemon_pipe_fd, "+", 1);
+ if (write(daemon_pipe_fd, "+", 1) == -1) {}
close(daemon_pipe_fd);
daemon_pipe_fd = -1;
}
@@ -545,8 +545,12 @@ run_script(const char *username, const char *display, char **envp)
switch_user(pwent->pw_name, pwent->pw_uid, pwent->pw_gid);
- if (chdir(pwent->pw_dir) == -1)
- chdir("/");
+ if (chdir(pwent->pw_dir) == -1) {
+ syslog(LOG_CRIT, "chdir(\"%s\") failed: %s", pwent->pw_dir, strerror(errno));
+ // fallback to "/"
+ if (chdir("/") == -1)
+ syslog(LOG_CRIT, "chdir(\"%s\") failed: %s", "/", strerror(errno));
+ }
close_fds();
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
index 29cf4ca0..3db9bd64 100644
--- a/vncviewer/vncviewer.cxx
+++ b/vncviewer/vncviewer.cxx
@@ -607,7 +607,9 @@ createTunnel(const char *gatewayHost, const char *remoteHost,
cmd2 = strdup(cmd);
while ((percent = strchr(cmd2, '%')) != nullptr)
*percent = '$';
- system(cmd2);
+ int res = system(cmd2);
+ if (res != 0)
+ fprintf(stderr, "Failed to create tunnel: '%s' returned %d\n", cmd2, res);
free(cmd2);
}