< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_BitmapUtil.cpp

Print this page

        

@@ -244,21 +244,32 @@
 
     UINT width = bi.bmiHeader.biWidth;
     UINT height = abs(bi.bmiHeader.biHeight);
 
     BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage);
+    if (!buf) {
+        ::DeleteDC(hdc);
+        return NULL;
+    }
     bi.bmiHeader.biHeight = -(INT)height;
     ::GetDIBits(hdc, hBitmap, 0, height, buf,
             reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
 
     /* reserving memory for the worst case */
     if (!IS_SAFE_SIZE_MUL(width / 2 + 1, height)) {
-        throw std::bad_alloc();
+        ::DeleteDC(hdc);
+        free(buf);
+        return NULL;
     }
     RGNDATA * pRgnData = (RGNDATA *) SAFE_SIZE_STRUCT_ALLOC(safe_Malloc,
             sizeof(RGNDATAHEADER),
             sizeof(RECT), (width / 2 + 1) * height);
+    if (!pRgnData) {
+        ::DeleteDC(hdc);
+        free(buf);
+        return NULL;
+    }
     RGNDATAHEADER * pRgnHdr = (RGNDATAHEADER *) pRgnData;
     pRgnHdr->dwSize = sizeof(RGNDATAHEADER);
     pRgnHdr->iType = RDH_RECTANGLES;
     pRgnHdr->nRgnSize = 0;
     pRgnHdr->rcBound.top = 0;
< prev index next >