1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

weirdo hack to fix debian bug report 278691:

'curl -v writes debugging to its network socket if stderr is closed'
This commit is contained in:
Daniel Stenberg 2004-11-08 19:41:28 +00:00
parent 3347ced899
commit facfa19cdd
4 changed files with 39 additions and 0 deletions

View File

@ -6,6 +6,15 @@
Changelog Changelog
Daniel (8 November 2004)
- Ian Gulliver reported in debian bug report #278691: if curl is invoked in an
environment where stderr is closed the -v output will still be sent to file
descriptor 2 which then might be the network socket handle! Now we have a
weird hack instead that attempts to make sure that file descriptor 2 is
opened (with a call to pipe()) before libcurl is called to do the transfer.
configure now checks for pipe() and systems without pipe don't get the weird
hack done.
Daniel (5 November 2004) Daniel (5 November 2004)
- Tim Sneddon made libcurl send no more than 64K in a single first chunk when - Tim Sneddon made libcurl send no more than 64K in a single first chunk when
doing a huge POST on VMS, as this is a system limitation. Default on general doing a huge POST on VMS, as this is a system limitation. Default on general

View File

@ -1227,6 +1227,7 @@ AC_CHECK_FUNCS( strtoll \
basename \ basename \
setlocale \ setlocale \
ftruncate \ ftruncate \
pipe \
poll, poll,
dnl if found dnl if found
[], [],

View File

@ -109,3 +109,9 @@
/* Define to 1 if you have the `gettimeofday' function. */ /* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY #undef HAVE_GETTIMEOFDAY
/* Define to 1 if you have the `ftruncate' function. */
#undef HAVE_FTRUNCATE
/* Define to 1 if you have the `pipe' function. */
#undef HAVE_PIPE

View File

@ -3771,12 +3771,35 @@ operate(struct Configurable *config, int argc, char *argv[])
return res; return res;
} }
static void checkfds(void);
static void checkfds(void)
{
#ifdef HAVE_PIPE
int fd[2] = { STDIN_FILENO, STDIN_FILENO };
while( fd[0] == STDIN_FILENO ||
fd[0] == STDOUT_FILENO ||
fd[0] == STDERR_FILENO ||
fd[1] == STDIN_FILENO ||
fd[1] == STDOUT_FILENO ||
fd[1] == STDERR_FILENO )
pipe(fd);
close(fd[0]);
close(fd[1]);
#endif
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int res; int res;
struct Configurable config; struct Configurable config;
memset(&config, 0, sizeof(struct Configurable)); memset(&config, 0, sizeof(struct Configurable));
checkfds();
res = operate(&config, argc, argv); res = operate(&config, argc, argv);
free_config_fields(&config); free_config_fields(&config);