113498266Sopenharmony_ci/*************************************************************************** 213498266Sopenharmony_ci * _ _ ____ _ 313498266Sopenharmony_ci * Project ___| | | | _ \| | 413498266Sopenharmony_ci * / __| | | | |_) | | 513498266Sopenharmony_ci * | (__| |_| | _ <| |___ 613498266Sopenharmony_ci * \___|\___/|_| \_\_____| 713498266Sopenharmony_ci * 813498266Sopenharmony_ci * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 913498266Sopenharmony_ci * 1013498266Sopenharmony_ci * This software is licensed as described in the file COPYING, which 1113498266Sopenharmony_ci * you should have received as part of this distribution. The terms 1213498266Sopenharmony_ci * are also available at https://curl.se/docs/copyright.html. 1313498266Sopenharmony_ci * 1413498266Sopenharmony_ci * You may opt to use, copy, modify, merge, publish, distribute and/or sell 1513498266Sopenharmony_ci * copies of the Software, and permit persons to whom the Software is 1613498266Sopenharmony_ci * furnished to do so, under the terms of the COPYING file. 1713498266Sopenharmony_ci * 1813498266Sopenharmony_ci * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 1913498266Sopenharmony_ci * KIND, either express or implied. 2013498266Sopenharmony_ci * 2113498266Sopenharmony_ci * SPDX-License-Identifier: curl 2213498266Sopenharmony_ci * 2313498266Sopenharmony_ci ***************************************************************************/ 2413498266Sopenharmony_ci#include "curlcheck.h" 2513498266Sopenharmony_ci#include "curl_get_line.h" 2613498266Sopenharmony_ci 2713498266Sopenharmony_ci#if !defined(CURL_DISABLE_COOKIES) || !defined(CURL_DISABLE_ALTSVC) || \ 2813498266Sopenharmony_ci !defined(CURL_DISABLE_HSTS) || !defined(CURL_DISABLE_NETRC) 2913498266Sopenharmony_ci 3013498266Sopenharmony_ci/* The test XML does not supply a way to write files without newlines 3113498266Sopenharmony_ci * so we write our own 3213498266Sopenharmony_ci */ 3313498266Sopenharmony_ci 3413498266Sopenharmony_ci#define C64 "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" 3513498266Sopenharmony_ci#define C256 C64 C64 C64 C64 3613498266Sopenharmony_ci#define C1024 C256 C256 C256 C256 3713498266Sopenharmony_ci#define C4096 C1024 C1024 C1024 C1024 3813498266Sopenharmony_ci 3913498266Sopenharmony_cistatic CURLcode unit_setup(void) 4013498266Sopenharmony_ci{ 4113498266Sopenharmony_ci return CURLE_OK; 4213498266Sopenharmony_ci} 4313498266Sopenharmony_ci 4413498266Sopenharmony_cistatic CURLcode unit_stop(void) 4513498266Sopenharmony_ci{ 4613498266Sopenharmony_ci return CURLE_OK; 4713498266Sopenharmony_ci} 4813498266Sopenharmony_ci 4913498266Sopenharmony_ci#ifdef __GNUC__ 5013498266Sopenharmony_ci#pragma GCC diagnostic push 5113498266Sopenharmony_ci#pragma GCC diagnostic ignored "-Woverlength-strings" 5213498266Sopenharmony_ci#endif 5313498266Sopenharmony_ci 5413498266Sopenharmony_ci#define NUMTESTS 6 5513498266Sopenharmony_cistatic const char *filecontents[] = { 5613498266Sopenharmony_ci /* Both should be read */ 5713498266Sopenharmony_ci "LINE1\n" 5813498266Sopenharmony_ci "LINE2 NEWLINE\n", 5913498266Sopenharmony_ci 6013498266Sopenharmony_ci /* Both should be read */ 6113498266Sopenharmony_ci "LINE1\n" 6213498266Sopenharmony_ci "LINE2 NONEWLINE", 6313498266Sopenharmony_ci 6413498266Sopenharmony_ci /* Only first should be read */ 6513498266Sopenharmony_ci "LINE1\n" 6613498266Sopenharmony_ci C4096, 6713498266Sopenharmony_ci 6813498266Sopenharmony_ci /* First line should be read */ 6913498266Sopenharmony_ci "LINE1\n" 7013498266Sopenharmony_ci C4096 "SOME EXTRA TEXT", 7113498266Sopenharmony_ci 7213498266Sopenharmony_ci /* First and third line should be read */ 7313498266Sopenharmony_ci "LINE1\n" 7413498266Sopenharmony_ci C4096 "SOME EXTRA TEXT\n" 7513498266Sopenharmony_ci "LINE3\n", 7613498266Sopenharmony_ci 7713498266Sopenharmony_ci "LINE1\x1aTEST" 7813498266Sopenharmony_ci}; 7913498266Sopenharmony_ci 8013498266Sopenharmony_ci#ifdef __GNUC__ 8113498266Sopenharmony_ci#pragma GCC diagnostic warning "-Woverlength-strings" 8213498266Sopenharmony_ci#endif 8313498266Sopenharmony_ci 8413498266Sopenharmony_ci 8513498266Sopenharmony_ciUNITTEST_START 8613498266Sopenharmony_ci size_t i; 8713498266Sopenharmony_ci for(i = 0; i < NUMTESTS; i++) { 8813498266Sopenharmony_ci FILE *fp; 8913498266Sopenharmony_ci char buf[4096]; 9013498266Sopenharmony_ci int len = 4096; 9113498266Sopenharmony_ci char *line; 9213498266Sopenharmony_ci 9313498266Sopenharmony_ci fp = fopen(arg, "wb"); 9413498266Sopenharmony_ci abort_unless(fp != NULL, "Cannot open testfile"); 9513498266Sopenharmony_ci fwrite(filecontents[i], 1, strlen(filecontents[i]), fp); 9613498266Sopenharmony_ci fclose(fp); 9713498266Sopenharmony_ci 9813498266Sopenharmony_ci fp = fopen(arg, "rb"); 9913498266Sopenharmony_ci abort_unless(fp != NULL, "Cannot open testfile"); 10013498266Sopenharmony_ci 10113498266Sopenharmony_ci fprintf(stderr, "Test %zd...", i); 10213498266Sopenharmony_ci switch(i) { 10313498266Sopenharmony_ci case 0: 10413498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 10513498266Sopenharmony_ci fail_unless(line && !strcmp("LINE1\n", line), 10613498266Sopenharmony_ci "First line failed (1)"); 10713498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 10813498266Sopenharmony_ci fail_unless(line && !strcmp("LINE2 NEWLINE\n", line), 10913498266Sopenharmony_ci "Second line failed (1)"); 11013498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 11113498266Sopenharmony_ci abort_unless(line == NULL, "Missed EOF (1)"); 11213498266Sopenharmony_ci break; 11313498266Sopenharmony_ci case 1: 11413498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 11513498266Sopenharmony_ci fail_unless(line && !strcmp("LINE1\n", line), 11613498266Sopenharmony_ci "First line failed (2)"); 11713498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 11813498266Sopenharmony_ci fail_unless(line && !strcmp("LINE2 NONEWLINE\n", line), 11913498266Sopenharmony_ci "Second line failed (2)"); 12013498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 12113498266Sopenharmony_ci abort_unless(line == NULL, "Missed EOF (2)"); 12213498266Sopenharmony_ci break; 12313498266Sopenharmony_ci case 2: 12413498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 12513498266Sopenharmony_ci fail_unless(line && !strcmp("LINE1\n", line), 12613498266Sopenharmony_ci "First line failed (3)"); 12713498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 12813498266Sopenharmony_ci fail_unless(line == NULL, 12913498266Sopenharmony_ci "Did not detect max read on EOF (3)"); 13013498266Sopenharmony_ci break; 13113498266Sopenharmony_ci case 3: 13213498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 13313498266Sopenharmony_ci fail_unless(line && !strcmp("LINE1\n", line), 13413498266Sopenharmony_ci "First line failed (4)"); 13513498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 13613498266Sopenharmony_ci fail_unless(line == NULL, 13713498266Sopenharmony_ci "Did not ignore partial on EOF (4)"); 13813498266Sopenharmony_ci break; 13913498266Sopenharmony_ci case 4: 14013498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 14113498266Sopenharmony_ci fail_unless(line && !strcmp("LINE1\n", line), 14213498266Sopenharmony_ci "First line failed (5)"); 14313498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 14413498266Sopenharmony_ci fail_unless(line && !strcmp("LINE3\n", line), 14513498266Sopenharmony_ci "Third line failed (5)"); 14613498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 14713498266Sopenharmony_ci abort_unless(line == NULL, "Missed EOF (5)"); 14813498266Sopenharmony_ci break; 14913498266Sopenharmony_ci case 5: 15013498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 15113498266Sopenharmony_ci fail_unless(line && !strcmp("LINE1\x1aTEST\n", line), 15213498266Sopenharmony_ci "Missed/Misinterpreted ^Z (6)"); 15313498266Sopenharmony_ci line = Curl_get_line(buf, len, fp); 15413498266Sopenharmony_ci abort_unless(line == NULL, "Missed EOF (6)"); 15513498266Sopenharmony_ci break; 15613498266Sopenharmony_ci default: 15713498266Sopenharmony_ci abort_unless(1, "Unknown case"); 15813498266Sopenharmony_ci break; 15913498266Sopenharmony_ci } 16013498266Sopenharmony_ci fclose(fp); 16113498266Sopenharmony_ci fprintf(stderr, "OK\n"); 16213498266Sopenharmony_ci } 16313498266Sopenharmony_ciUNITTEST_STOP 16413498266Sopenharmony_ci 16513498266Sopenharmony_ci#ifdef __GNUC__ 16613498266Sopenharmony_ci#pragma GCC diagnostic pop 16713498266Sopenharmony_ci#endif 16813498266Sopenharmony_ci 16913498266Sopenharmony_ci#else 17013498266Sopenharmony_cistatic CURLcode unit_setup(void) 17113498266Sopenharmony_ci{ 17213498266Sopenharmony_ci return CURLE_OK; 17313498266Sopenharmony_ci} 17413498266Sopenharmony_cistatic void unit_stop(void) 17513498266Sopenharmony_ci{ 17613498266Sopenharmony_ci} 17713498266Sopenharmony_ciUNITTEST_START 17813498266Sopenharmony_ciUNITTEST_STOP 17913498266Sopenharmony_ci 18013498266Sopenharmony_ci#endif 181