delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2002/03/29/12:13:53

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Date: Fri, 29 Mar 2002 12:13:22 -0500 (EST)
From: David E Euresti <davie AT MIT DOT EDU>
To: <cygwin AT cygwin DOT com>
Subject: sendto bug
Message-ID: <Pine.GSO.4.30L.0203291203430.28627-100000@magic-pi-ball.mit.edu>
MIME-Version: 1.0

Hello,
	I believe the implementation of sendto in cygwin.dll has a bug.
The following code works on linux but not on cygwin.  I believe the reason
is that cygwin checks whether the to field is null however it is
absolutely permissible for the to field to be null, as seen in the
following line at net.cc

  if ((len && __check_invalid_read_ptr_errno (buf, (unsigned) len))
      || __check_null_invalid_struct_errno (to, tolen)
      || !h)

I think that if we replace this with
  if ((len && __check_invalid_read_ptr_errno (buf, (unsigned) len))
      || to && __check_null_invalid_struct_errno (to, tolen)
      || !h)

and then make sure the get_inet_addr doesn't get called it would work
correctly, as both WSAsendto and winsock 1 sendto accept null to's.

I would do this myself but I haven't been successful yet at building
cygwin, and I would like this bug to be corrected in the distribution.

Thanks,
David Euresti

-- Begin test code --
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>

void fatal(char *msg) {
  printf("%s: %s\n", msg,strerror(errno));
  exit(1);
}

int main() {
  int fds[2];
  char buf[] = "Hello";
  char buf2[256];

  if (socketpair (AF_UNIX, SOCK_STREAM, 0, fds)<0)
    fatal("socketpair");

  if (sendto(fds[0],buf, sizeof(buf), 0, NULL, 0) < 0)
    fatal("sendto");
  if (recvfrom(fds[1], buf2, sizeof(buf2), 0, NULL, 0) < 0)
    fatal("recvfrom");

  printf("Message is %s\n", buf2);

}
-- End test code --


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019