]>
Commit | Line | Data |
---|---|---|
dff8da6b | 1 | /* Copyright (C) 2013-2024 Free Software Foundation, Inc. |
303e567a SP |
2 | This file is part of the GNU C Library. |
3 | ||
4 | The GNU C Library is free software; you can redistribute it and/or | |
5 | modify it under the terms of the GNU Lesser General Public | |
6 | License as published by the Free Software Foundation; either | |
7 | version 2.1 of the License, or (at your option) any later version. | |
8 | ||
9 | The GNU C Library is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | Lesser General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Lesser General Public | |
15 | License along with the GNU C Library; if not, see | |
5a82c748 | 16 | <https://www.gnu.org/licenses/>. */ |
303e567a SP |
17 | |
18 | #include <locale.h> | |
19 | #include <stdio.h> | |
20 | #include <stdint.h> | |
21 | #include <stdlib.h> | |
22 | #include <string.h> | |
23 | ||
5653ab12 FW |
24 | #include <support/check.h> |
25 | #include <support/test-driver.h> | |
26 | ||
27 | /* Verify that strcoll does not crash for large strings for which it | |
28 | cannot cache weight lookup results. The size is large enough to | |
29 | cause integer overflows on 32-bit as well as buffer overflows on | |
30 | 64-bit. */ | |
303e567a SP |
31 | #define SIZE 0x40000000ul |
32 | ||
fb82116f | 33 | int |
303e567a SP |
34 | do_test (void) |
35 | { | |
5653ab12 | 36 | TEST_VERIFY_EXIT (setlocale (LC_COLLATE, "en_GB.UTF-8") != NULL); |
303e567a SP |
37 | |
38 | char *p = malloc (SIZE); | |
303e567a SP |
39 | if (p == NULL) |
40 | { | |
5653ab12 FW |
41 | puts ("info: could not allocate memory, cannot run test"); |
42 | return EXIT_UNSUPPORTED; | |
303e567a SP |
43 | } |
44 | ||
45 | memset (p, 'x', SIZE - 1); | |
46 | p[SIZE - 1] = 0; | |
5653ab12 | 47 | printf ("info: strcoll result: %d\n", strcoll (p, p)); |
303e567a SP |
48 | return 0; |
49 | } | |
50 | ||
5653ab12 FW |
51 | /* This test can rung for a long time, but it should complete within |
52 | this time on reasonably current hardware. */ | |
303e567a | 53 | #define TIMEOUT 300 |
5653ab12 | 54 | #include <support/test-driver.c> |