Skip to content

Bugfix/bacnet device string use after free#1375

Merged
skarg merged 11 commits into
masterfrom
bugfix/bacnet-device-string-use-after-free
Jun 4, 2026
Merged

Bugfix/bacnet device string use after free#1375
skarg merged 11 commits into
masterfrom
bugfix/bacnet-device-string-use-after-free

Conversation

@skarg
Copy link
Copy Markdown
Collaborator

@skarg skarg commented Jun 3, 2026

No description provided.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the “basic server” Device object implementation to avoid use-after-free risks by storing writable Device string properties in managed BACNET_CHARACTER_STRING_BUFFER instances, and adds support for exposing PROP_DEVICE_UUID via ReadProperty.

Changes:

  • Replace several Device string properties (name/vendor/model/etc.) from raw const char * storage to BACNET_CHARACTER_STRING_BUFFER.
  • Update Device ReadProperty/WriteProperty paths to encode from buffers and to duplicate incoming strings for writable properties.
  • Extend bacstr with new buffer helpers (*_ansi_length_init, *_ansi_strndup, characterstring_buffer_same) to support the new storage approach.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 12 comments.

File Description
src/bacnet/basic/server/bacnet_device.c Migrates Device string properties to buffer-backed storage, updates Read/WriteProperty encoding, and adds PROP_DEVICE_UUID read support.
src/bacnet/bacstr.h Declares new BACNET_CHARACTER_STRING_BUFFER helper APIs used by the server device object.
src/bacnet/bacstr.c Implements new buffer helper functions used for initialization, duplication, and comparisons.
Comments suppressed due to low confidence (1)

src/bacnet/bacstr.c:1070

  • characterstring_buffer_ansi_length_init() documents that value may be NULL for an empty string, but it currently stores buffer=NULL. Downstream encoders (e.g., encode_bacnet_character_string_buffer) treat buffer==NULL as malformed and encode 0 bytes. This makes NULL inputs break ReadProperty encoding and breaks callers that use NULL to mean “reset/empty”.
    characterstring_buffer_free(char_string);
    char_string->encoding = CHARACTER_UTF8;
    char_string->buffer = (char *)value;
    char_string->buffer_size = length;
    char_string->buffer_length = length;

Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/basic/server/bacnet_device.c
Comment thread src/bacnet/bacstr.c
@skarg skarg merged commit c381208 into master Jun 4, 2026
36 checks passed
@skarg skarg deleted the bugfix/bacnet-device-string-use-after-free branch June 4, 2026 15:24
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.

2 participants