File: check_realloc_return

package info (click to toggle)
maildir-filter 1.20-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 112 kB
  • sloc: ansic: 217; makefile: 21
file content (48 lines) | stat: -rw-r--r-- 1,497 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Description: Check realloc return value
 See bug report at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=422610.
Author: Daniel Ruoso <daniel@ruoso.com>,
        Samuel Henrique <samueloph@debian.org>,
        Steve Langasek <vorlon@debian.org>
Last-Update: 2016-09-16

--- maildir-filter-1.20.orig/maildir-filter.c
+++ maildir-filter-1.20/maildir-filter.c
@@ -44,7 +44,6 @@ void version(int argc,char **argv);
 
 int main(int argc,char **argv)
 {
-	char *line=NULL;
 	int c;
 	char *pattern=NULL;
 	const char *err_msg=NULL;
@@ -102,15 +101,23 @@ int main(int argc,char **argv)
 		usage(argc,argv);
 	}
 		
-	for(lines=0,line=malloc(BUFSIZ);line && fgets(line,BUFSIZ,stdin);lines++,line=malloc(BUFSIZ)) {
-		size_t len = strlen(line);
-		msg_len+=len;
-		realloc(line, len+1);
-		message=realloc(message,sizeof(void*) * lines+1);
-		message[lines]=line;
+    char line[BUFSIZ];
+	for(lines=0;fgets(line,BUFSIZ,stdin);lines++) {
+		msg_len += strlen(line);
+        message = realloc(message,sizeof(void*) * lines+1);
+        if (!message) {
+          fprintf(stderr,_("%s: OOM: %s\n"),argv[0],strerror(errno));
+          exit(DEFERAL);
+        } else {
+          message[lines] = strdup(line);
+          if (!message[lines]) {
+            fprintf(stderr,_("%s: OOM: %s\n"),argv[0],strerror(errno));
+            exit(DEFERAL);
+          }
+        }
 	}
 
-	if(!line || !message) {
+	if(!message) {
 		fprintf(stderr,_("%s: OOM: %s\n"),argv[0],strerror(errno));
 		exit(DEFERAL);
 	}