From 38185987b5d1f8152f0e234314517ce7a471fd31 Mon Sep 17 00:00:00 2001
From: Janus <janus2@ymail.com>
Date: Fri, 30 Nov 2012 22:21:33 +0000
Subject: [PATCH] Fix #7736. Avoid memory corruption
---
src/apps/showimage/ShowImageView.cpp | 11 +++++++----
src/apps/showimage/ShowImageView.h | 3 ++-
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/apps/showimage/ShowImageView.cpp b/src/apps/showimage/ShowImageView.cpp
index e6d9a70..d82d3c8 100644
a
|
b
|
ShowImageView::SetImage(const BMessage* message)
|
347 | 347 | || message->FindRef("ref", &ref) != B_OK || bitmap == NULL) |
348 | 348 | return B_ERROR; |
349 | 349 | |
350 | | status_t status = SetImage(&ref, bitmap); |
| 350 | BitmapOwner* bitmapOwner; |
| 351 | message->FindPointer("bitmapOwner", (void**)&bitmapOwner); |
| 352 | |
| 353 | status_t status = SetImage(&ref, bitmap, bitmapOwner); |
351 | 354 | if (status == B_OK) { |
352 | 355 | fFormatDescription = message->FindString("type"); |
353 | 356 | fMimeType = message->FindString("mime"); |
354 | | |
355 | | message->FindPointer("bitmapOwner", (void**)&fBitmapOwner); |
356 | 357 | } |
357 | 358 | |
358 | 359 | return status; |
… |
… |
ShowImageView::SetImage(const BMessage* message)
|
360 | 361 | |
361 | 362 | |
362 | 363 | status_t |
363 | | ShowImageView::SetImage(const entry_ref* ref, BBitmap* bitmap) |
| 364 | ShowImageView::SetImage(const entry_ref* ref, BBitmap* bitmap, |
| 365 | BitmapOwner* bitmapOwner) |
364 | 366 | { |
365 | 367 | // Delete the old one, and clear everything |
366 | 368 | fUndo.Clear(); |
… |
… |
ShowImageView::SetImage(const entry_ref* ref, BBitmap* bitmap)
|
369 | 371 | _DeleteBitmap(); |
370 | 372 | |
371 | 373 | fBitmap = bitmap; |
| 374 | fBitmapOwner = bitmapOwner; |
372 | 375 | if (ref == NULL) |
373 | 376 | fCurrentRef.device = -1; |
374 | 377 | else |
diff --git a/src/apps/showimage/ShowImageView.h b/src/apps/showimage/ShowImageView.h
index b14985b..bdf4d10 100644
a
|
b
|
public:
|
52 | 52 | void SetTrackerMessenger( |
53 | 53 | const BMessenger& trackerMessenger); |
54 | 54 | status_t SetImage(const BMessage* message); |
55 | | status_t SetImage(const entry_ref* ref, BBitmap* bitmap); |
| 55 | status_t SetImage(const entry_ref* ref, BBitmap* bitmap, |
| 56 | BitmapOwner* bitmapOwner); |
56 | 57 | const entry_ref* Image() const { return &fCurrentRef; } |
57 | 58 | BBitmap* Bitmap(); |
58 | 59 | |