]> granicus.if.org Git - postgresql/commitdiff
Fix old bug in contrib/sslinfo: X509_NAME_to_text freed the BIO_s_mem buffer
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Nov 2008 14:57:46 +0000 (14:57 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Nov 2008 14:57:46 +0000 (14:57 +0000)
it was using too soon.  In a situation where pg_do_encoding_conversion is
a no-op, this led to garbage data returned.

In HEAD, also modify the code that's ensuring null termination to make it
a tad more obvious what's happening.

contrib/sslinfo/sslinfo.c

index 7236203d7d81894595216d71af167e19e981ea93..926877fdef9ce06ae924769d3dacfb7e0bbec2df 100644 (file)
@@ -4,7 +4,7 @@
  * Written by Victor B. Wagner <vitus@cryptocom.ru>, Cryptocom LTD
  * This file is distributed under BSD-style license.
  *
- * $PostgreSQL: pgsql/contrib/sslinfo/sslinfo.c,v 1.6 2007/02/27 23:48:06 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/sslinfo/sslinfo.c,v 1.6.2.1 2008/11/10 14:57:46 tgl Exp $
  */
 
 #include "postgres.h"
@@ -312,19 +312,14 @@ X509_NAME_to_text(X509_NAME *name)
                                                                                        size - 1,
                                                                                        PG_UTF8,
                                                                                        GetDatabaseEncoding());
-       BIO_free(membuf);
-
        outlen = strlen(dp);
        result = palloc(VARHDRSZ + outlen);
        memcpy(VARDATA(result), dp, outlen);
        SET_VARSIZE(result, VARHDRSZ + outlen);
 
-       /*
-        * pg_do_encoding_conversion has annoying habit of returning source
-        * pointer
-        */
        if (dp != sp)
                pfree(dp);
+       BIO_free(membuf);
 
        PG_RETURN_TEXT_P(result);
 }