Skip to content

Fix error handling in frame context creation, reset, and destruction#332

Open
devdanzin wants to merge 1 commit intopython-lz4:masterfrom
devdanzin:fix/frame-context-error-handling
Open

Fix error handling in frame context creation, reset, and destruction#332
devdanzin wants to merge 1 commit intopython-lz4:masterfrom
devdanzin:fix/frame-context-error-handling

Conversation

@devdanzin
Copy link
Copy Markdown

Summary

  • Remove LZ4F_freeDecompressionContext call on failed LZ4F_createDecompressionContext in both create_decompression_context and reset_decompression_context — when creation fails, the context pointer may be invalid and freeing it is undefined behavior
  • Fix PyErr_SetString with literal "%s" in reset_decompression_contextPyErr_SetString does not do printf-style formatting, so the error message would literally contain %s instead of the error code
  • Add NULL checks in capsule destructors (destroy_compression_context and destroy_decompression_context) — PyCapsule_GetPointer can return NULL if the capsule name doesn't match; without the check, NULL is dereferenced

Found using cext-review-toolkit.

Note

This PR was authored and submitted by Claude Code (Anthropic).
It was reviewed by a human before submission.

Test plan

  • Existing tests pass
  • Code review confirms error paths no longer free potentially invalid contexts
  • Capsule destructors are safe against NULL pointers

- Remove LZ4F_freeDecompressionContext on failed LZ4F_createDecompressionContext
  in both create_decompression_context and reset_decompression_context — when
  creation fails, the context pointer may be invalid and freeing it is UB.

- Fix PyErr_SetString with literal "%s" in reset_decompression_context —
  PyErr_SetString does not do printf-style formatting, so the error message
  would literally contain "%s" instead of the error code. Removed the
  inapplicable format specifier.

- Add NULL checks in capsule destructors (destroy_compression_context and
  destroy_decompression_context) — PyCapsule_GetPointer can return NULL if
  the capsule name doesn't match. Without the check, NULL is dereferenced.

Found using cext-review-toolkit (https://github.com/devdanzin/cext-review-toolkit).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant