GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix(destination): quote PRAGMA table_info arguments in duckdb and sqlite by Tyagiquamar · Pull Request #23707 · cloudquery/cloudquery

Conversation

@Tyagiquamar

@Tyagiquamar Tyagiquamar commented Nov 2, 2026

Copy link
Copy Markdown

Summary

The DuckDB and SQLite destinations built their PRAGMA table_info statement with fmt.Sprintf("PRAGMA table_info('%s');", tableName). A table name containing a single quote breaks out of the string literal, so the migration reads the wrong table, fails with a syntax error, or executes injected SQL.

Root cause

The table name comes from the source plugin's schema and is not escaped before it is placed inside the single-quoted literal. SQLite does not accept bound parameters in PRAGMA statements, and the query was shared between both destinations.

Fix

  • Render the table name as a proper SQL string literal, doubling embedded single quotes (foo'bar becomes 'foo''bar'). This is the standard SQL escape for both DuckDB and SQLite and cannot terminate the literal early.
  • The lookup now resolves a table whose name contains a quote instead of erroring, and no text in the name can be parsed as SQL.

Test plan

  • Added TestGetTableInfoWithQuoteInTableName to both destinations. Each creates a table named foo'bar, calls getTableInfo, and asserts both columns are returned.
  • On the parent commit the same call fails with a syntax error because the literal is terminated at the quote.
  • go test ./plugins/destination/duckdb/client/... ./plugins/destination/sqlite/client/... runs in CI (the local environment has no Go toolchain); the package build, go vet and tests are covered by the repository workflows.

Fixes #23171

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@Tyagiquamar
fix(destination): quote PRAGMA table_info arguments in duckdb and sqlite
70bd411
Both destinations interpolated the table name into a quoted string
literal, so a table name containing a single quote either broke the
statement or let arbitrary SQL run. Render the name as a proper string
literal by doubling embedded quotes; SQLite does not accept bound
parameters in PRAGMA statements.
@Tyagiquamar
Tyagiquamar requested a review from a team as a code owner November 2, 2026 11:21
@Tyagiquamar
Tyagiquamar requested a review from disq November 2, 2026 11:21
@github-actions github-actions Bot added area/plugin/destination/sqlite area/plugin/destination/duckdb area/plugin/destination/sqlite-python labels Nov 2, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@disq disq Awaiting requested review from disq disq is a code owner automatically assigned from cloudquery/backend

At least 1 approving review is required to merge this pull request.

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

area/plugin/destination/duckdb area/plugin/destination/sqlite area/plugin/destination/sqlite-python

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

plugins/destination/duckdb + sqlite: SQL injection in PRAGMA table_info queries

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@Tyagiquamar
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.