Skip to content

Commit fbe88b4

Browse files
fix: add missing output pointer validation in array schema conversion functions (#5787)
## Summary Four public C API functions in `array_schema_api.cc` dereference their output pointer parameters without first validating them. Passing `null` for any of these output pointers causes a segfault rather than returning `TILEDB_ERR`: - `tiledb_array_type_to_str` - `tiledb_array_type_from_str` - `tiledb_layout_to_str` - `tiledb_layout_from_str` The fix adds `ensure_output_pointer_is_valid()` to each function, matching the pattern used throughout the rest of the C API. The function immediately following these four in the same file (`tiledb_array_schema_alloc`) already uses this validation correctly. ## Test plan - [ ] Confirm existing array schema C API tests still pass - [ ] Manually verify that passing `null` to each affected function now returns `TILEDB_ERR` instead of segfaulting 🤖 Generated with [Claude Code](https://claude.ai/claude-code) --- TYPE: IMPROVEMENT DESC: Added extra null pointer validation for a couple of APIs.
1 parent 16cf508 commit fbe88b4

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

tiledb/api/c_api/array_schema/array_schema_api.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ namespace tiledb::api {
4949

5050
capi_return_t tiledb_array_type_to_str(
5151
tiledb_array_type_t array_type, const char** str) {
52+
ensure_output_pointer_is_valid(str);
5253
const auto& strval =
5354
tiledb::sm::array_type_str((tiledb::sm::ArrayType)array_type);
5455
*str = strval.c_str();
@@ -57,6 +58,7 @@ capi_return_t tiledb_array_type_to_str(
5758

5859
capi_return_t tiledb_array_type_from_str(
5960
const char* str, tiledb_array_type_t* array_type) {
61+
ensure_output_pointer_is_valid(array_type);
6062
tiledb::sm::ArrayType val = tiledb::sm::ArrayType::DENSE;
6163
if (!tiledb::sm::array_type_enum(str, &val).ok()) {
6264
return TILEDB_ERR;
@@ -66,12 +68,14 @@ capi_return_t tiledb_array_type_from_str(
6668
}
6769

6870
capi_return_t tiledb_layout_to_str(tiledb_layout_t layout, const char** str) {
71+
ensure_output_pointer_is_valid(str);
6972
const auto& strval = tiledb::sm::layout_str((tiledb::sm::Layout)layout);
7073
*str = strval.c_str();
7174
return strval.empty() ? TILEDB_ERR : TILEDB_OK;
7275
}
7376

7477
capi_return_t tiledb_layout_from_str(const char* str, tiledb_layout_t* layout) {
78+
ensure_output_pointer_is_valid(layout);
7579
tiledb::sm::Layout val = tiledb::sm::Layout::ROW_MAJOR;
7680
if (!tiledb::sm::layout_enum(str, &val).ok()) {
7781
return TILEDB_ERR;

0 commit comments

Comments
 (0)