mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
easy: Reset all statistical session info in curl_easy_reset
Bug: https://github.com/curl/curl/issues/1017 Reported-by: Jeroen Ooms
This commit is contained in:
parent
6834ebaaa3
commit
22cfeac730
@ -995,6 +995,9 @@ void curl_easy_reset(struct Curl_easy *data)
|
|||||||
/* zero out Progress data: */
|
/* zero out Progress data: */
|
||||||
memset(&data->progress, 0, sizeof(struct Progress));
|
memset(&data->progress, 0, sizeof(struct Progress));
|
||||||
|
|
||||||
|
/* zero out PureInfo data: */
|
||||||
|
Curl_initinfo(data);
|
||||||
|
|
||||||
data->progress.flags |= PGRS_HIDE;
|
data->progress.flags |= PGRS_HIDE;
|
||||||
data->state.current_speed = -1; /* init to negative == impossible */
|
data->state.current_speed = -1; /* init to negative == impossible */
|
||||||
}
|
}
|
||||||
|
@ -36,8 +36,8 @@
|
|||||||
#include "memdebug.h"
|
#include "memdebug.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is supposed to be called in the beginning of a perform() session
|
* This is supposed to be called in the beginning of a perform() session and
|
||||||
* and should reset all session-info variables
|
* in curl_easy_reset() and should reset all session-info variables.
|
||||||
*/
|
*/
|
||||||
CURLcode Curl_initinfo(struct Curl_easy *data)
|
CURLcode Curl_initinfo(struct Curl_easy *data)
|
||||||
{
|
{
|
||||||
@ -58,18 +58,27 @@ CURLcode Curl_initinfo(struct Curl_easy *data)
|
|||||||
info->filetime = -1; /* -1 is an illegal time and thus means unknown */
|
info->filetime = -1; /* -1 is an illegal time and thus means unknown */
|
||||||
info->timecond = FALSE;
|
info->timecond = FALSE;
|
||||||
|
|
||||||
|
info->header_size = 0;
|
||||||
|
info->request_size = 0;
|
||||||
|
info->proxyauthavail = 0;
|
||||||
|
info->httpauthavail = 0;
|
||||||
|
info->numconnects = 0;
|
||||||
|
|
||||||
free(info->contenttype);
|
free(info->contenttype);
|
||||||
info->contenttype = NULL;
|
info->contenttype = NULL;
|
||||||
|
|
||||||
info->header_size = 0;
|
free(info->wouldredirect);
|
||||||
info->request_size = 0;
|
info->wouldredirect = NULL;
|
||||||
info->numconnects = 0;
|
|
||||||
|
|
||||||
info->conn_primary_ip[0] = '\0';
|
info->conn_primary_ip[0] = '\0';
|
||||||
info->conn_local_ip[0] = '\0';
|
info->conn_local_ip[0] = '\0';
|
||||||
info->conn_primary_port = 0;
|
info->conn_primary_port = 0;
|
||||||
info->conn_local_port = 0;
|
info->conn_local_port = 0;
|
||||||
|
|
||||||
|
#ifdef USE_SSL
|
||||||
|
Curl_ssl_free_certinfo(data);
|
||||||
|
#endif
|
||||||
|
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1104,6 +1104,7 @@ struct connectdata {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Struct to keep statistical and informational data.
|
* Struct to keep statistical and informational data.
|
||||||
|
* All variables in this struct must be reset in Curl_initinfo().
|
||||||
*/
|
*/
|
||||||
struct PureInfo {
|
struct PureInfo {
|
||||||
int httpcode; /* Recent HTTP, FTP, RTSP or SMTP response code */
|
int httpcode; /* Recent HTTP, FTP, RTSP or SMTP response code */
|
||||||
|
@ -156,7 +156,7 @@ test1516 test1517 \
|
|||||||
\
|
\
|
||||||
test1520 \
|
test1520 \
|
||||||
\
|
\
|
||||||
test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
|
test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
|
||||||
\
|
\
|
||||||
test1600 test1601 test1602 test1603 test1604 test1605 \
|
test1600 test1601 test1602 test1603 test1604 test1605 \
|
||||||
\
|
\
|
||||||
|
49
tests/data/test1532
Normal file
49
tests/data/test1532
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<testcase>
|
||||||
|
<info>
|
||||||
|
<keywords>
|
||||||
|
HTTP
|
||||||
|
HTTP GET
|
||||||
|
</keywords>
|
||||||
|
</info>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Server-side
|
||||||
|
<reply>
|
||||||
|
<data nocheck="yes">
|
||||||
|
HTTP/1.0 200 OK swsclose
|
||||||
|
Content-Length: 0
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</reply>
|
||||||
|
|
||||||
|
# Client-side
|
||||||
|
<client>
|
||||||
|
<server>
|
||||||
|
http
|
||||||
|
</server>
|
||||||
|
# tool is what to use instead of 'curl'
|
||||||
|
<tool>
|
||||||
|
lib1532
|
||||||
|
</tool>
|
||||||
|
<name>
|
||||||
|
Test CURLINFO_RESPONSE_CODE
|
||||||
|
</name>
|
||||||
|
<command>
|
||||||
|
http://%HOSTIP:%HTTPPORT/1532
|
||||||
|
</command>
|
||||||
|
</client>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Verify data after the test has been "shot"
|
||||||
|
<verify>
|
||||||
|
<protocol>
|
||||||
|
GET /1532 HTTP/1.1
|
||||||
|
Host: %HOSTIP:%HTTPPORT
|
||||||
|
Accept: */*
|
||||||
|
|
||||||
|
</protocol>
|
||||||
|
<errorcode>
|
||||||
|
0
|
||||||
|
</errorcode>
|
||||||
|
</verify>
|
||||||
|
</testcase>
|
@ -23,7 +23,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect \
|
|||||||
lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \
|
lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \
|
||||||
lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 lib1517 \
|
lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 lib1517 \
|
||||||
lib1520 \
|
lib1520 \
|
||||||
lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 \
|
lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 \
|
||||||
lib1900 \
|
lib1900 \
|
||||||
lib2033
|
lib2033
|
||||||
|
|
||||||
@ -391,6 +391,10 @@ lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
|
|||||||
lib1531_LDADD = $(TESTUTIL_LIBS)
|
lib1531_LDADD = $(TESTUTIL_LIBS)
|
||||||
lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
|
lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
|
||||||
|
|
||||||
|
lib1532_SOURCES = lib1532.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
|
||||||
|
lib1532_LDADD = $(TESTUTIL_LIBS)
|
||||||
|
lib1532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1532
|
||||||
|
|
||||||
lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
|
lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
|
||||||
lib1900_LDADD = $(TESTUTIL_LIBS)
|
lib1900_LDADD = $(TESTUTIL_LIBS)
|
||||||
lib1900_CPPFLAGS = $(AM_CPPFLAGS)
|
lib1900_CPPFLAGS = $(AM_CPPFLAGS)
|
||||||
|
80
tests/libtest/lib1532.c
Normal file
80
tests/libtest/lib1532.c
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* _ _ ____ _
|
||||||
|
* Project ___| | | | _ \| |
|
||||||
|
* / __| | | | |_) | |
|
||||||
|
* | (__| |_| | _ <| |___
|
||||||
|
* \___|\___/|_| \_\_____|
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
*
|
||||||
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
* copies of the Software, and permit persons to whom the Software is
|
||||||
|
* furnished to do so, under the terms of the COPYING file.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#include "test.h"
|
||||||
|
|
||||||
|
#include "memdebug.h"
|
||||||
|
|
||||||
|
/* Test CURLINFO_RESPONSE_CODE */
|
||||||
|
|
||||||
|
int test(char *URL)
|
||||||
|
{
|
||||||
|
CURL *curl;
|
||||||
|
long httpcode;
|
||||||
|
int res = CURLE_OK;
|
||||||
|
|
||||||
|
global_init(CURL_GLOBAL_ALL);
|
||||||
|
|
||||||
|
easy_init(curl);
|
||||||
|
|
||||||
|
easy_setopt(curl, CURLOPT_URL, URL);
|
||||||
|
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
if(res) {
|
||||||
|
fprintf(stderr, "%s:%d curl_easy_perform() failed with code %d (%s)\n",
|
||||||
|
__FILE__, __LINE__, res, curl_easy_strerror(res));
|
||||||
|
goto test_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);
|
||||||
|
if(res) {
|
||||||
|
fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
|
||||||
|
__FILE__, __LINE__, res, curl_easy_strerror(res));
|
||||||
|
goto test_cleanup;
|
||||||
|
}
|
||||||
|
if(httpcode != 200) {
|
||||||
|
fprintf(stderr, "%s:%d unexpected response code %ld\n",
|
||||||
|
__FILE__, __LINE__, httpcode);
|
||||||
|
res = CURLE_HTTP_RETURNED_ERROR;
|
||||||
|
goto test_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test for a regression of github bug 1017 (response code does not reset) */
|
||||||
|
curl_easy_reset(curl);
|
||||||
|
|
||||||
|
res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpcode);
|
||||||
|
if(res) {
|
||||||
|
fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
|
||||||
|
__FILE__, __LINE__, res, curl_easy_strerror(res));
|
||||||
|
goto test_cleanup;
|
||||||
|
}
|
||||||
|
if(httpcode != 0) {
|
||||||
|
fprintf(stderr, "%s:%d curl_easy_reset failed to zero the response code\n"
|
||||||
|
"possible regression of github bug 1017\n", __FILE__, __LINE__);
|
||||||
|
res = CURLE_HTTP_RETURNED_ERROR;
|
||||||
|
goto test_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
test_cleanup:
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
curl_global_cleanup();
|
||||||
|
return res;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user