Invalid access tokens crash ODBC driver - need defensive validation
维护者通常 1 天内回复
评估
这个 Issue 还没有评估数据。
描述
Describe the bug
The ODBC driver crashes with segmentation fault (macOS) or access violation (Windows) when SQL_COPT_SS_ACCESS_TOKEN (attribute 1256) is set with invalid token data via attrs_before parameter. The driver does not handle these cases gracefully, causing the Python process to crash.
This is replicable in pyodbc as well, indicating it's an underlying ODBC driver bug that we need to defend against.
Exception details:
macOS:
2025-10-06 16:00:07,377 - DEBUG - connection.py - [DDBC Bindings log] Connection string buffer created
zsh: segmentation fault python main.py
Windows:
Windows fatal exception: access violation
Current thread 0x000029c8 (most recent call first):
File "mssql_python\connection.py", line 203 in __init__
File "mssql_python\db_connection.py", line 36 in connect
File "main.py", line 22 in <module>
Stack trace shows crash originates in SQLDriverConnectW inside libmsodbcsql.18.dylib:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_platform.dylib 0x1819e5320 _platform_memmove + 96
1 libmsodbcsql.18.dylib 0x101220000 0x101168000 + 753664
...
11 libmsodbcsql.18.dylib 0x1011c89ac SQLDriverConnectW + 2620
12 ddbc_bindings.cp313-universal2.so 0x10148c834 Connection::connect(pybind11::dict const&) + 528
To reproduce
Crash scenarios (connection string has no UID/PWD):
from mssql_python import connect
conn_str = "Driver={ODBC Driver 18 for SQL Server};Server=tcp:server.database.windows.net,1433;Database=testdb;"
# macOS: Crashes with tokens < 32 bytes
# Windows: Crashes with tokens >= 16 bytes
attrs_before = {1256: b"a" * 16}
conn = connect(conn_str, attrs_before=attrs_before)
# macOS: 32 byte token works, but further larger tokens crash
# Windows: Any token >= 16 bytes crash
attrs_before = {1256: b"x" * 64} # 64 bytes of invalid data - crashes on macOS
conn = connect(conn_str, attrs_before=attrs_before)
Platform-specific crash thresholds:
- Windows: Crashes with binary tokens with length > 15
- macOS: Crashes with binary tokens where length < 32, and also with longer malformed tokens (e.g., 64 bytes)
Expected behavior
The library should validate access token format and provide a clear error message before passing invalid data to the ODBC driver:
# Should raise a clear exception like:
# ValueError: Invalid access token format. Expected properly formatted OAuth 2.0 token.
# or
# TypeError: Access token must be bytes, not str
Rather than crashing the Python interpreter with segfault/access violation.
Further technical details
Python version: 3.13
ODBC Driver: Microsoft ODBC Driver 18 for SQL Server
Operating systems:
- macOS (segmentation fault)
- Windows (access violation)
Additional context
- This issue is also reproducible in
pyodbcfor some scenarios, confirming it's an ODBC driver bug - ODBC documentation states tokens should be formatted with zero-byte padding (UCS-2 style), but doesn't specify minimum length
- The library should implement defensive validation to prevent these crashes and provide helpful error messages
- 主要语言
- Python
- 星标
- 479
- 派生
- 62
- 平均合并
- 2 天 23 小时
- 30 天内合并 PR
- 18
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/mssql-python 的其他 Issue
-
area: bulk-copy triage needed
难度 2/5 1-3 小时 新手友好度 70/100
microsoft/mssql-python#843 · 1 条评论 ·
维护者通常 1 天内回复
-
triage needed
难度 5/5 一周以上 新手友好度 38/100
microsoft/mssql-python#850 · 1 条评论 ·
维护者通常 1 天内回复
-
triage needed
难度 4/5 3-5 天 新手友好度 22/100
microsoft/mssql-python#849 · 1 条评论 ·
维护者通常 1 天内回复
-
triage needed
难度 4/5 3-5 天 新手友好度 20/100
microsoft/mssql-python#848 · 1 条评论 ·
维护者通常 1 天内回复
-
macOS: encrypted connections fail after Homebrew moved the `openssl` alias to `openssl@4`可能已有人在做 @bewithgaurav 于 19 天前认领。 未关闭area: packaging-platform bug triage needed
难度 4/5 3-5 天 新手友好度 55/100
microsoft/mssql-python#826 · 2 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
查看 microsoft/mssql-python 的全部 Issue
相似的 Issue
-
good first issue tools
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
bug deferred domain:ci P1
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
docling-project/docling-mcp#147 ·
-
issue: A pipe model's Valves button ignores the Allow Chat Valves permission可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭bug confirmed issue
难度 2/5 1-3 小时 新手友好度 72/100
open-webui/open-webui#32771 · 1 条评论 ·
维护者通常 1 天内回复
-
Scheduled Security Scan is failing on main可能已有人在做 @pkupt 今天认领。 未关闭security-scan-failure
难度 1/5 1-3 小时 新手友好度 74/100
semantica-agi/semantica#2045 ·
维护者通常 2 天内回复