mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 15:48:49 -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: */
|
||||
memset(&data->progress, 0, sizeof(struct Progress));
|
||||
|
||||
/* zero out PureInfo data: */
|
||||
Curl_initinfo(data);
|
||||
|
||||
data->progress.flags |= PGRS_HIDE;
|
||||
data->state.current_speed = -1; /* init to negative == impossible */
|
||||
}
|
||||
|
@ -36,8 +36,8 @@
|
||||
#include "memdebug.h"
|
||||
|
||||
/*
|
||||
* This is supposed to be called in the beginning of a perform() session
|
||||
* and should reset all session-info variables
|
||||
* This is supposed to be called in the beginning of a perform() session and
|
||||
* in curl_easy_reset() and should reset all session-info variables.
|
||||
*/
|
||||
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->timecond = FALSE;
|
||||
|
||||
info->header_size = 0;
|
||||
info->request_size = 0;
|
||||
info->proxyauthavail = 0;
|
||||
info->httpauthavail = 0;
|
||||
info->numconnects = 0;
|
||||
|
||||
free(info->contenttype);
|
||||
info->contenttype = NULL;
|
||||
|
||||
info->header_size = 0;
|
||||
info->request_size = 0;
|
||||
info->numconnects = 0;
|
||||
free(info->wouldredirect);
|
||||
info->wouldredirect = NULL;
|
||||
|
||||
info->conn_primary_ip[0] = '\0';
|
||||
info->conn_local_ip[0] = '\0';
|
||||
info->conn_primary_port = 0;
|
||||
info->conn_local_port = 0;
|
||||
|
||||
#ifdef USE_SSL
|
||||
Curl_ssl_free_certinfo(data);
|
||||
#endif
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
|
@ -1104,6 +1104,7 @@ struct connectdata {
|
||||
|
||||
/*
|
||||
* Struct to keep statistical and informational data.
|
||||
* All variables in this struct must be reset in Curl_initinfo().
|
||||
*/
|
||||
struct PureInfo {
|
||||
int httpcode; /* Recent HTTP, FTP, RTSP or SMTP response code */
|
||||
|
@ -156,7 +156,7 @@ test1516 test1517 \
|
||||
\
|
||||
test1520 \
|
||||
\
|
||||
test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
|
||||
test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
|
||||
\
|
||||
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 \
|
||||
lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 lib1517 \
|
||||
lib1520 \
|
||||
lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 \
|
||||
lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 \
|
||||
lib1900 \
|
||||
lib2033
|
||||
|
||||
@ -391,6 +391,10 @@ lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
|
||||
lib1531_LDADD = $(TESTUTIL_LIBS)
|
||||
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_LDADD = $(TESTUTIL_LIBS)
|
||||
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