1 
2 // Test library configuration for libcurl.cfg
3 //
4 // Usage:
5 // $ cppcheck --check-library --library=libcurl --enable=information --error-exitcode=1 --inline-suppr --suppress=missingIncludeSystem test/cfg/libcurl.c
6 // =>
7 // No warnings about bad library configuration, unmatched suppressions, etc. exitcode=0
8 //
9 
10 #include <curl/curl.h>
11 #include <stdio.h>
12 
validCode()13 void validCode()
14 {
15     CURL *curl = curl_easy_init();
16     if (curl) {
17         CURLcode res;
18         curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
19         res = curl_easy_perform(curl);
20         if (res != CURLE_OK) {
21             printf("error");
22         } else {
23             long response_code;
24             curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
25             printf("%ld", response_code);
26             char * pStr = curl_easy_escape(curl, "a", 1);
27             if (pStr)
28                 printf("%s", pStr);
29             curl_free(pStr);
30             curl_easy_reset(curl);
31         }
32         curl_easy_cleanup(curl);
33     }
34 }
35 
ignoredReturnValue(CURL * handle)36 void ignoredReturnValue(CURL * handle)
37 {
38     // cppcheck-suppress ignoredReturnValue
39     curl_easy_strerror(1);
40 }
41 
resourceLeak_curl_easy_init()42 void resourceLeak_curl_easy_init()
43 {
44     CURL *curl = curl_easy_init();
45     printf("%p", curl);
46     // cppcheck-suppress resourceLeak
47 }
48 
resourceLeak_curl_easy_duphandle(CURL * handle)49 void resourceLeak_curl_easy_duphandle(CURL * handle)
50 {
51     CURL *curl = curl_easy_duphandle(handle);
52     printf("%p", curl);
53     // cppcheck-suppress resourceLeak
54 }
55 
memleak_curl_easy_escape(CURL * handle)56 void memleak_curl_easy_escape(CURL * handle)
57 {
58     char * pStr = curl_easy_escape(handle, "a", 1);
59     if (pStr)
60         printf("%s", pStr);
61     // cppcheck-suppress memleak
62 }
63 
nullPointer(CURL * handle)64 void nullPointer(CURL * handle)
65 {
66     char * buf[10] = {0};
67     size_t len;
68 
69     curl_easy_recv(handle, buf, 10, &len);
70     // cppcheck-suppress nullPointer
71     curl_easy_recv(handle, buf, 10, NULL);
72     curl_easy_send(handle, buf, 10, &len);
73     // cppcheck-suppress nullPointer
74     curl_easy_send(handle, buf, 10, NULL);
75 }
76 
uninitvar(CURL * handle)77 void uninitvar(CURL * handle)
78 {
79     char * bufInit[10] = {0};
80     char * bufUninit;
81     size_t len;
82 
83     curl_easy_send(handle, bufInit, 10, &len);
84     // cppcheck-suppress uninitvar
85     curl_easy_send(handle, bufUninit, 10, &len);
86 }
87