diff --git a/src/r_portal.c b/src/r_portal.c
index 4825bb511..0c0a34b7d 100644
--- a/src/r_portal.c
+++ b/src/r_portal.c
@@ -200,7 +200,14 @@ static void Portal_ClipVisplane (const visplane_t* plane, portal_t* portal)
 
 	for (i = 0; i < end - start; i++)
 	{
-		portal->ceilingclip[i] = plane->top[i + start];
+		// Invalid column.
+		if (plane->top[i + start] == 65535)
+		{
+			portal->ceilingclip[i] = -1;
+			portal->floorclip[i] = -1;
+			continue;
+		}
+		portal->ceilingclip[i] = plane->top[i + start] - 1;
 		portal->floorclip[i] = plane->bottom[i + start] + 1;
 		portal->frontscale[i] = INT32_MAX;
 	}
@@ -220,6 +227,11 @@ void Portal_AddSkybox (const visplane_t* plane)
 	mapheader_t *mh;
 	portal_t* portal;
 
+	// Visplanes have 1-px pads on their sides (extra columns).
+	// Trim them, else it may render out of bounds.
+	if (end > viewwidth)
+		end = viewwidth;
+
 	if (!(start < end))
 		return;