Skip to content

Commit 4f31da0

Browse files
authored
fix(config): reject empty TOML sslmode before DSN fallback (#451)
1 parent c02dfc8 commit 4f31da0

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

‎src/config/__tests__/toml-loader.test.ts‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ describe('TOML Configuration Tests', () => {
2929
// Ignore cleanup errors
3030
}
3131
process.argv = originalArgv;
32+
vi.unstubAllEnvs();
3233
});
3334

3435
describe('loadTomlConfig', () => {
@@ -562,6 +563,22 @@ sslmode = "invalid"
562563
expect(() => loadTomlConfig()).toThrow("invalid sslmode 'invalid'");
563564
});
564565

566+
it.each([
567+
['literal', '', 'disable'],
568+
['environment', '${TEST_SSLMODE}', 'require'],
569+
])('should reject an empty %s sslmode before DSN fallback', (_name, sslmode, dsnSslmode) => {
570+
vi.stubEnv('TEST_SSLMODE', '');
571+
const tomlContent = `
572+
[[sources]]
573+
id = "test_db"
574+
dsn = "postgres://fakeuser:fakepass@localhost:5432/testdb?sslmode=${dsnSslmode}"
575+
sslmode = "${sslmode}"
576+
`;
577+
fs.writeFileSync(path.join(tempDir, 'dbhub.toml'), tomlContent);
578+
579+
expect(() => loadTomlConfig()).toThrow("invalid sslmode ''");
580+
});
581+
565582
it('should throw error when DSN sslmode conflicts with sslmode field', () => {
566583
const tomlContent = `
567584
[[sources]]

‎src/config/toml-loader.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,7 @@ function processSourceConfigs(
899899
try {
900900
const url = new SafeURL(processed.dsn);
901901
const dsnSslmode = url.getSearchParam("sslmode");
902-
if (!processed.sslmode && dsnSslmode) {
902+
if (processed.sslmode === undefined && dsnSslmode) {
903903
processed.sslmode = dsnSslmode as SourceConfig["sslmode"];
904904
}
905905
for (const field of ["sslrootcert", "sslcert", "sslkey"] as const) {

0 commit comments

Comments
 (0)