[PATCH v6 0/5] MR10480: gdiplus: Fix GdipGetImage* functions
In case HEMF (Handle to an Enhanced Metafile) is missing, we should return InvalidParameter. Additionally bounds were fixed for GdipGetImageBounds. -- v6: https://gitlab.winehq.org/wine/wine/-/merge_requests/10480
From: Bartosz Kosiorek <gang65@poczta.onet.pl> --- dlls/gdiplus/metafile.c | 4 ++-- dlls/gdiplus/tests/metafile.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c index a786297a40b..20adc83b95f 100644 --- a/dlls/gdiplus/metafile.c +++ b/dlls/gdiplus/metafile.c @@ -1709,8 +1709,8 @@ GpStatus METAFILE_GraphicsDeleted(GpMetafile* metafile) af_min->X = fmin(af_min->X, gdi_bounds_rc.left); af_min->Y = fmin(af_min->Y, gdi_bounds_rc.top); - af_max->X = fmax(af_max->X, gdi_bounds_rc.right); - af_max->Y = fmax(af_max->Y, gdi_bounds_rc.bottom); + af_max->X = fmax(af_max->X, gdi_bounds_rc.right + 1); + af_max->Y = fmax(af_max->Y, gdi_bounds_rc.bottom + 1); } bounds_rc.left = floorf(metafile->auto_frame_min.X * x_scale); diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c index 401b3ea6bac..23d2f50c6d7 100644 --- a/dlls/gdiplus/tests/metafile.c +++ b/dlls/gdiplus/tests/metafile.c @@ -1427,8 +1427,7 @@ static void test_nullframerect(void) { expect(UnitPixel, unit); expectf_(20.0, bounds.X, 0.05); expectf_(25.0, bounds.Y, 0.05); - expectf_(55.0, bounds.Width, 1.00); - todo_wine expectf_(55.0, bounds.Width, 0.05); + expectf_(55.0, bounds.Width, 0.05); expectf_(85.0, bounds.Height, 0.05); stat = GdipDisposeImage((GpImage*)metafile); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10480
From: Bartosz Kosiorek <gang65@poczta.onet.pl> In case HEMF (Handle to an Enhanced Metafile) is missing, we should return InvalidParameter --- dlls/gdiplus/image.c | 3 +++ dlls/gdiplus/tests/metafile.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 035db159d5b..38a0b27d18d 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -2243,6 +2243,9 @@ GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage *image, REAL *res) if(!image || !res) return InvalidParameter; + if((image->type == ImageTypeMetafile) && !((GpMetafile*)image)->hemf) + return InvalidParameter; + *res = image->xres; TRACE("(%p) <-- %0.2f\n", image, *res); diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c index 23d2f50c6d7..f610775adc0 100644 --- a/dlls/gdiplus/tests/metafile.c +++ b/dlls/gdiplus/tests/metafile.c @@ -1477,7 +1477,7 @@ static void test_pagetransform(void) return; stat = GdipGetImageHorizontalResolution((GpImage*)metafile, &dpix); - todo_wine expect(InvalidParameter, stat); + expect(InvalidParameter, stat); stat = GdipGetImageVerticalResolution((GpImage*)metafile, &dpiy); todo_wine expect(InvalidParameter, stat); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10480
From: Bartosz Kosiorek <gang65@poczta.onet.pl> In case HEMF (Handle to an Enhanced Metafile) is missing, we should return InvalidParameter --- dlls/gdiplus/image.c | 3 +++ dlls/gdiplus/tests/metafile.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 38a0b27d18d..d70d2a5be25 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -2321,6 +2321,9 @@ GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage *image, REAL *res) if(!image || !res) return InvalidParameter; + if((image->type == ImageTypeMetafile) && !((GpMetafile*)image)->hemf) + return InvalidParameter; + *res = image->yres; TRACE("(%p) <-- %0.2f\n", image, *res); diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c index f610775adc0..04b6eb02aad 100644 --- a/dlls/gdiplus/tests/metafile.c +++ b/dlls/gdiplus/tests/metafile.c @@ -1480,7 +1480,7 @@ static void test_pagetransform(void) expect(InvalidParameter, stat); stat = GdipGetImageVerticalResolution((GpImage*)metafile, &dpiy); - todo_wine expect(InvalidParameter, stat); + expect(InvalidParameter, stat); stat = GdipGetImageWidth((GpImage*)metafile, &width); todo_wine expect(InvalidParameter, stat); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10480
From: Bartosz Kosiorek <gang65@poczta.onet.pl> In case HEMF (Handle to an Enhanced Metafile) is missing, we should return InvalidParameter --- dlls/gdiplus/image.c | 4 ++++ dlls/gdiplus/tests/metafile.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index d70d2a5be25..f5f334f2605 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -2339,8 +2339,12 @@ GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width) return InvalidParameter; if(image->type == ImageTypeMetafile) + { + if(!((GpMetafile*)image)->hemf) + return InvalidParameter; *width = units_to_pixels(((GpMetafile*)image)->bounds.Width, ((GpMetafile*)image)->unit, image->xres, ((GpMetafile*)image)->printer_display); + } else if(image->type == ImageTypeBitmap) *width = ((GpBitmap*)image)->width; else diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c index 04b6eb02aad..11eac354dc7 100644 --- a/dlls/gdiplus/tests/metafile.c +++ b/dlls/gdiplus/tests/metafile.c @@ -1483,7 +1483,7 @@ static void test_pagetransform(void) expect(InvalidParameter, stat); stat = GdipGetImageWidth((GpImage*)metafile, &width); - todo_wine expect(InvalidParameter, stat); + expect(InvalidParameter, stat); stat = GdipGetImageHeight((GpImage*)metafile, &height); todo_wine expect(InvalidParameter, stat); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10480
From: Bartosz Kosiorek <gang65@poczta.onet.pl> In case HEMF (Handle to an Enhanced Metafile) is missing, we should return InvalidParameter --- dlls/gdiplus/image.c | 4 ++++ dlls/gdiplus/tests/metafile.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index f5f334f2605..d8a63a1d39a 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -2223,8 +2223,12 @@ GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height) return InvalidParameter; if(image->type == ImageTypeMetafile) + { + if(!((GpMetafile*)image)->hemf) + return InvalidParameter; *height = units_to_pixels(((GpMetafile*)image)->bounds.Height, ((GpMetafile*)image)->unit, image->yres, ((GpMetafile*)image)->printer_display); + } else if(image->type == ImageTypeBitmap) *height = ((GpBitmap*)image)->height; else diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c index 11eac354dc7..9ee052b23d3 100644 --- a/dlls/gdiplus/tests/metafile.c +++ b/dlls/gdiplus/tests/metafile.c @@ -1486,7 +1486,7 @@ static void test_pagetransform(void) expect(InvalidParameter, stat); stat = GdipGetImageHeight((GpImage*)metafile, &height); - todo_wine expect(InvalidParameter, stat); + expect(InvalidParameter, stat); stat = GdipGetImageGraphicsContext((GpImage*)metafile, &graphics); expect(Ok, stat); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10480
participants (2)
-
Bartosz Kosiorek -
Bartosz Kosiorek (@gang65)