cvs: /php4/ext/standard fsock.c
| From: | Zeev Suraski | Date: | Mon, 10 Jan 2000 19:56:53 +0000 |
| Subject: | cvs: /php4/ext/standard fsock.c | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-9015@lists.php.net to get a copy of this message | ||
zeev Mon Jan 10 11:56:53 2000 EDT
Modified files:
/php4/ext/standard fsock.c
Log:
@- Fixed a crash in pfsockopen() (Zeev)
Index: php4/ext/standard/fsock.c
diff -u php4/ext/standard/fsock.c:1.36 php4/ext/standard/fsock.c:1.37
--- php4/ext/standard/fsock.c:1.36 Fri Dec 31 17:31:52 1999
+++ php4/ext/standard/fsock.c Mon Jan 10 11:56:23 2000
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fsock.c,v 1.36 2000/01/01 01:31:52 sas Exp $ */
+/* $Id: fsock.c,v 1.37 2000/01/10 19:56:23 zeev Exp $ */
/* Synced with php 3.0 revision 1.121 1999-06-18 [ssb] */
/* Synced with php 3.0 revision 1.133 1999-07-21 [sas] */
@@ -76,7 +76,16 @@
extern int le_fp;
#endif
-#define FREE_SOCK if(socketd >= 0) close(socketd); efree(sock); if (key) efree(key)
+#define CLOSE_SOCK(free_sock) \
+ if(socketd >= 0) { \
+ close(socketd); \
+ } \
+ if (free_sock) { \
+ efree(sock); \
+ } \
+ if (key) { \
+ efree(key); \
+ }
#define SEARCHCR() \
p = memchr(READPTR(sock), '\n', MIN(TOREAD(sock), maxlen));
@@ -249,7 +258,7 @@
FLS_FETCH();
if (arg_count > 5 || arg_count < 2 || zend_get_parameters_array_ex(arg_count,args)==FAILURE)
{
- FREE_SOCK;
+ CLOSE_SOCK(1);
WRONG_PARAM_COUNT;
}
switch(arg_count) {
@@ -285,7 +294,7 @@
if (persistent && zend_hash_find(&FG(ht_fsock_keys), key, strlen(key) + 1,
(void *) &sockp) == SUCCESS) {
- FREE_SOCK;
+ CLOSE_SOCK(0);
*sock = *sockp;
ZEND_REGISTER_RESOURCE(return_value,sock,php_file_le_socket());
return;
@@ -307,21 +316,21 @@
socketd = socket(AF_INET,udp ? SOCK_DGRAM : SOCK_STREAM,0);
if (socketd == SOCK_ERR) {
- FREE_SOCK;
+ CLOSE_SOCK(1);
RETURN_FALSE;
}
server.sin_family = AF_INET;
if(lookup_hostname(udp ? &(*args[0])->value.str.val[6] :
(*args[0])->value.str.val,&server.sin_addr)) {
- FREE_SOCK;
+ CLOSE_SOCK(1);
RETURN_FALSE;
}
server.sin_port = htons(portno);
if (connect_nonb(socketd, (struct sockaddr *)&server, sizeof(server), &timeout) ==
SOCK_CONN_ERR) {
- FREE_SOCK;
+ CLOSE_SOCK(1);
if(arg_count>2) (*args[2])->value.lval = errno;
if(arg_count>3) {
(*args[3])->value.str.val = estrdup(strerror(errno));
@@ -335,7 +344,7 @@
struct sockaddr_un unix_addr;
socketd = socket(AF_UNIX,SOCK_STREAM,0);
if (socketd == SOCK_ERR) {
- FREE_SOCK;
+ CLOSE_SOCK(1);
RETURN_FALSE;
}
@@ -344,7 +353,7 @@
strcpy(unix_addr.sun_path, (*args[0])->value.str.val);
if (connect_nonb(socketd, (struct sockaddr *) &unix_addr, sizeof(unix_addr), &timeout) ==
SOCK_CONN_ERR) {
- FREE_SOCK;
+ CLOSE_SOCK(1);
if(arg_count>2) (*args[2])->value.lval = errno;
if(arg_count>3) {
(*args[3])->value.str.val = estrdup(strerror(errno));