From a34324c5a2bda4c55546a6cacd96cbb59cf2ae91 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20D=C3=B6ring?= <simon.doering@stud.hs-bochum.de>
Date: Tue, 5 Jan 2021 14:38:21 +0100
Subject: [PATCH] Fix bug that crashed noVNC when noVNC canvas was null

---
 novnc/app/camera-receiver.js | 64 +++++++++++++++++++-----------------
 1 file changed, 34 insertions(+), 30 deletions(-)

diff --git a/novnc/app/camera-receiver.js b/novnc/app/camera-receiver.js
index 48f342b..12d253b 100644
--- a/novnc/app/camera-receiver.js
+++ b/novnc/app/camera-receiver.js
@@ -408,36 +408,40 @@ document.addEventListener('DOMContentLoaded', function() {
 
     function adjustVideoGeometry() {
         var canvas = document.querySelector('canvas');
-        var canvasRect = canvas.getBoundingClientRect();
-        var vncWidth = canvas.width;
-        var vncHeight = canvas.height;
-        var canvasWidth = canvasRect.width;
-        var canvasHeight = canvasRect.height;
-        var canvasX = canvasRect.x;
-        var canvasY = canvasRect.y
-        if (
-            vncWidth !== previousCanvasGeometryState.vncWidth ||
-            vncHeight !== previousCanvasGeometryState.vncHeight ||
-            canvasWidth !== previousCanvasGeometryState.canvasWidth ||
-            canvasHeight !== previousCanvasGeometryState.canvasHeight ||
-            canvasX !== previousCanvasGeometryState.canvasX ||
-            canvasY !== previousCanvasGeometryState.canvasY
-        ) {
-            Object.keys(videoGeometryParams).forEach(function(slot) {
-                if (videoActiveGeometry[slot] === 'set_geometry_relative_to_canvas') {
-                    var params = videoGeometryParams[slot];
-                    handleSetGeometryRelativeToCanvas(
-                        document.getElementById('camera-feed-' + slot),
-                        slot,
-                        params.origin,
-                        params.x,
-                        params.y,
-                        params.w,
-                        params.h,
-                        params.z
-                    );
-                }
-            });
+        if (canvas) {
+            var canvasRect = canvas.getBoundingClientRect();
+            var vncWidth = canvas.width;
+            var vncHeight = canvas.height;
+            var canvasWidth = canvasRect.width;
+            var canvasHeight = canvasRect.height;
+            var canvasX = canvasRect.x;
+            var canvasY = canvasRect.y
+            if (
+                vncWidth !== previousCanvasGeometryState.vncWidth ||
+                vncHeight !== previousCanvasGeometryState.vncHeight ||
+                canvasWidth !== previousCanvasGeometryState.canvasWidth ||
+                canvasHeight !== previousCanvasGeometryState.canvasHeight ||
+                canvasX !== previousCanvasGeometryState.canvasX ||
+                canvasY !== previousCanvasGeometryState.canvasY
+            ) {
+                Object.keys(videoGeometryParams).forEach(function(slot) {
+                    if (videoActiveGeometry[slot] === 'set_geometry_relative_to_canvas') {
+                        var params = videoGeometryParams[slot];
+                        handleSetGeometryRelativeToCanvas(
+                            document.getElementById('camera-feed-' + slot),
+                            slot,
+                            params.origin,
+                            params.x,
+                            params.y,
+                            params.w,
+                            params.h,
+                            params.z
+                        );
+                    }
+                });
+            }
+        } else {
+            console.error('adjustVideoGeometry canvas was null');
         }
     }
 });
-- 
GitLab