| Bug #29123 | Connection String grows with each use resulting in OutOfMemoryException | ||
|---|---|---|---|
| Submitted: | 14 Jun 2007 22:44 | Modified: | 2 Jul 2007 5:06 | 
| Reporter: | mohit srivastava | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Connector / NET | Severity: | S1 (Critical) | 
| Version: | 5.0.7 | OS: | Windows | 
| Assigned to: | CPU Architecture: | Any | |
| Tags: | connector, Memory, outofmemoryexception | ||
   [19 Jun 2007 8:40]
   Tonci Grgin        
  Hi Mohit and thanks for your report. Verified as described with - MySQL server 5.0.44BK on WinXP Pro SP2 localhost - c/NET 5.0.8 and .NET fw 2.0 In 10th iteration output is: 10. initial catalog=test;user id=root;server=localhost;logging=false;pooling=false;connect timeout=30;Database=test;Database=test;Database=test;Database=test;Database=test;Database=test;Database=test;Database=test;Database=test;Database=test;Database=test
   [19 Jun 2007 8:41]
   Tonci Grgin        
  Test case:
for (int i = 0; i < 20; i++) {
    using (MySqlConnection conn = new MySqlConnection("Initial Catalog=test;User Id=root;"+
"server=localhost;Password=;Logging=false;pooling=false;Connect timeout = 30;")) 
    {
        conn.Open();
        Console.WriteLine(i+". "+conn.ConnectionString);
        conn.Close();
        conn.Dispose();
    }
}
 
   [19 Jun 2007 17:27]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/29127
   [19 Jun 2007 17:27]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/29127
   [19 Jun 2007 17:28]
   Reggie Burnett        
  Fixed in 5.0.8 and 5.1.3
   [19 Jun 2007 17:29]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/29128
   [19 Jun 2007 17:29]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/29128
   [2 Jul 2007 5:06]
   MC Brown        
  A note has been added to the 5.0.8 and 5.1.3 changelogs: Using the same connection string multiple times would result in Database=dbname appearing multiple times in the resulting string.


Description: In the following code, I simply try to use the same connection string multiple times. This is fairly typical usage. Each time, however, the connection string returned by MySqlConnection has an additional Database=caddr appended to it. The following code for (int i = 0; i < 10; i++) { using (MySqlConnection conn = new MySqlConnection("Initial Catalog=caddr;User Id=root;Password=<hidden>;Logging=false;Connect timeout=30;pooling=false;")) { conn.Open(); Console.WriteLine(conn.ConnectionString); } } erroneously outputs the following initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Dat abase=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Dat abase=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Dat abase=caddr;Database=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Dat abase=caddr;Database=caddr;Database=caddr;Database=caddr initial catalog=caddr;user id=root;logging=false;connect timeout=30;pooling=fals e;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr;Dat abase=caddr;Database=caddr;Database=caddr;Database=caddr;Database=caddr How to repeat: see above Suggested fix: This is a side effect of the connection string caching in the connector. One solution is to remove connection string caching. Alternatively, only allow Database=x to be appended once.