VirtualBox

Changeset 37769 in vbox


Ignore:
Timestamp:
Jul 4, 2011 4:40:34 PM (14 years ago)
Author:
vboxsync
Message:

vga: fix resize problems caused by vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] overflow

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA.cpp

    r37725 r37769  
    11261126                cbLinePitch      = calc_line_pitch(cBPP, cX);
    11271127            Assert(cbLinePitch != 0);
    1128             uint16_t cVirtHeight = s->vram_size / cbLinePitch;
     1128            uint32_t cVirtHeight = s->vram_size / cbLinePitch;
    11291129            uint32_t offStart    = cbLinePitch * offY;
    11301130            if (cBPP == 4)
     
    11351135            s->vbe_line_offset = RT_MIN(cbLinePitch, s->vram_size);
    11361136            s->vbe_start_addr  = RT_MIN(offStart, s->vram_size);
    1137             s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] = cVirtHeight;
     1137
     1138            /* The VBE_DISPI_INDEX_VIRT_HEIGHT is used to prevent setting resolution bigger than VRAM permits
     1139             * it is used instead of VBE_DISPI_INDEX_YRES *only* in case
     1140             * s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] < s->vbe_regs[VBE_DISPI_INDEX_YRES]
     1141             * We can not simply do s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] = cVirtHeight since
     1142             * the cVirtHeight we calculated can exceed the 16bit value range
     1143             * instead we'll check if it's bigger than s->vbe_regs[VBE_DISPI_INDEX_YRES], and if yes,
     1144             * assign the s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] with a dummy UINT16_MAX value
     1145             * that is always bigger than s->vbe_regs[VBE_DISPI_INDEX_YRES]
     1146             * to just ensure the s->vbe_regs[VBE_DISPI_INDEX_YRES] is always used */
     1147            s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] = (cVirtHeight >= (uint32_t)s->vbe_regs[VBE_DISPI_INDEX_YRES]) ? UINT16_MAX : (uint16_t)cVirtHeight;
    11381148        }
    11391149    }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette