Browse code

swf: error handling

Tomasz Kojm authored on 2011/04/15 19:39:45
Showing 1 changed files
... ...
@@ -59,6 +59,9 @@
59 59
 	bitpos = 8;								\
60 60
 	bitbuf = (unsigned int) get_c;						\
61 61
 	offset += sizeof(get_c);						\
62
+    } else {									\
63
+	cli_errmsg("cli_scanswf: INITBITS: Can't read file\n");			\
64
+	return CL_EREAD;							\
62 65
     }										\
63 66
 }
64 67
 
... ...
@@ -73,6 +76,9 @@
73 73
 	    bitbuf = (unsigned int) get_c;					\
74 74
 	    bitpos = 8;								\
75 75
 	    offset += sizeof(get_c);						\
76
+	} else {								\
77
+	    cli_errmsg("cli_scanswf: GETBITS: Can't read file\n");		\
78
+	    return CL_EREAD;							\
76 79
 	}									\
77 80
     }										\
78 81
     bitpos -= getbits_n;							\
... ...
@@ -86,10 +92,16 @@
86 86
     if(fmap_readn(map, &get_c, offset, sizeof(get_c)) == sizeof(get_c)) {	\
87 87
 	getword_1 = (unsigned int) get_c;					\
88 88
 	offset += sizeof(get_c);						\
89
+    } else {									\
90
+	cli_errmsg("cli_scanswf: GETWORD: Can't read file\n");			\
91
+	return CL_EREAD;							\
89 92
     }										\
90 93
     if(fmap_readn(map, &get_c, offset, sizeof(get_c)) == sizeof(get_c)) {	\
91 94
 	getword_2 = (unsigned int) get_c;					\
92 95
 	offset += sizeof(get_c);						\
96
+    } else {									\
97
+	cli_errmsg("cli_scanswf: GETWORD: Can't read file\n");			\
98
+	return CL_EREAD;							\
93 99
     }										\
94 100
     v = (uint16_t)(getword_1 & 0xff) | ((getword_2 & 0xff) << 8);		\
95 101
 }
... ...
@@ -124,6 +136,12 @@ static int scancws(cli_ctx *ctx, struct swf_file_hdr *hdr)
124 124
     hdr->signature[0] = 'F';
125 125
     if(cli_writen(fd, hdr, sizeof(struct swf_file_hdr)) != sizeof(struct swf_file_hdr)) {
126 126
 	cli_errmsg("scancws: Can't write to file %s\n", tmpname);
127
+        close(fd);
128
+	if(cli_unlink(tmpname)) {
129
+	    free(tmpname);
130
+	    return CL_EUNLINK;
131
+	}
132
+	free(tmpname);
127 133
 	return CL_EWRITE;
128 134
     }
129 135