Fix another type of buffer overrun for segmented modes. The buffer index

was not taken modulo the window size in VGLClear().

Segmented modes also need a kernel fix to almost work.  The ioctl to set
the window origin is broken.

These bugs are rarely problems since non-VESA modes only need
segmentation to support multiple pages but libvgl doesn't support
multiple pages and treats these modes as non-segmented, and VESA modes
are usually mapped linearly except on old hardware so they really are
non-segmented.
This commit is contained in:
bde 2019-03-25 11:48:40 +00:00
parent e89e1927c7
commit 67852a43d0

View File

@ -535,7 +535,8 @@ VGLClear(VGLBitmap *object, u_long color)
VGLSetSegment(offset);
len = min(total - offset, VGLAdpInfo.va_window_size);
for (i = 0; i < len; i += object->PixelBytes)
bcopy(b, object->Bitmap + offset + i, object->PixelBytes);
bcopy(object->Bitmap + (offset + i) % VGLAdpInfo.va_window_size, b,
object->PixelBytes);
offset += len;
}
break;