From 71bbe6ca9cac9bf853a36d5ce8744ce42f1c452b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 12 Jun 2014 07:37:48 +0100 Subject: [PATCH] rackt/draw: fix internal error on too-large bitmap --- .../draw-lib/racket/draw/private/bitmap.rkt | 25 +++++++++++-------- pkgs/gui-pkgs/gui-test/tests/gracket/dc.rktl | 5 ++++ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pkgs/draw-pkgs/draw-lib/racket/draw/private/bitmap.rkt b/pkgs/draw-pkgs/draw-lib/racket/draw/private/bitmap.rkt index 80bdad1812..6199e7c019 100644 --- a/pkgs/draw-pkgs/draw-lib/racket/draw/private/bitmap.rkt +++ b/pkgs/draw-pkgs/draw-lib/racket/draw/private/bitmap.rkt @@ -196,17 +196,22 @@ (max (*i scale h) 1))]) (cairo_surface_flush s) (cond - [b&w? - ;; Init transparent white: - (transparent-white! s w h)] - [alpha? - ;; Init transparent: - (bytes-fill! (cairo_image_surface_get_data s) 0)] + [(cairo_image_surface_get_data s) + (cond + [b&w? + ;; Init transparent white: + (transparent-white! s w h)] + [alpha? + ;; Init transparent: + (bytes-fill! (cairo_image_surface_get_data s) 0)] + [else + ;; Init all white, 255 alpha: + (bytes-fill! (cairo_image_surface_get_data s) 255)]) + (cairo_surface_mark_dirty s) + s] [else - ;; Init all white, 255 alpha: - (bytes-fill! (cairo_image_surface_get_data s) 255)]) - (cairo_surface_mark_dirty s) - s) + ;; bitmap creation failed + #f])) #f (* 1.0 scale))] [([(make-alts path-string? input-port?) filename] diff --git a/pkgs/gui-pkgs/gui-test/tests/gracket/dc.rktl b/pkgs/gui-pkgs/gui-test/tests/gracket/dc.rktl index a7459986df..c6808de5a0 100644 --- a/pkgs/gui-pkgs/gui-test/tests/gracket/dc.rktl +++ b/pkgs/gui-pkgs/gui-test/tests/gracket/dc.rktl @@ -811,6 +811,11 @@ load-file p))) +;; ---------------------------------------- +;; No error on too-large bitmap: + +(st #f (make-bitmap 1000000 1000000) ok?) + ;; ---------------------------------------- (report-errs)