| // DEFINE: %{analyze-cmd} = %clang_analyze_cc1 %s \ |
| // DEFINE: -analyzer-checker=security.insecureAPI.DeprecatedOrUnsafeBufferHandling |
| |
| // DEFINE: %{ReportMode} = -analyzer-config security.insecureAPI.DeprecatedOrUnsafeBufferHandling:ReportMode |
| // DEFINE: %{EnableAnnexK} = -D__STDC_LIB_EXT1__=200509L -D__STDC_WANT_LIB_EXT1__=1 |
| |
| // These cases should warn: |
| // RUN: %{analyze-cmd} -std=gnu99 %{ReportMode}=all -verify=common |
| // RUN: %{analyze-cmd} -std=gnu11 -verify=common |
| // RUN: %{analyze-cmd} -std=gnu11 %{ReportMode}=all -verify=common |
| // RUN: %{analyze-cmd} -std=gnu11 %{ReportMode}=c11-only -verify=common |
| // RUN: %{analyze-cmd} -std=gnu11 %{ReportMode}=actionable %{EnableAnnexK} -verify=common |
| |
| // These cases should not warn: |
| // RUN: %{analyze-cmd} -std=gnu99 -verify=no-warning |
| // RUN: %{analyze-cmd} -std=gnu99 %{ReportMode}=actionable -verify=no-warning |
| // RUN: %{analyze-cmd} -std=gnu99 %{ReportMode}=c11-only -verify=no-warning |
| // RUN: %{analyze-cmd} -std=gnu11 %{ReportMode}=actionable -verify=no-warning |
| |
| #include "Inputs/system-header-simulator.h" |
| |
| extern char buf[128]; |
| extern char src[128]; |
| |
| // no-warning-no-diagnostics |
| |
| void test_memcpy(void) { |
| memcpy(buf, src, 10); |
| // common-warning@-1{{Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard}} |
| } |
| |
| void test_memset(void) { |
| memset(buf, 0, 10); |
| // common-warning@-1{{Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard}} |
| } |
| |
| void test_memmove(void) { |
| memmove(buf, src, 10); |
| // common-warning@-1{{Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard}} |
| } |