[Pkg-gnupg-commit] [libassuan] 386/437: Make assuan_transact more robust against inquiry errors.
Eric Dorland
eric at moszumanska.debian.org
Fri May 22 05:34:07 UTC 2015
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository libassuan.
commit f17039b1ece8a8b2c56766f86b002536c7599699
Author: Werner Koch <wk at gnupg.org>
Date: Thu Feb 7 20:42:44 2013 +0100
Make assuan_transact more robust against inquiry errors.
* src/client.c (assuan_transact): Send an CAN after an error return
from the inquiry callback.
---
src/client.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/src/client.c b/src/client.c
index 64efffd..de0e88b 100644
--- a/src/client.c
+++ b/src/client.c
@@ -79,7 +79,7 @@ assuan_client_read_response (assuan_context_t ctx,
*line_r = NULL;
*linelen_r = 0;
- do
+ do
{
do
{
@@ -90,7 +90,7 @@ assuan_client_read_response (assuan_context_t ctx,
return rc;
line = ctx->inbound.line;
linelen = ctx->inbound.linelen;
- }
+ }
while (!linelen);
/* For data lines, we deescape immediately. The user will never
@@ -137,14 +137,14 @@ assuan_client_parse_response (assuan_context_t ctx, char *line, int linelen,
*off = 2;
}
else if (linelen >= 1
- && line[0] == 'S'
+ && line[0] == 'S'
&& (line[1] == '\0' || line[1] == ' '))
{
*response = ASSUAN_RESPONSE_STATUS;
*off = 1;
while (line[*off] == ' ')
++*off;
- }
+ }
else if (linelen >= 2
&& line[0] == 'O' && line[1] == 'K'
&& (line[2] == '\0' || line[2] == ' '))
@@ -162,11 +162,11 @@ assuan_client_parse_response (assuan_context_t ctx, char *line, int linelen,
*off = 3;
while (line[*off] == ' ')
++*off;
- }
+ }
else if (linelen >= 7
&& line[0] == 'I' && line[1] == 'N' && line[2] == 'Q'
&& line[3] == 'U' && line[4] == 'I' && line[5] == 'R'
- && line[6] == 'E'
+ && line[6] == 'E'
&& (line[7] == '\0' || line[7] == ' '))
{
*response = ASSUAN_RESPONSE_INQUIRE;
@@ -225,9 +225,9 @@ _assuan_read_from_server (assuan_context_t ctx, assuan_response_t *response,
* @inquire_cb_arg: first argument passed to @inquire_cb
* @status_cb: Callback function for a status response
* @status_cb_arg: first argument passed to @status_cb
- *
+ *
* FIXME: Write documentation
- *
+ *
* Return value: 0 on success or an error code. The error code may be
* the one one returned by the server via error lines or from the
* callback functions. Take care: If a callback returns an error
@@ -271,7 +271,7 @@ assuan_transact (assuan_context_t ctx,
{
if (!data_cb)
rc = _assuan_error (ctx, GPG_ERR_ASS_NO_DATA_CB);
- else
+ else
{
rc = data_cb (data_cb_arg, line, linelen);
if (!rc)
@@ -291,6 +291,15 @@ assuan_transact (assuan_context_t ctx,
rc = inquire_cb (inquire_cb_arg, line);
if (!rc)
rc = assuan_send_data (ctx, NULL, 0); /* flush and send END */
+ else
+ { /* Flush and send CAN. */
+ /* Note that in this error case we don't want to return
+ an error code from sending the cancel. The dummy
+ read is to remove the response from the server which
+ we are not interested in. */
+ assuan_send_data (ctx, NULL, 1);
+ _assuan_read_from_server (ctx, &response, &off, 0);
+ }
if (!rc)
goto again;
}
@@ -314,7 +323,7 @@ assuan_transact (assuan_context_t ctx,
{
if (!data_cb)
rc = _assuan_error (ctx, GPG_ERR_ASS_NO_DATA_CB);
- else
+ else
{
rc = data_cb (data_cb_arg, NULL, 0);
if (!rc)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/libassuan.git
More information about the Pkg-gnupg-commit
mailing list