Reviewed by Eric.
- test for http://bugzilla.opendarwin.org/show_bug.cgi?id=8026
A particular animated SVG crashes in filter code
<rdar://problem/
4494775> A particular animated SVG crashes in filter code
* svg/custom/empty-merge-expected.checksum: Added.
* svg/custom/empty-merge-expected.png: Added.
* svg/custom/empty-merge-expected.txt: Added.
* svg/custom/empty-merge.svg: Added.
WebCore:
Reviewed by Eric.
- fix http://bugzilla.opendarwin.org/show_bug.cgi?id=8026
A particular animated SVG crashes in filter code
<rdar://problem/
4494775> A particular animated SVG crashes in filter code
- fix some code that is not handling references correctly for GC
Test: svg/custom/empty-merge.svg
* kcanvas/device/quartz/KCanvasFilterQuartz.mm:
(WebCore::KCanvasFilterQuartz::KCanvasFilterQuartz): Use KWQRetainNSRelease to
properly retain a reference to an Objective-C object in a C++ class.
(WebCore::KCanvasFilterQuartz::~KCanvasFilterQuartz): Use KWQRelease instead of
release.
(WebCore::KCanvasFilterQuartz::prepareFilter): Use KWQRetain instead of retain.
(WebCore::KCanvasFilterQuartz::applyFilter): Use KWQRelease instead of release.
(WebCore::KCanvasFilterQuartz::imageForName): Use objectForKey: instead of
valueForKey: on the dictionary to sidestep a bug in valueForKey: on empty strings
and because what we're doing with a dictionary here has nothing to do with
key value encoding.
* kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
(WebCore::KRenderingDeviceContextQuartz::~KRenderingDeviceContextQuartz):
Use KWQRelease instead of release.
(WebCore::KRenderingDeviceContextQuartz::nsGraphicsContext): Use KWQRetain
instead of retain to properly retain a reference to an Objective-C object
in a C++ class.
* platform/mac/ImageMac.mm:
(WebCore::Image::invalidateNativeData): Use CFRelease instead of release.
(WebCore::Image::getNSImage): Use KWQRetainNSRelease to properly retain
a reference to an Objective-C object in a C++ class.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13566
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2006-03-29 Darin Adler <darin@apple.com>
+
+ Reviewed by Eric.
+
+ - test for http://bugzilla.opendarwin.org/show_bug.cgi?id=8026
+ A particular animated SVG crashes in filter code
+ <rdar://problem/4494775> A particular animated SVG crashes in filter code
+
+ * svg/custom/empty-merge-expected.checksum: Added.
+ * svg/custom/empty-merge-expected.png: Added.
+ * svg/custom/empty-merge-expected.txt: Added.
+ * svg/custom/empty-merge.svg: Added.
+
2006-03-29 Geoffrey Garen <ggaren@apple.com>
- Layout test for <rdar://problem/4477126> TOT REGRESSION: with
--- /dev/null
+d73791f973c72efa8e996b1630f872cb
+\ No newline at end of file
--- /dev/null
+KCanvasResource {id="MyFilter" [type=FILTER] [bounding box=at (0,0) size 100x100] [bounding box mode=0] [effect bounding box mode=0] [effects=[[type=MERGE] [subregion="at (0,0) size 100x100"][merge inputs=[]]]]}
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+ KCanvasContainer {svg} at (46.56,-0.94) size 191.76x191.76
+ KCanvasItem {rect} at (48.44,0.94) size 189.88x189.88 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#888888]}] [data="M1.00,1.00L101.00,1.00L101.00,101.00L1.00,101.00"]
+ KCanvasContainer {g} at (46.56,-0.94) size 189.88x189.88 [filter=#MyFilter]
+ KCanvasItem {rect} at (46.56,-0.94) size 189.88x189.88 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00L100.00,0.00L100.00,100.00L0.00,100.00"]
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="7.5cm" height="5cm" viewBox="0 0 100 100"
+ xmlns="http://www.w3.org/2000/svg" version="1.1">
+ <title>TestCase for empty feMerge component</title>
+ <defs>
+ <filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="100" height="100">
+ <feMerge>
+ <feMergeNode/>
+ </feMerge>
+ </filter>
+ </defs>
+ <rect x="1" y="1" width="100" height="100" fill="#888888" stroke="blue" />
+ <g filter="url(#MyFilter)" >
+ <rect fill="green" stroke="blue" x="0" y="0" width="100" height="100"/>
+ </g>
+</svg>
+2006-03-29 Darin Adler <darin@apple.com>
+
+ Reviewed by Eric.
+
+ - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=8026
+ A particular animated SVG crashes in filter code
+ <rdar://problem/4494775> A particular animated SVG crashes in filter code
+
+ - fix some code that is not handling references correctly for GC
+
+ Test: svg/custom/empty-merge.svg
+
+ * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
+ (WebCore::KCanvasFilterQuartz::KCanvasFilterQuartz): Use KWQRetainNSRelease to
+ properly retain a reference to an Objective-C object in a C++ class.
+ (WebCore::KCanvasFilterQuartz::~KCanvasFilterQuartz): Use KWQRelease instead of
+ release.
+ (WebCore::KCanvasFilterQuartz::prepareFilter): Use KWQRetain instead of retain.
+ (WebCore::KCanvasFilterQuartz::applyFilter): Use KWQRelease instead of release.
+ (WebCore::KCanvasFilterQuartz::imageForName): Use objectForKey: instead of
+ valueForKey: on the dictionary to sidestep a bug in valueForKey: on empty strings
+ and because what we're doing with a dictionary here has nothing to do with
+ key value encoding.
+
+ * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
+ (WebCore::KRenderingDeviceContextQuartz::~KRenderingDeviceContextQuartz):
+ Use KWQRelease instead of release.
+ (WebCore::KRenderingDeviceContextQuartz::nsGraphicsContext): Use KWQRetain
+ instead of retain to properly retain a reference to an Objective-C object
+ in a C++ class.
+
+ * platform/mac/ImageMac.mm:
+ (WebCore::Image::invalidateNativeData): Use CFRelease instead of release.
+ (WebCore::Image::getNSImage): Use KWQRetainNSRelease to properly retain
+ a reference to an Objective-C object in a C++ class.
+
2006-03-29 Geoffrey Garen <ggaren@apple.com>
Reviewed by Darin.
#if SVG_SUPPORT
#import "KCanvasFilterQuartz.h"
+#import "BlockExceptions.h"
#import "CachedImage.h"
+#import "FoundationExtras.h"
#import "Image.h"
#import "IntRect.h"
#import "KCanvasMatrix.h"
#import "KCanvasRenderingStyle.h"
#import "KRenderingDeviceQuartz.h"
-#import "BlockExceptions.h"
#import "QuartzSupport.h"
#import "WKArithmeticFilter.h"
#import "WKDiffuseLightingFilter.h"
return [CIVector vectorWithX:point.x() Y:point.y()];
}
-KCanvasFilterQuartz::KCanvasFilterQuartz() : m_filterCIContext(0), m_filterCGLayer(0), m_imagesByName(0)
+KCanvasFilterQuartz::KCanvasFilterQuartz() : m_filterCIContext(0), m_filterCGLayer(0)
{
- m_imagesByName = [[NSMutableDictionary alloc] init];
+ m_imagesByName = KWQRetainNSRelease([[NSMutableDictionary alloc] init]);
}
KCanvasFilterQuartz::~KCanvasFilterQuartz()
{
- [m_imagesByName release];
+ ASSERT(!m_filterCGLayer);
+ ASSERT(!m_filterCIContext);
+ KWQRelease(m_imagesByName);
}
void KCanvasFilterQuartz::prepareFilter(const FloatRect &bbox)
if (useSoftware)
contextOptions = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], kCIContextUseSoftwareRenderer, nil];
- m_filterCIContext = [[CIContext contextWithCGContext:cgContext options:contextOptions] retain];
+ m_filterCIContext = KWQRetain([CIContext contextWithCGContext:cgContext options:contextOptions]);
m_filterCGLayer = [m_filterCIContext createCGLayerWithSize:CGRect(bbox).size info:NULL];
KRenderingDeviceContext *filterContext = new KRenderingDeviceContextQuartz(CGLayerGetContext(m_filterCGLayer));
}
CGLayerRelease(m_filterCGLayer);
- [m_filterCIContext release];
+ m_filterCGLayer = 0;
+
+ KWQRelease(m_filterCIContext);
+ m_filterCIContext = 0;
}
NSArray *KCanvasFilterQuartz::getCIFilterStack(CIImage *inputImage)
CIImage *KCanvasFilterQuartz::imageForName(const DeprecatedString& name) const
{
- return [m_imagesByName valueForKey:name.getNSString()];
+ return [m_imagesByName objectForKey:name.getNSString()];
}
void KCanvasFilterQuartz::setImageForName(CIImage *image, const DeprecatedString &name)
#include "config.h"
#if SVG_SUPPORT
-#import "KCanvasPathQuartz.h"
#import "KRenderingDeviceQuartz.h"
-#import "KCanvasMaskerQuartz.h"
-#import "KCanvasResourcesQuartz.h"
-#import "KCanvasFilterQuartz.h"
-#import "KRenderingPaintServerQuartz.h"
-#import "QuartzSupport.h"
-#import "kcanvas/KCanvas.h"
-#import "KCanvasMatrix.h"
+#import "FoundationExtras.h"
+#import "KCanvasFilterQuartz.h"
#import "KCanvasItemQuartz.h"
+#import "KCanvasMaskerQuartz.h"
+#import "KCanvasMatrix.h"
+#import "KCanvasPathQuartz.h"
+#import "KCanvasResourcesQuartz.h"
#import "KRenderingFillPainter.h"
+#import "KRenderingPaintServerQuartz.h"
#import "KRenderingStrokePainter.h"
-
-#import <AppKit/NSGraphicsContext.h>
-
#import "Logging.h"
+#import "QuartzSupport.h"
+#import "RenderCanvas.h"
+#import <Cocoa/Cocoa.h>
namespace WebCore {
KRenderingDeviceContextQuartz::~KRenderingDeviceContextQuartz()
{
CGContextRelease(m_cgContext);
- [m_nsGraphicsContext release];
+ KWQRelease(m_nsGraphicsContext);
}
KCanvasMatrix KRenderingDeviceContextQuartz::concatCTM(const KCanvasMatrix &worldMatrix)
NSGraphicsContext *KRenderingDeviceContextQuartz::nsGraphicsContext()
{
if (!m_nsGraphicsContext && m_cgContext)
- m_nsGraphicsContext = [[NSGraphicsContext graphicsContextWithGraphicsPort:m_cgContext flipped:YES] retain];
+ m_nsGraphicsContext = KWQRetain([NSGraphicsContext graphicsContextWithGraphicsPort:m_cgContext flipped:YES]);
return m_nsGraphicsContext;
}
*/
#import "config.h"
-#import <kxmlcore/Vector.h>
+#import "Image.h"
+
#import "DeprecatedArray.h"
-#import "IntSize.h"
#import "FloatRect.h"
-#import "Image.h"
+#import "FoundationExtras.h"
+#import "IntSize.h"
#import "PDFDocumentImage.h"
#import "PlatformString.h"
-
#import "WebCoreImageRendererFactory.h"
+#import <kxmlcore/Vector.h>
namespace WebCore {
return;
if (m_nsImage) {
- [m_nsImage release];
+ CFRelease(m_nsImage);
m_nsImage = 0;
}
if (!data)
return 0;
- m_nsImage = [[NSImage alloc] initWithData:(NSData*)data];
+ m_nsImage = KWQRetainNSRelease([[NSImage alloc] initWithData:(NSData*)data]);
return m_nsImage;
}