diff options
| author | jvoisin | 2024-04-24 17:09:08 +0200 |
|---|---|---|
| committer | jvoisin | 2024-04-24 17:14:46 +0200 |
| commit | a817e1555a755224cacc1cbdeeaefb6a1de606f0 (patch) | |
| tree | bfe86af6c7e7af91859eb36ec2e02056263f8827 /include/string.h | |
| parent | 265fa03fa0c467c9c41d803ebe2a538e758cba20 (diff) | |
Fix some overlap mismatch
This was caught by the following test:
```
int main(void) {
char c[32];
memcpy(c, c + 16, 16);
}
```
Reported-by: q66
Diffstat (limited to 'include/string.h')
| -rw-r--r-- | include/string.h | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/include/string.h b/include/string.h index 071d592..924be49 100644 --- a/include/string.h +++ b/include/string.h | |||
| @@ -58,10 +58,8 @@ __error_if((__fh_bos(__od, 0) < __n), "'memcpy' called with `n` bigger than the | |||
| 58 | 58 | ||
| 59 | __fh_size_t __bd = __fh_bos(__od, 0); | 59 | __fh_size_t __bd = __fh_bos(__od, 0); |
| 60 | __fh_size_t __bs = __fh_bos(__os, 0); | 60 | __fh_size_t __bs = __fh_bos(__os, 0); |
| 61 | char *__d = (char *)__od; | ||
| 62 | const char *__s = (const char *)__os; | ||
| 63 | 61 | ||
| 64 | if __fh_overlap(__d, __bd, __s, __n) | 62 | if __fh_overlap(__od, __n, __os, __n) |
| 65 | __builtin_trap(); | 63 | __builtin_trap(); |
| 66 | if (__n > __bd || __n > __bs) | 64 | if (__n > __bd || __n > __bs) |
| 67 | __builtin_trap(); | 65 | __builtin_trap(); |
| @@ -189,7 +187,7 @@ _FORTIFY_FN(stpcpy) char *stpcpy(char * _FORTIFY_POS0 __d, const char *__s) | |||
| 189 | __fh_size_t __n = strlen(__s) + 1; | 187 | __fh_size_t __n = strlen(__s) + 1; |
| 190 | __fh_size_t __b = __fh_bos(__d, 0); | 188 | __fh_size_t __b = __fh_bos(__d, 0); |
| 191 | 189 | ||
| 192 | if (__fh_overlap(__d, __b, __s, __n)) | 190 | if (__fh_overlap(__d, __n, __s, __n)) |
| 193 | __builtin_trap(); | 191 | __builtin_trap(); |
| 194 | 192 | ||
| 195 | if (__n > __b) | 193 | if (__n > __b) |
| @@ -257,7 +255,7 @@ _FORTIFY_FN(strcpy) char *strcpy(char * _FORTIFY_POS0 __d, const char *__s) | |||
| 257 | __fh_size_t __n = strlen(__s) + 1; | 255 | __fh_size_t __n = strlen(__s) + 1; |
| 258 | __fh_size_t __b = __fh_bos(__d, 0); | 256 | __fh_size_t __b = __fh_bos(__d, 0); |
| 259 | 257 | ||
| 260 | if (__fh_overlap(__d, __b, __s, __n)) | 258 | if (__fh_overlap(__d, __n, __s, __n)) |
| 261 | __builtin_trap(); | 259 | __builtin_trap(); |
| 262 | 260 | ||
| 263 | if (__n > __b) | 261 | if (__n > __b) |
