@@ -1805,37 +1805,49 @@ pqConnectOptions2(PGconn *conn)
1805
1805
int len ;
1806
1806
1807
1807
len = pg_b64_dec_len (strlen (conn -> scram_client_key ));
1808
- /* Consider the zero-terminator */
1809
- if (len != SCRAM_MAX_KEY_LEN + 1 )
1808
+ conn -> scram_client_key_binary = malloc (len );
1809
+ if (!conn -> scram_client_key_binary )
1810
+ goto oom_error ;
1811
+ len = pg_b64_decode (conn -> scram_client_key , strlen (conn -> scram_client_key ),
1812
+ conn -> scram_client_key_binary , len );
1813
+ if (len < 0 )
1814
+ {
1815
+ libpq_append_conn_error (conn , "invalid SCRAM client key" );
1816
+ free (conn -> scram_client_key_binary );
1817
+ return false;
1818
+ }
1819
+ if (len != SCRAM_MAX_KEY_LEN )
1810
1820
{
1811
1821
libpq_append_conn_error (conn , "invalid SCRAM client key length: %d" , len );
1822
+ free (conn -> scram_client_key_binary );
1812
1823
return false;
1813
1824
}
1814
1825
conn -> scram_client_key_len = len ;
1815
- conn -> scram_client_key_binary = malloc (len );
1816
- if (!conn -> scram_client_key_binary )
1817
- goto oom_error ;
1818
- pg_b64_decode (conn -> scram_client_key , strlen (conn -> scram_client_key ),
1819
- conn -> scram_client_key_binary , len );
1820
1826
}
1821
1827
1822
1828
if (conn -> scram_server_key )
1823
1829
{
1824
1830
int len ;
1825
1831
1826
1832
len = pg_b64_dec_len (strlen (conn -> scram_server_key ));
1827
- /* Consider the zero-terminator */
1828
- if (len != SCRAM_MAX_KEY_LEN + 1 )
1833
+ conn -> scram_server_key_binary = malloc (len );
1834
+ if (!conn -> scram_server_key_binary )
1835
+ goto oom_error ;
1836
+ len = pg_b64_decode (conn -> scram_server_key , strlen (conn -> scram_server_key ),
1837
+ conn -> scram_server_key_binary , len );
1838
+ if (len < 0 )
1839
+ {
1840
+ libpq_append_conn_error (conn , "invalid SCRAM server key" );
1841
+ free (conn -> scram_server_key_binary );
1842
+ return false;
1843
+ }
1844
+ if (len != SCRAM_MAX_KEY_LEN )
1829
1845
{
1830
1846
libpq_append_conn_error (conn , "invalid SCRAM server key length: %d" , len );
1847
+ free (conn -> scram_server_key_binary );
1831
1848
return false;
1832
1849
}
1833
1850
conn -> scram_server_key_len = len ;
1834
- conn -> scram_server_key_binary = malloc (len );
1835
- if (!conn -> scram_server_key_binary )
1836
- goto oom_error ;
1837
- pg_b64_decode (conn -> scram_server_key , strlen (conn -> scram_server_key ),
1838
- conn -> scram_server_key_binary , len );
1839
1851
}
1840
1852
1841
1853
/*
0 commit comments