Qian Hong : gdiplus: Set outer pointer to NULL when image loading functions fail.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jul 11 13:37:32 CDT 2014


Module: wine
Branch: master
Commit: deb1f047a7dc1c3bc84ab4a0b6588d7b32a261c5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=deb1f047a7dc1c3bc84ab4a0b6588d7b32a261c5

Author: Qian Hong <qhong at codeweavers.com>
Date:   Fri Jul 11 15:55:53 2014 +0800

gdiplus: Set outer pointer to NULL when image loading functions fail.

---

 dlls/gdiplus/image.c       |  4 ++++
 dlls/gdiplus/tests/image.c | 30 +++++++++++++++++++++++++++---
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 20098ca..7964cd8 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -1387,6 +1387,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename,
     if(!filename || !bitmap)
         return InvalidParameter;
 
+    *bitmap = NULL;
+
     stat = GdipCreateStreamOnFile(filename, GENERIC_READ, &stream);
 
     if(stat != Ok)
@@ -2945,6 +2947,8 @@ GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR* filename,
     if (!filename || !image)
         return InvalidParameter;
 
+    *image = NULL;
+
     stat = GdipCreateStreamOnFile(filename, GENERIC_READ, &stream);
 
     if (stat != Ok)
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index db0bc6a..b88238b 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -374,24 +374,48 @@ static void test_GdipImageGetFrameDimensionsCount(void)
 static void test_LoadingImages(void)
 {
     GpStatus stat;
+    GpBitmap *bm;
+    GpImage *img;
+    static const WCHAR nonexistentW[] = {'n','o','n','e','x','i','s','t','e','n','t',0};
 
     stat = GdipCreateBitmapFromFile(0, 0);
     expect(InvalidParameter, stat);
 
-    stat = GdipCreateBitmapFromFile(0, (GpBitmap**)0xdeadbeef);
+    bm = (GpBitmap *)0xdeadbeef;
+    stat = GdipCreateBitmapFromFile(0, &bm);
     expect(InvalidParameter, stat);
+    ok(bm == (GpBitmap *)0xdeadbeef, "returned %p\n", bm);
+
+    bm = (GpBitmap *)0xdeadbeef;
+    stat = GdipCreateBitmapFromFile(nonexistentW, &bm);
+    todo_wine expect(InvalidParameter, stat);
+    ok(!bm, "returned %p\n", bm);
 
     stat = GdipLoadImageFromFile(0, 0);
     expect(InvalidParameter, stat);
 
-    stat = GdipLoadImageFromFile(0, (GpImage**)0xdeadbeef);
+    img = (GpImage *)0xdeadbeef;
+    stat = GdipLoadImageFromFile(0, &img);
     expect(InvalidParameter, stat);
+    ok(img == (GpImage *)0xdeadbeef, "returned %p\n", img);
+
+    img = (GpImage *)0xdeadbeef;
+    stat = GdipLoadImageFromFile(nonexistentW, &img);
+    todo_wine expect(OutOfMemory, stat);
+    ok(!img, "returned %p\n", img);
 
     stat = GdipLoadImageFromFileICM(0, 0);
     expect(InvalidParameter, stat);
 
-    stat = GdipLoadImageFromFileICM(0, (GpImage**)0xdeadbeef);
+    img = (GpImage *)0xdeadbeef;
+    stat = GdipLoadImageFromFileICM(0, &img);
     expect(InvalidParameter, stat);
+    ok(img == (GpImage *)0xdeadbeef, "returned %p\n", img);
+
+    img = (GpImage *)0xdeadbeef;
+    stat = GdipLoadImageFromFileICM(nonexistentW, &img);
+    todo_wine expect(OutOfMemory, stat);
+    ok(!img, "returned %p\n", img);
 }
 
 static void test_SavingImages(void)




More information about the wine-cvs mailing list