summaryrefslogtreecommitdiff
path: root/include/stdio.h
diff options
context:
space:
mode:
authorsin2015-03-01 13:17:21 +0000
committersin2015-03-01 13:17:21 +0000
commit15c2b9d8df9c4a2959abe5dee488f741f9aeb223 (patch)
treecaa656d18c3d9465e8532688e7d0e2b040e478eb /include/stdio.h
parent0c985218e9043289f4e72d1492cdb83f07fe600a (diff)
Add fwrite() check
Diffstat (limited to '')
-rw-r--r--include/stdio.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/stdio.h b/include/stdio.h
index d55df07..94025ef 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -29,6 +29,19 @@ __fortify_fread(void *dst, size_t n, size_t nmemb, FILE *fp)
29 return fread(dst, n, nmemb, fp); 29 return fread(dst, n, nmemb, fp);
30} 30}
31 31
32static inline __attribute__ ((always_inline))
33size_t
34__fortify_fwrite(const void *dst, size_t n, size_t nmemb, FILE *fp)
35{
36 size_t bos = __builtin_object_size(dst, 0);
37
38 if (n != 0 && (n * nmemb) / n != nmemb)
39 __builtin_trap();
40 if (n * nmemb > bos)
41 __builtin_trap();
42 return fwrite(dst, n, nmemb, fp);
43}
44
32static inline 45static inline
33__attribute__ ((always_inline)) 46__attribute__ ((always_inline))
34__attribute__ ((__format__ (printf, 2, 0))) 47__attribute__ ((__format__ (printf, 2, 0)))
@@ -67,6 +80,8 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap)
67#define fgets(s, n, fp) __fortify_fgets(s, n, fp) 80#define fgets(s, n, fp) __fortify_fgets(s, n, fp)
68#undef fread 81#undef fread
69#define fread(dst, n, nmemb, fp) __fortify_fread(dst, n, nmemb, fp) 82#define fread(dst, n, nmemb, fp) __fortify_fread(dst, n, nmemb, fp)
83#undef fwrite
84#define fwrite(dst, n, nmemb, fp) __fortify_fwrite(dst, n, nmemb, fp)
70#undef vsprintf 85#undef vsprintf
71#define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap) 86#define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap)
72#undef vsnprintf 87#undef vsnprintf