Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 24340057 authored by Caroline Tice's avatar Caroline Tice
Browse files

Eliminate false positive static analyzer warnings.

The compiler static analyzer is issuing several false positive
warnings for the file system/core/libadf/adf.cpp:
line 134: warning: Attempt to free released memory
line 240: warning: Use of memory after it is freed
line 454: warning: Use of memory after it is freed
line 553: warning: Attempt to free released memory
line 568: warning: Use of memory after it is freed
line 645: warning: Potential leak of memory pointed to by 'engs'
line 653: warning: Potential leak of memory pointed to by 'filtered_engs'

After careful analysis of the source I have come to the conclusion
that these are false warnings.  This CL annotates the source so the
static analyzer won't issue these warnings any more.

Bug: None
Test: The warnings are no longer being issued.
Change-Id: I158756b3f1eeb66f346be3cd2ffe10ebde236c80
parent 5af012d7
Loading
Loading
Loading
Loading
+26 −17
Original line number Diff line number Diff line
@@ -132,8 +132,11 @@ int adf_get_device_data(struct adf_device *dev, struct adf_device_data *data)
void adf_free_device_data(struct adf_device_data *data)
{
    delete [] data->attachments;
    data->attachments = nullptr;
    delete [] data->allowed_attachments;
    data->allowed_attachments = nullptr;
    delete [] static_cast<char *>(data->custom_data);
    data->custom_data = nullptr;
}

int adf_device_post(struct adf_device *dev,
@@ -236,6 +239,7 @@ ssize_t adf_interfaces_for_overlay_engine(struct adf_device *dev,
        return err;

    std::vector<adf_id_t> ids;
    if (data.allowed_attachments != nullptr)
        for (size_t i = 0; i < data.n_allowed_attachments; i++)
            if (data.allowed_attachments[i].overlay_engine == overlay_engine)
              ids.push_back(data.allowed_attachments[i].interface);
@@ -450,6 +454,7 @@ ssize_t adf_overlay_engines_for_interface(struct adf_device *dev,
        return err;

    std::vector<adf_id_t> ids;
    if (data.allowed_attachments != nullptr)
        for (size_t i = 0; i < data.n_allowed_attachments; i++)
            if (data.allowed_attachments[i].interface == interface)
                ids.push_back(data.allowed_attachments[i].overlay_engine);
@@ -551,7 +556,9 @@ int adf_get_overlay_engine_data(int fd, struct adf_overlay_engine_data *data)
void adf_free_overlay_engine_data(struct adf_overlay_engine_data *data)
{
    delete [] data->supported_formats;
    data->supported_formats = nullptr;
    delete [] static_cast<char *>(data->custom_data);
    data->custom_data = nullptr;
}

bool adf_overlay_engine_supports_format(int fd, __u32 format)
@@ -564,12 +571,14 @@ bool adf_overlay_engine_supports_format(int fd, __u32 format)
    if (err < 0)
        return false;

    if (data.supported_formats != nullptr) {
        for (i = 0; i < data.n_supported_formats; i++) {
            if (data.supported_formats[i] == format) {
                ret = true;
                break;
            }
        }
    }

    adf_free_overlay_engine_data(&data);
    return ret;
@@ -638,18 +647,18 @@ static bool adf_find_simple_post_overlay_engine(struct adf_device *dev,
        const __u32 *formats, size_t n_formats,
        adf_id_t interface, adf_id_t *overlay_engine)
{
    adf_id_t *engs;
    adf_id_t *engs = nullptr;
    ssize_t n_engs = adf_overlay_engines_for_interface(dev, interface, &engs);

    if (n_engs <= 0)
    if (engs == nullptr)
        return false;

    adf_id_t *filtered_engs;
    adf_id_t *filtered_engs = nullptr;
    ssize_t n_filtered_engs = adf_overlay_engines_filter_by_format(dev,
            formats, n_formats, engs, n_engs, &filtered_engs);
    free(engs);

    if (n_filtered_engs <= 0)
    if (filtered_engs == nullptr)
        return false;

    *overlay_engine = filtered_engs[0];
@@ -700,17 +709,17 @@ int adf_find_simple_post_configuration(struct adf_device *dev,

    if (n_intfs < 0)
        return n_intfs;
    else if (!n_intfs)
    else if (!intfs)
        return -ENODEV;

    adf_id_t *primary_intfs;
    adf_id_t *primary_intfs = nullptr;
    ssize_t n_primary_intfs = adf_interfaces_filter_by_flag(dev,
            ADF_INTF_FLAG_PRIMARY, intfs, n_intfs, &primary_intfs);
    free(intfs);

    if (n_primary_intfs < 0)
        return n_primary_intfs;
    else if (!n_primary_intfs)
    else if (!primary_intfs)
        return -ENODEV;

    if (!formats) {