• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <math.h>
5 #include <errno.h>
6 #include <sys/resource.h>
7 #include "test.h"
8 
main(void)9 int main(void)
10 {
11 	enum {n = 8*1024*1024};
12 	char *s = malloc(n);
13 	int i;
14 	float f;
15 	char c;
16 
17 	if (!s)
18 		return t_error("out of memory");
19 	t_setrlim(RLIMIT_STACK, 100*1024);
20 
21 	for (i = 0; i < n; i++) s[i] = '1';
22 	s[n-3] = ' ';
23 	s[n-1] = 0;
24 
25 	/*
26 	 * stack overflow if scanf copies s on the stack (glibc)
27 	 * same issue with %d except then storing the conversion
28 	 * result is undefined behaviour
29 	 */
30 	i = sscanf(s, "%f %c", &f, &c);
31 
32 	if (i != 2)
33 		t_error("sscanf returned %d, want 2\n", i);
34 	if (f != INFINITY)
35 		t_error("sscanf(longnum, \"%%f\") read %f, want inf\n", f);
36 	if (c != '1')
37 		t_error("sscanf(\"1\", %%c) read '%c', want '1'\n", c);
38 	free(s);
39 	return t_status;
40 }
41