Browse code

mdprintf was also taking %f and %l, and they have different size than int. Make the ARGLEN get the correct vaarg types, otherwise it was popping off the stack an item of the wrong size!

git-svn: trunk@4784

Török Edvin authored on 2009/02/14 01:52:15
Showing 3 changed files
... ...
@@ -1,3 +1,10 @@
1
+Fri Feb 13 19:21:24 EET 2009 (edwin)
2
+------------------------------------
3
+ * shared/output.c, unit_tests/check_clamd.c: mdprintf was also
4
+ taking %f and %l, and they have different size than int.  Make the
5
+ ARGLEN get the correct vaarg types, otherwise it was popping off the
6
+ stack an item of the wrong size!
7
+
1 8
 Fri Feb 13 16:48:01 EET 2009 (edwin)
2 9
 ------------------------------------
3 10
  * clamd/server-th.c: fix nFILDES command
... ...
@@ -104,6 +104,14 @@ short int mprintf_disabled = 0, mprintf_verbose = 0, mprintf_quiet = 0,
104 104
 		    if(pt)			    \
105 105
 			arglen += strlen(pt);	    \
106 106
 		    break;			    \
107
+		case 'f':			    \
108
+		    va_arg(args, double);	    \
109
+		    arglen += 25;		    \
110
+		    break;			    \
111
+		case 'l':			    \
112
+		    va_arg(args, long);		    \
113
+		    arglen += 20;		    \
114
+		    break;			    \
107 115
 		default:			    \
108 116
 		    va_arg(args, int);		    \
109 117
 		    arglen += 10;		    \
... ...
@@ -134,6 +134,32 @@ END_TEST
134 134
 
135 135
 #define EXPECT_INSTREAM "stream: ClamAV-Test-File.UNOFFICIAL FOUND\n"
136 136
 
137
+#define STATS_REPLY "POOLS: 1\n\nSTATE: VALID PRIMARY\n"
138
+START_TEST (tc_stats)
139
+{
140
+    char *recvdata;
141
+    size_t len = strlen("nSTATS\n");
142
+    int rc;
143
+
144
+    conn_setup();
145
+    rc = send(sockd, "nSTATS\n", len, 0);
146
+    fail_unless_fmt((size_t)rc == len, "Unable to send(): %s\n", strerror(errno));
147
+
148
+    recvdata = recvfull(sockd, &len);
149
+
150
+    fail_unless_fmt(len > strlen(STATS_REPLY), "Reply has wrong size: %lu, minimum %lu, reply: %s\n",
151
+		    len, strlen(STATS_REPLY), recvdata);
152
+
153
+    if (len > strlen(STATS_REPLY))
154
+	len = strlen(STATS_REPLY);
155
+    rc = strncmp(recvdata, STATS_REPLY, len);
156
+
157
+    fail_unless_fmt(rc == 0, "Wrong reply: %s\n", recvdata);
158
+    free(recvdata);
159
+    conn_teardown();
160
+}
161
+END_TEST
162
+
137 163
 START_TEST (tc_instream)
138 164
 {
139 165
     int fd, nread, rc;
... ...
@@ -185,7 +211,7 @@ static Suite *test_clamd_suite(void)
185 185
     suite_add_tcase(s, tc_commands);
186 186
     tcase_add_loop_test(tc_commands, test_basic_commands, 0, sizeof(basic_tests)/sizeof(basic_tests[0]));
187 187
     tcase_add_test(tc_commands, tc_instream);
188
-
188
+    tcase_add_test(tc_commands, tc_stats);
189 189
     return s;
190 190
 }
191 191