xref: /third_party/ffmpeg/tools/coverity.c (revision cabdff1a)
1cabdff1aSopenharmony_ci/* Coverity Scan model
2cabdff1aSopenharmony_ci*
3cabdff1aSopenharmony_ci* Copyright (C) 2014 Red Hat, Inc.
4cabdff1aSopenharmony_ci*
5cabdff1aSopenharmony_ci* Authors:
6cabdff1aSopenharmony_ci* Markus Armbruster <armbru@redhat.com>
7cabdff1aSopenharmony_ci* Paolo Bonzini <pbonzini@redhat.com>
8cabdff1aSopenharmony_ci*
9cabdff1aSopenharmony_ci* This work is licensed under the terms of the GNU GPL, version 2 or, at your
10cabdff1aSopenharmony_ci* option, any later version. See the COPYING file in the top-level directory.
11cabdff1aSopenharmony_ci*/
12cabdff1aSopenharmony_ci/*
13cabdff1aSopenharmony_ci* This is the source code for our Coverity user model file. The
14cabdff1aSopenharmony_ci* purpose of user models is to increase scanning accuracy by explaining
15cabdff1aSopenharmony_ci* code Coverity can't see (out of tree libraries) or doesn't
16cabdff1aSopenharmony_ci* sufficiently understand. Better accuracy means both fewer false
17cabdff1aSopenharmony_ci* positives and more true defects. Memory leaks in particular.
18cabdff1aSopenharmony_ci*
19cabdff1aSopenharmony_ci* - A model file can't import any header files. Some built-in primitives are
20cabdff1aSopenharmony_ci* available but not wchar_t, NULL etc.
21cabdff1aSopenharmony_ci* - Modeling doesn't need full structs and typedefs. Rudimentary structs
22cabdff1aSopenharmony_ci* and similar types are sufficient.
23cabdff1aSopenharmony_ci* - An uninitialized local variable signifies that the variable could be
24cabdff1aSopenharmony_ci* any value.
25cabdff1aSopenharmony_ci*
26cabdff1aSopenharmony_ci* The model file must be uploaded by an admin in the analysis settings of
27cabdff1aSopenharmony_ci* https://scan.coverity.com/projects/54
28cabdff1aSopenharmony_ci*
29cabdff1aSopenharmony_ci* above text is based on https://github.com/qemu/qemu/blob/master/scripts/coverity-model.c
30cabdff1aSopenharmony_ci*/
31cabdff1aSopenharmony_ci
32cabdff1aSopenharmony_ci#define NULL (void *)0
33cabdff1aSopenharmony_ci
34cabdff1aSopenharmony_ci// Based on https://scan.coverity.com/models
35cabdff1aSopenharmony_civoid *av_malloc(size_t size) {
36cabdff1aSopenharmony_ci    int has_memory;
37cabdff1aSopenharmony_ci    __coverity_negative_sink__(size);
38cabdff1aSopenharmony_ci    if (has_memory) {
39cabdff1aSopenharmony_ci        void *ptr = __coverity_alloc__(size);
40cabdff1aSopenharmony_ci        __coverity_mark_as_uninitialized_buffer__(ptr);
41cabdff1aSopenharmony_ci        __coverity_mark_as_afm_allocated__(ptr, "av_free");
42cabdff1aSopenharmony_ci         return ptr;
43cabdff1aSopenharmony_ci    } else {
44cabdff1aSopenharmony_ci        return 0;
45cabdff1aSopenharmony_ci    }
46cabdff1aSopenharmony_ci}
47cabdff1aSopenharmony_ci
48cabdff1aSopenharmony_civoid *av_mallocz(size_t size) {
49cabdff1aSopenharmony_ci    int has_memory;
50cabdff1aSopenharmony_ci    __coverity_negative_sink__(size);
51cabdff1aSopenharmony_ci    if (has_memory) {
52cabdff1aSopenharmony_ci        void *ptr = __coverity_alloc__(size);
53cabdff1aSopenharmony_ci        __coverity_writeall0__(ptr);
54cabdff1aSopenharmony_ci        __coverity_mark_as_afm_allocated__(ptr, "av_free");
55cabdff1aSopenharmony_ci        return ptr;
56cabdff1aSopenharmony_ci    } else {
57cabdff1aSopenharmony_ci        return 0;
58cabdff1aSopenharmony_ci    }
59cabdff1aSopenharmony_ci}
60cabdff1aSopenharmony_ci
61cabdff1aSopenharmony_civoid *av_realloc(void *ptr, size_t size) {
62cabdff1aSopenharmony_ci    int has_memory;
63cabdff1aSopenharmony_ci    __coverity_negative_sink__(size);
64cabdff1aSopenharmony_ci    if (has_memory) {
65cabdff1aSopenharmony_ci        __coverity_escape__(ptr);
66cabdff1aSopenharmony_ci        ptr = __coverity_alloc__(size);
67cabdff1aSopenharmony_ci        __coverity_writeall__(ptr);
68cabdff1aSopenharmony_ci        __coverity_mark_as_afm_allocated__(ptr, "av_free");
69cabdff1aSopenharmony_ci        return ptr;
70cabdff1aSopenharmony_ci    } else {
71cabdff1aSopenharmony_ci        return 0;
72cabdff1aSopenharmony_ci    }
73cabdff1aSopenharmony_ci}
74cabdff1aSopenharmony_ci
75cabdff1aSopenharmony_civoid *av_free(void *ptr) {
76cabdff1aSopenharmony_ci    __coverity_free__(ptr);
77cabdff1aSopenharmony_ci    __coverity_mark_as_afm_freed__(ptr, "av_free");
78cabdff1aSopenharmony_ci}
79cabdff1aSopenharmony_ci
80