[haiku-commits] r40078 - haiku/trunk/src/system/boot/platform/bios_ia32

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 3 Jan 2011 00:14:10 +0100 (CET)

Author: bonefish
Date: 2011-01-03 00:14:10 +0100 (Mon, 03 Jan 2011)
New Revision: 40078
Changeset: http://dev.haiku-os.org/changeset/40078

Modified:
   haiku/trunk/src/system/boot/platform/bios_ia32/video.cpp
Log:
Fixed suspicious implicit sign extension computing the frame buffer size
(CIDs 8056, 8057, 8058).


Modified: haiku/trunk/src/system/boot/platform/bios_ia32/video.cpp
===================================================================
--- haiku/trunk/src/system/boot/platform/bios_ia32/video.cpp    2011-01-02 
23:03:01 UTC (rev 40077)
+++ haiku/trunk/src/system/boot/platform/bios_ia32/video.cpp    2011-01-02 
23:14:10 UTC (rev 40078)
@@ -461,10 +461,10 @@
                                   modeInfo.num_banks));
                        TRACE(("        mask: r: %d %d g: %d %d b: %d %d dcmi: 
%d\n",
                                   modeInfo.red_mask_size, 
modeInfo.red_field_position,
-                                  modeInfo.green_mask_size, 
modeInfo.green_field_position, 
+                                  modeInfo.green_mask_size, 
modeInfo.green_field_position,
                                   modeInfo.blue_mask_size, 
modeInfo.blue_field_position,
                                   modeInfo.direct_color_mode_info));
-                       
+
                        const uint32 requiredAttributes = MODE_ATTR_AVAILABLE
                                | MODE_ATTR_GRAPHICS_MODE | MODE_ATTR_COLOR_MODE
                                | MODE_ATTR_LINEAR_BUFFER;
@@ -808,8 +808,9 @@
                gKernelArgs.frame_buffer.height = modeInfo.height;
                gKernelArgs.frame_buffer.bytes_per_row = modeInfo.bytes_per_row;
                gKernelArgs.frame_buffer.depth = modeInfo.bits_per_pixel;
-               gKernelArgs.frame_buffer.physical_buffer.size = 
modeInfo.bytes_per_row
-                       * gKernelArgs.frame_buffer.height;
+               gKernelArgs.frame_buffer.physical_buffer.size
+                       = (phys_size_t)modeInfo.bytes_per_row
+                               * (phys_size_t)gKernelArgs.frame_buffer.height;
                gKernelArgs.frame_buffer.physical_buffer.start = 
modeInfo.physical_base;
        } else {
 fallback:
@@ -821,8 +822,8 @@
                gKernelArgs.frame_buffer.bytes_per_row = 80;
                gKernelArgs.frame_buffer.depth = 4;
                gKernelArgs.frame_buffer.physical_buffer.size
-                       = gKernelArgs.frame_buffer.width
-                       * gKernelArgs.frame_buffer.height / 2;
+                       = (phys_size_t)gKernelArgs.frame_buffer.width
+                               * (phys_size_t)gKernelArgs.frame_buffer.height 
/ 2;
                gKernelArgs.frame_buffer.physical_buffer.start = 0xa0000;
        }
 


Other related posts: