Author: rfm
Date: Fri Apr  7 16:27:20 2017
New Revision: 40453

URL: http://svn.gna.org/viewcvs/gnustep?rev=40453&view=rev
Log:
Fix leak

Modified:
    libs/sqlclient/trunk/ChangeLog
    libs/sqlclient/trunk/SQLClient.m

Modified: libs/sqlclient/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/sqlclient/trunk/ChangeLog?rev=40453&r1=40452&r2=40453&view=diff
==============================================================================
--- libs/sqlclient/trunk/ChangeLog      (original)
+++ libs/sqlclient/trunk/ChangeLog      Fri Apr  7 16:27:20 2017
@@ -1,8 +1,14 @@
+2017-04-07 Richard Frith-Macdonald  <[email protected]>
+
+       * SQLClient.m:
+       Fix leak of SQLString instances caused by inheriting memory management
+       methods from the literal string class.
+
 2017-03-06 Richard Frith-Macdonald  <[email protected]>
 
-       SQLClient.h:
-       SQLClient.m:
-       SQLClientPool.m:
+       * SQLClient.h:
+       * SQLClient.m:
+       * SQLClientPool.m:
        Add new +literal: and -literal: methods to make a normal string into
        one recognised as suitable for use literally (ie without quoting) in
        an SQL query/statement.

Modified: libs/sqlclient/trunk/SQLClient.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/sqlclient/trunk/SQLClient.m?rev=40453&r1=40452&r2=40453&view=diff
==============================================================================
--- libs/sqlclient/trunk/SQLClient.m    (original)
+++ libs/sqlclient/trunk/SQLClient.m    Fri Apr  7 16:27:20 2017
@@ -992,6 +992,8 @@
       
       if (Nil == LitStringClass)
         {
+          Class root = [NSObject class];
+
           /* Find the literal string class used by the foundation library.
            */
           LitStringClass = object_getClass(@"test");
@@ -1001,6 +1003,22 @@
           SQLStringClass = (Class)objc_allocateClassPair(
             LitStringClass, "SQLString", 0);
           objc_registerClassPair(SQLStringClass);
+
+          /* The the NSObject memory management methods because the
+           * literal string doesn't get retained/released.
+           */
+          class_replaceMethod(SQLStringClass, @selector(retain),
+            class_getMethodImplementation(root, @selector(retain)),
+            "@@:");
+          class_replaceMethod(SQLStringClass, @selector(autorelease),
+            class_getMethodImplementation(root, @selector(autorelease)),
+            "@@:");
+          class_replaceMethod(SQLStringClass, @selector(release),
+            class_getMethodImplementation(root, @selector(release)),
+            "v@:");
+          class_replaceMethod(SQLStringClass, @selector(dealloc),
+            class_getMethodImplementation(root, @selector(dealloc)),
+            "v@:");
         }
 
       if (nil == null)


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to