{"id":1515,"date":"2013-03-06T16:04:49","date_gmt":"2013-03-06T14:04:49","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=1515"},"modified":"2013-06-13T14:32:47","modified_gmt":"2013-06-13T12:32:47","slug":"second-cdatabase-bug-in-mfc-in-visual-studio-2012","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/","title":{"rendered":"Second CDatabase bug in MFC in Visual Studio 2012"},"content":{"rendered":"<p>I was <a href=\"http:\/\/mariusbancila.ro\/blog\/2013\/02\/15\/cdatabase-bug-in-mfc-in-vs2012\/\">writing recently<\/a> about an MFC bug in CDatabase class in Visual Studio 2012. In the meanwhile I have stumbled upon an even greater bug (check this report on <a href=\"http:\/\/connect.microsoft.com\/VisualStudio\/feedback\/details\/760371\/localfree-called-twice-in-cdatabase-mfc-11\">Connect<\/a> for the details): when the OpenEx function fails (wrong credentials, service not reachable, machine is shot down etc.) it corrupts memory. What happen next is chance. I don&#8217;t know when a fix will be available, but until that happens there is a workaround for this. Just like for the previous bug, you have to derive CDatabase and override OpenEx method, copying the original implementation from the MFC sources and adding one more line to null the pointer to already released memory. So, I&#8217;ll extend my previous CDatabaseEx class to the following implementation:<\/p>\n<pre class=\"cpp\" name=\"code\">\r\nclass CDatabaseEx : public CDatabase  \r\n{  \r\npublic:  \r\n   CString GetConnectEx()  \r\n   {  \r\n      CString strConnect = m_strConnect;  \r\n  \r\n      if (strConnect.GetLength() == 0)  \r\n      {  \r\n         DATA_BLOB connectBlob;  \r\n         if (CryptUnprotectData(&m_blobConnect, NULL, NULL, NULL, NULL, 0, &connectBlob))  \r\n         {  \r\n            strConnect = (LPTSTR)connectBlob.pbData;  \r\n            LocalFree(connectBlob.pbData);  \r\n         }  \r\n      }  \r\n  \r\n      return strConnect;  \r\n   }\r\n\r\n   virtual BOOL OpenEx(LPCTSTR lpszConnectString, DWORD dwOptions = 0)\r\n   {\r\n     ENSURE_VALID(this);\r\n     ENSURE_ARG(lpszConnectString == NULL || AfxIsValidString(lpszConnectString));\r\n     ENSURE_ARG(!(dwOptions & noOdbcDialog && dwOptions & forceOdbcDialog));\r\n\r\n     \/\/ Exclusive access not supported.\r\n     ASSERT(!(dwOptions & openExclusive));\r\n\r\n     m_bUpdatable = !(dwOptions & openReadOnly);\r\n\r\n     TRY\r\n     {\r\n        m_strConnect = lpszConnectString;\r\n\r\n        DATA_BLOB connectBlob;\r\n        connectBlob.pbData = (BYTE *)(LPCTSTR)m_strConnect;\r\n        connectBlob.cbData = (DWORD)(AtlStrLen(m_strConnect) + 1) * sizeof(TCHAR);\r\n        if (CryptProtectData(&connectBlob, NULL, NULL, NULL, NULL, 0, &m_blobConnect))\r\n        {\r\n           SecureZeroMemory((BYTE *)(LPCTSTR)m_strConnect, m_strConnect.GetLength() * sizeof(TCHAR));\r\n           m_strConnect.Empty();\r\n        }\r\n\r\n        \/\/ Allocate the HDBC and make connection\r\n        AllocConnect(dwOptions);\r\n        if(!Connect(dwOptions))\r\n        {\r\n           m_blobConnect.pbData = NULL;\r\n           return FALSE;\r\n        }\r\n\r\n        \/\/ Verify support for required functionality and cache info\r\n        VerifyConnect();\r\n        GetConnectInfo();\r\n     }\r\n     CATCH_ALL(e)\r\n     {\r\n        \/\/ HERE IT IS, the workaround (hopefully temporary) for MFC bug with OpenEx corrupting memory\r\n        \/\/ http:\/\/connect.microsoft.com\/VisualStudio\/feedback\/details\/760371\/localfree-called-twice-in-cdatabase-mfc-11\r\n        m_blobConnect.pbData = NULL;\r\n        Free();\r\n        THROW_LAST();\r\n     }\r\n     END_CATCH_ALL\r\n\r\n     return TRUE;\r\n   }\r\n};  \r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>I was writing recently about an MFC bug in CDatabase class in Visual Studio 2012. In the meanwhile I have stumbled upon an even greater bug (check this report on Connect for the details): when the OpenEx function fails (wrong credentials, service not reachable, machine is shot down etc.) it corrupts memory. What happen next &#8230; <a title=\"Second CDatabase bug in MFC in Visual Studio 2012\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/\" aria-label=\"Read more about Second CDatabase bug in MFC in Visual Studio 2012\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[7,12],"tags":[348,451,352,453,353,317],"class_list":["post-1515","post","type-post","status-publish","format-standard","hentry","category-c","category-mfc","tag-bug","tag-c","tag-cdatabase","tag-mfc","tag-openex","tag-vs2012"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"mfc,c++,vs2012,bug,cdatabase,openex\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Second CDatabase bug in MFC in Visual Studio 2012\" \/>\n\t\t<meta property=\"og:description\" content=\"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2013-03-06T14:04:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2013-06-13T12:32:47+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Second CDatabase bug in MFC in Visual Studio 2012\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#article\",\"name\":\"Second CDatabase bug in MFC in Visual Studio 2012\",\"headline\":\"Second CDatabase bug in MFC in Visual Studio 2012\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"datePublished\":\"2013-03-06T16:04:49+02:00\",\"dateModified\":\"2013-06-13T14:32:47+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":4,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#webpage\"},\"articleSection\":\"C++, MFC, bug, C++, CDatabase, MFC, OpenEx, VS2012\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"name\":\"C++\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"position\":4,\"name\":\"C++\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/mfc\\\/#listItem\",\"name\":\"MFC\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/mfc\\\/#listItem\",\"position\":5,\"name\":\"MFC\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/mfc\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#listItem\",\"name\":\"Second CDatabase bug in MFC in Visual Studio 2012\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"name\":\"C++\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#listItem\",\"position\":6,\"name\":\"Second CDatabase bug in MFC in Visual Studio 2012\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/mfc\\\/#listItem\",\"name\":\"MFC\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/\",\"name\":\"Second CDatabase bug in MFC in Visual Studio 2012\",\"description\":\"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2013\\\/03\\\/06\\\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2013-03-06T16:04:49+02:00\",\"dateModified\":\"2013-06-13T14:32:47+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Second CDatabase bug in MFC in Visual Studio 2012","description":"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/","robots":"max-image-preview:large","keywords":"mfc,c++,vs2012,bug,cdatabase,openex","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#article","name":"Second CDatabase bug in MFC in Visual Studio 2012","headline":"Second CDatabase bug in MFC in Visual Studio 2012","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"datePublished":"2013-03-06T16:04:49+02:00","dateModified":"2013-06-13T14:32:47+02:00","inLanguage":"en-US","commentCount":4,"mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#webpage"},"articleSection":"C++, MFC, bug, C++, CDatabase, MFC, OpenEx, VS2012"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","name":"C++"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","position":4,"name":"C++","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/#listItem","name":"MFC"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/#listItem","position":5,"name":"MFC","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#listItem","name":"Second CDatabase bug in MFC in Visual Studio 2012"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","name":"C++"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#listItem","position":6,"name":"Second CDatabase bug in MFC in Visual Studio 2012","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/#listItem","name":"MFC"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/","name":"Second CDatabase bug in MFC in Visual Studio 2012","description":"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2013-03-06T16:04:49+02:00","dateModified":"2013-06-13T14:32:47+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"Second CDatabase bug in MFC in Visual Studio 2012","og:description":"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.","og:url":"https:\/\/mariusbancila.ro\/blog\/2013\/03\/06\/second-cdatabase-bug-in-mfc-in-visual-studio-2012\/","article:published_time":"2013-03-06T14:04:49+00:00","article:modified_time":"2013-06-13T12:32:47+00:00","twitter:card":"summary","twitter:title":"Second CDatabase bug in MFC in Visual Studio 2012","twitter:description":"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails."},"aioseo_meta_data":{"post_id":"1515","title":"Second CDatabase bug in MFC in Visual Studio 2012","description":"A workaround for MFC11 bug in CDatabase that corrupts memory when OpenEx fails.","keywords":[{"label":"MFC","value":"MFC"},{"label":"C++","value":"C++"},{"label":"VS2012","value":"VS2012"},{"label":"bug","value":"bug"},{"label":"CDatabase","value":"CDatabase"},{"label":"OpenEx","value":"OpenEx"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:12:20","updated":"2025-12-12 07:39:24","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":4,"uagb_excerpt":"I was writing recently about an MFC bug in CDatabase class in Visual Studio 2012. In the meanwhile I have stumbled upon an even greater bug (check this report on Connect for the details): when the OpenEx function fails (wrong credentials, service not reachable, machine is shot down etc.) it corrupts memory. What happen next&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">MFC<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">MFC<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">bug<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">CDatabase<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">MFC<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">OpenEx<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/mfc\/\" class=\"advgb-post-tax-term\">VS2012<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">bug<\/span>","<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">CDatabase<\/span>","<span class=\"advgb-post-tax-term\">MFC<\/span>","<span class=\"advgb-post-tax-term\">OpenEx<\/span>","<span class=\"advgb-post-tax-term\">VS2012<\/span>"]}},"comment_count":"4","relative_dates":{"created":"Posted 14 years ago","modified":"Updated 13 years ago"},"absolute_dates":{"created":"Posted on March 6, 2013","modified":"Updated on June 13, 2013"},"absolute_dates_time":{"created":"Posted on March 6, 2013 4:04 pm","modified":"Updated on June 13, 2013 2:32 pm"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-or","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=1515"}],"version-history":[{"count":5,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1515\/revisions"}],"predecessor-version":[{"id":1553,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1515\/revisions\/1553"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=1515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=1515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=1515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}