Skip to content

[Oracle] Browsing an SDO_GEOMETRY table crashes OracleDriver with SIGTRAP #3241

Description

@JX-WANG117

What happened?

TablePro terminates when browsing an Oracle spatial table containing an MDSYS.SDO_GEOMETRY column. This was verified on a real Oracle 12.1.0.2 database using read-only operations.

I reproduced two new process crashes during this investigation: opening the spatial table in the data view, and executing the ordered/paginated SELECT * below through TablePro MCP. Both generated new macOS crash reports with EXC_BREAKPOINT / SIGTRAP in OracleDriver, on nio.nioTransportServices.connectionchannel, with identical image offsets and decoder frames.

On another UI attempt, the app stayed open but displayed: "The server sent an unexpected message; the connection was reset. Please rerun the query." (translated from the Chinese UI).

Connection, schema/table metadata, and non-spatial reads all work. The tested table is partitioned and contains NUMBER, NVARCHAR2, a nullable SHAPE (SDO_GEOMETRY), and BLOB columns.

Server: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0, 64-bit.

Steps to reproduce

Schema/table names and the ordinary identifier column below are anonymized. ID represents the first numeric column of the tested table.

  1. Connect to an Oracle 12.1.0.2 database.
  2. Open an existing spatial table containing MDSYS.SDO_GEOMETRY in the sidebar. The tested data view had a page size of 1,000.
  3. TablePro may terminate during result decoding.

The following query independently reproduced the process crash:

SELECT *
FROM "APP_SCHEMA"."SPATIAL_POINTS"
ORDER BY 1
OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY;

This matches the browse-query shape produced by OraclePluginDriver.buildBrowseQuery.

Verified controls and scope

Read-only check Result
Table metadata and Oracle version Succeeded
Same ordered/paginated 1,000-row query selecting every column except SHAPE, including BLOB Succeeded, 1,000 rows
Same ordering/pagination with ID and SDO_UTIL.TO_WKTGEOMETRY(SHAPE) Succeeded, 1,000 non-NULL WKT values
Unordered SELECT * with ROWNUM limits of 1, 10 and 100 Succeeded; SHAPE displayed as <unsupported: unknown>
Unordered SELECT * FETCH FIRST 1000 ROWS ONLY Succeeded, 1,000 rows
SHAPE alone from an unordered first row Returned <unsupported: unknown>
Synthetic points from DUAL using SDO_POINT_TYPE or element/ordinate arrays Returned <unsupported: unknown> without crashing
Opening the actual spatial table Process crash; another attempt produced connection-reset error
Ordered/paginated SELECT * above Process crash with the same stack

The working WKT control was:

SELECT ID, SDO_UTIL.TO_WKTGEOMETRY(SHAPE) AS SHAPE_WKT
FROM "APP_SCHEMA"."SPATIAL_POINTS"
ORDER BY 1
OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY;

These results do not establish that every SDO_GEOMETRY query crashes. The exact triggering object/row or protocol condition is still unknown. The ordered browse result and raw spatial-object decoding are implicated by the controls, but the root cause has not been proven. I do not have a confirmed standalone synthetic reproducer yet.

Expected behavior

Opening the table or selecting its spatial column should not terminate the application. Unsupported spatial objects should produce a safe placeholder or a handled error, and the Oracle connection should remain usable.

Database type

Oracle

TablePro version

0.77.0 (134); Oracle Driver plugin 1.2.32 (1)

macOS version & chip

macOS 27.0.1 (26A434) / Apple Silicon, ARM64 native

Screenshots / Logs

Sanitized excerpt from the two new crash reports (2026-10-02). No database addresses, credentials, business records, coordinates, local usernames, or machine/incident identifiers are included.

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Termination Reason: SIGNAL, Code 5, Trace/BPT trap: 5
Crashed queue: nio.nioTransportServices.connectionchannel

Frame  Image         Symbol / image-relative offset (decimal)
0      OracleDriver  [unsymbolicated] +602356
1      OracleDriver  [unsymbolicated] +1208944
2      OracleDriver  [unsymbolicated] +1279908
3      OracleDriver  [unsymbolicated] +1285744
4      OracleDriver  [unsymbolicated] +1280928
5      OracleDriver  [unsymbolicated] +1179020
6      OracleDriver  [unsymbolicated] +1187576
7      OracleDriver  [unsymbolicated] +1183044
8      OracleDriver  [unsymbolicated] +2430612
9      OracleDriver  [unsymbolicated] +2430660
10     OracleDriver  ChannelHandlerContext.fireChannelRead(_:) +40
                     image-relative offset: 2412700
11     OracleDriver  OracleBackendMessageDecoder.decode(context:buffer:) +268
                     image-relative offset: 1043680
12     OracleDriver  [unsymbolicated] +1050812
13     OracleDriver  [unsymbolicated] +2486604
14     OracleDriver  [unsymbolicated] +2485948
15     OracleDriver  ByteToMessageHandler.channelRead(context:data:) +220
                     image-relative offset: 2487956

For triage, this appears different from #1746 (crash during connection testing): login and queries succeed here, and failure occurs while decoding a spatial-table browse result.

All investigation queries were read-only. No database data or structure was changed.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions