brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · ca86986 Raw
119 lines · c
1// RUN: %check_clang_tidy %s bugprone-not-null-terminated-result %t -- \2// RUN: -- -I %S/Inputs/not-null-terminated-result3 4#include "not-null-terminated-result-c.h"5 6#define __STDC_LIB_EXT1__ 17#define __STDC_WANT_LIB_EXT1__ 18 9void bad_memchr_1(char *position, const char *src) {10  position = (char *)memchr(src, '\0', strlen(src));11  // CHECK-MESSAGES: :[[@LINE-1]]:40: warning: the length is too short to include the null terminator [bugprone-not-null-terminated-result]12  // CHECK-FIXES: position = strchr(src, '\0');13}14 15void good_memchr_1(char *pos, const char *src) {16  pos = strchr(src, '\0');17}18 19void bad_memchr_2(char *position) {20  position = (char *)memchr("foobar", '\0', 6);21  // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: the length is too short to include the null terminator [bugprone-not-null-terminated-result]22  // CHECK-FIXES: position = strchr("foobar", '\0');23}24 25void good_memchr_2(char *pos) {26  pos = strchr("foobar", '\0');27}28 29void bad_memmove(const char *src) {30  char dest[13];31  memmove(dest, src, strlen(src));32  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the result from calling 'memmove' is not null-terminated [bugprone-not-null-terminated-result]33  // CHECK-FIXES: char dest[14];34  // CHECK-FIXES-NEXT: memmove_s(dest, 14, src, strlen(src) + 1);35}36 37void good_memmove(const char *src) {38  char dst[14];39  memmove_s(dst, 13, src, strlen(src) + 1);40}41 42void bad_memmove_s(char *dest, const char *src) {43  memmove_s(dest, 13, src, strlen(src));44  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the result from calling 'memmove_s' is not null-terminated [bugprone-not-null-terminated-result]45  // CHECK-FIXES: memmove_s(dest, 13, src, strlen(src) + 1);46}47 48void good_memmove_s_1(char *dest, const char *src) {49  memmove_s(dest, 13, src, strlen(src) + 1);50}51 52void bad_strerror_s(int errno) {53  char dest[13];54  strerror_s(dest, strlen(strerror(errno)), errno);55  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the result from calling 'strerror_s' is not null-terminated and missing the last character of the error message [bugprone-not-null-terminated-result]56  // CHECK-FIXES: char dest[14];57  // CHECK-FIXES-NEXT: strerror_s(dest, strlen(strerror(errno)) + 1, errno);58}59 60void good_strerror_s(int errno) {61  char dst[14];62  strerror_s(dst, strlen(strerror(errno)) + 1, errno);63}64 65int bad_strncmp_1(char *str0, const char *str1) {66  return strncmp(str0, str1, (strlen(str0) + 1));67  // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: comparison length is too long and might lead to a buffer overflow [bugprone-not-null-terminated-result]68  // CHECK-FIXES: return strncmp(str0, str1, (strlen(str0)));69}70 71int bad_strncmp_2(char *str2, const char *str3) {72  return strncmp(str2, str3, 1 + strlen(str2));73  // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: comparison length is too long and might lead to a buffer overflow [bugprone-not-null-terminated-result]74  // CHECK-FIXES: return strncmp(str2, str3, strlen(str2));75}76 77int good_strncmp_1_2(char *str4, const char *str5) {78  return strncmp(str4, str5, strlen(str4));79}80 81int bad_strncmp_3(char *str6) {82  return strncmp(str6, "string", 7);83  // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: comparison length is too long and might lead to a buffer overflow [bugprone-not-null-terminated-result]84  // CHECK-FIXES: return strncmp(str6, "string", 6);85}86 87int good_strncmp_3(char *str7) {88  return strncmp(str7, "string", 6);89}90 91void bad_strxfrm_1(const char *long_source_name) {92  char long_destination_array_name[13];93  strxfrm(long_destination_array_name, long_source_name,94          strlen(long_source_name));95  // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: the result from calling 'strxfrm' is not null-terminated [bugprone-not-null-terminated-result]96  // CHECK-FIXES: char long_destination_array_name[14];97  // CHECK-FIXES-NEXT: strxfrm(long_destination_array_name, long_source_name,98  // CHECK-FIXES-NEXT: strlen(long_source_name) + 1);99}100 101void good_strxfrm_1(const char *long_source_name) {102  char long_destination_array_name[14];103  strxfrm(long_destination_array_name, long_source_name,104          strlen(long_source_name) + 1);105}106 107void bad_strxfrm_2() {108  char long_destination_array_name1[16];109  strxfrm(long_destination_array_name1, "long_source_name", 16);110  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: the result from calling 'strxfrm' is not null-terminated [bugprone-not-null-terminated-result]111  // CHECK-FIXES: char long_destination_array_name1[17];112  // CHECK-FIXES: strxfrm(long_destination_array_name1, "long_source_name", 17);113}114 115void good_strxfrm_2() {116  char long_destination_array_name2[17];117  strxfrm(long_destination_array_name2, "long_source_name", 17);118}119