From e64c28e243d797da4ef76d6e89598f7fc2da8869 Mon Sep 17 00:00:00 2001 From: TheBitBrine Date: Sun, 26 Oct 2025 04:39:02 +0000 Subject: [PATCH] imap: fix custom FETCH commands to handle literal responses Custom IMAP commands using -X (e.g. 'FETCH 123 BODY[1]') were only returning the first line of responses containing literals, instead of the full multi-line body data. The issue was that custom commands route through imap_perform_list() and imap_state_listsearch_resp(), which didn't detect or handle IMAP literal syntax {size}. This commit adds literal detection to imap_state_listsearch_resp(): - Detects literal syntax {size} in untagged responses - Writes the response header line containing the literal marker - Handles any literal body data already in the pingpong buffer - Sets up transfer layer to read remaining literal data from socket - Configures maxdownload and transfer size to include header + body - Initializes pp->overflow to 0 when no buffered data present - Modifies imap_done() to transition to FETCH_FINAL for custom commands that set up downloads Test 841 and 3206 verify. Fixes #18847 Reported-by: BohwaZ Bug: https://github.com/curl/curl/issues/18847 Closes #19246 --- lib/imap.c | 104 ++++++++++++++++- tests/data/Makefile.am | 2 +- tests/data/test3206 | 248 +++++++++++++++++++++++++++++++++++++++++ tests/data/test841 | 5 + 4 files changed, 352 insertions(+), 7 deletions(-) create mode 100644 tests/data/test3206 diff --git a/lib/imap.c b/lib/imap.c index 8cbda96a05..1902619a6f 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -1197,8 +1197,97 @@ static CURLcode imap_state_listsearch_resp(struct Curl_easy *data, (void)instate; - if(imapcode == '*') - result = Curl_client_write(data, CLIENTWRITE_BODY, line, len); + if(imapcode == '*') { + /* Check if this response contains a literal (e.g. FETCH responses with + body data). Literal syntax is {size}\r\n */ + const char *cr = memchr(line, '\r', len); + size_t line_len = cr ? (size_t)(cr - line) : len; + const char *ptr = memchr(line, '{', line_len); + if(ptr) { + curl_off_t size = 0; + bool parsed = FALSE; + ptr++; + if(!curlx_str_number(&ptr, &size, CURL_OFF_T_MAX) && + !curlx_str_single(&ptr, '}')) + parsed = TRUE; + + if(parsed) { + struct pingpong *pp = &imapc->pp; + size_t buffer_len = curlx_dyn_len(&pp->recvbuf); + size_t after_header = buffer_len - pp->nfinal; + + /* This is a literal response, setup to receive the body data */ + infof(data, "Found %" FMT_OFF_T " bytes to download", size); + /* Progress size includes both header line and literal body */ + Curl_pgrsSetDownloadSize(data, size + len); + + /* First write the header line */ + result = Curl_client_write(data, CLIENTWRITE_BODY, line, len); + if(result) + return result; + + /* Handle data already in buffer after the header line */ + if(after_header > 0) { + /* There is already data in the buffer that is part of the literal + body or subsequent responses */ + size_t chunk = after_header; + + /* Keep only the data after the header line */ + curlx_dyn_tail(&pp->recvbuf, chunk); + pp->nfinal = 0; /* done */ + + /* Limit chunk to the literal size */ + if(chunk > (size_t)size) + chunk = (size_t)size; + + if(chunk) { + /* Write the literal body data */ + result = Curl_client_write(data, CLIENTWRITE_BODY, + curlx_dyn_ptr(&pp->recvbuf), chunk); + if(result) + return result; + } + + /* Handle remaining data in buffer (either more literal data or + subsequent responses) */ + if(after_header > chunk) { + /* Keep the data after the literal body */ + pp->overflow = after_header - chunk; + curlx_dyn_tail(&pp->recvbuf, pp->overflow); + } + else { + pp->overflow = 0; + curlx_dyn_reset(&pp->recvbuf); + } + } + else { + /* No data in buffer yet, reset overflow */ + pp->overflow = 0; + } + + if(data->req.bytecount == size + (curl_off_t)len) + /* All data already transferred (header + literal body) */ + Curl_xfer_setup_nop(data); + else { + /* Setup to receive the literal body data. + maxdownload and transfer size include both header line and + literal body */ + data->req.maxdownload = size + len; + Curl_xfer_setup_recv(data, FIRSTSOCKET, size + len); + } + /* End of DO phase */ + imap_state(data, imapc, IMAP_STOP); + } + else { + /* Failed to parse literal, just write the line */ + result = Curl_client_write(data, CLIENTWRITE_BODY, line, len); + } + } + else { + /* No literal, just write the line as-is */ + result = Curl_client_write(data, CLIENTWRITE_BODY, line, len); + } + } else if(imapcode != IMAP_RESP_OK) result = CURLE_QUOTE_ERROR; else @@ -1631,10 +1720,13 @@ static CURLcode imap_done(struct Curl_easy *data, CURLcode status, connclose(conn, "IMAP done with bad status"); /* marked for closure */ result = status; /* use the already set error code */ } - else if(!data->set.connect_only && !imap->custom && - (imap->uid || imap->mindex || data->state.upload || - IS_MIME_POST(data))) { - /* Handle responses after FETCH or APPEND transfer has finished */ + else if(!data->set.connect_only && + ((!imap->custom && (imap->uid || imap->mindex)) || + (imap->custom && data->req.maxdownload > 0) || + data->state.upload || IS_MIME_POST(data))) { + /* Handle responses after FETCH or APPEND transfer has finished. + For custom commands, check if we set up a download which indicates + a FETCH-like command with literal data. */ if(!data->state.upload && !IS_MIME_POST(data)) imap_state(data, imapc, IMAP_FETCH_FINAL); diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 1d7445363d..22d6eca235 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -279,7 +279,7 @@ test3032 test3033 test3034 test3035 \ \ test3100 test3101 test3102 test3103 test3104 test3105 \ \ -test3200 test3201 test3202 test3203 test3204 test3205 test3207 test3208 \ +test3200 test3201 test3202 test3203 test3204 test3205 test3206 test3207 test3208 \ test3209 test3210 test3211 test3212 test3213 test3214 test3215 \ test4000 test4001 diff --git a/tests/data/test3206 b/tests/data/test3206 new file mode 100644 index 0000000000..2bcb82e152 --- /dev/null +++ b/tests/data/test3206 @@ -0,0 +1,248 @@ + + + +IMAP +Clear Text +FETCH +CUSTOMREQUEST + + + +# +# Server-side + + +Line 001: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 002: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 003: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 004: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 005: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 006: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 007: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 008: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 009: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 010: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 011: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 012: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 013: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 014: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 015: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 016: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 017: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 018: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 019: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 020: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 021: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 022: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 023: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 024: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 025: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 026: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 027: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 028: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 029: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 030: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 031: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 032: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 033: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 034: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 035: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 036: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 037: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 038: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 039: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 040: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 041: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 042: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 043: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 044: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 045: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 046: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 047: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 048: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 049: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 050: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 051: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 052: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 053: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 054: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 055: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 056: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 057: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 058: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 059: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 060: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 061: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 062: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 063: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 064: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 065: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 066: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 067: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 068: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 069: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 070: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 071: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 072: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 073: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 074: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 075: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 076: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 077: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 078: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 079: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 080: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 081: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 082: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 083: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 084: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 085: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 086: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 087: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 088: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 089: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 090: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 091: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 092: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 093: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 094: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 095: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 096: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 097: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 098: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 099: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 100: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX + + + +* 456 FETCH (BODY[TEXT] {7101} +Line 001: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 002: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 003: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 004: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 005: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 006: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 007: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 008: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 009: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 010: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 011: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 012: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 013: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 014: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 015: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 016: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 017: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 018: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 019: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 020: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 021: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 022: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 023: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 024: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 025: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 026: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 027: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 028: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 029: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 030: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 031: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 032: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 033: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 034: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 035: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 036: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 037: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 038: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 039: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 040: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 041: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 042: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 043: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 044: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 045: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 046: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 047: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 048: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 049: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 050: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 051: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 052: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 053: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 054: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 055: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 056: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 057: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 058: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 059: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 060: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 061: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 062: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 063: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 064: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 065: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 066: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 067: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 068: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 069: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 070: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 071: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 072: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 073: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 074: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 075: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 076: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 077: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 078: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 079: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 080: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 081: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 082: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 083: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 084: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 085: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 086: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 087: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 088: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 089: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 090: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 091: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 092: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 093: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 094: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 095: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 096: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 097: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 098: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 099: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX +Line 100: Testing large IMAP literal with custom FETCH. XXXXXXXXXXXXX + + + + +# +# Client-side + + +imap + + +IMAP custom FETCH with larger literal response (~7KB) + + + imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/ -u user:secret -X 'FETCH 456 BODY[TEXT]' + + + +# +# Verify data after the test has been "shot" + + +A001 CAPABILITY +A002 LOGIN user secret +A003 SELECT %TESTNUMBER +A004 FETCH 456 BODY[TEXT] +A005 LOGOUT + + + diff --git a/tests/data/test841 b/tests/data/test841 index cc1d075fbc..debf6cfb84 100644 --- a/tests/data/test841 +++ b/tests/data/test841 @@ -20,6 +20,11 @@ body * 123 FETCH (BODY[1] {70} +body + ++ Curl did not used to like this line +-- + yours sincerely -- 2.47.3