* assuan-buffer.c (assuan_write_line): Make sure we never
authorWerner Koch <wk@gnupg.org>
Wed, 26 Jun 2002 12:51:15 +0000 (12:51 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 26 Jun 2002 12:51:15 +0000 (12:51 +0000)
accidently print an extra LF.

assuan/ChangeLog
assuan/assuan-buffer.c

index bb74b7c..8b9bd3f 100644 (file)
@@ -1,3 +1,8 @@
+2002-06-26  Werner Koch  <wk@gnupg.org>
+
+       * assuan-buffer.c (assuan_write_line): Make sure we never
+       accidently print an extra LF.
+
 2002-05-23  Werner Koch  <wk@gnupg.org>
 
        * assuan-util.c (assuan_set_io_func): New.
index da6b201..4509f74 100644 (file)
@@ -241,23 +241,31 @@ AssuanError
 assuan_write_line (ASSUAN_CONTEXT ctx, const char *line )
 {
   int rc;
-  
+  size_t len;
+  const char *s;
+
   if (!ctx)
     return ASSUAN_Invalid_Value;
 
-  /* fixme: we should do some kind of line buffering */
+  /* Make sure that we never take a LF from the user - this might
+     violate the protocol. */
+  s = strchr (line, '\n');
+  len = s? (s-line) : strlen (line);
+
+  /* fixme: we should do some kind of line buffering.  */
   if (ctx->log_fp)
     {
       fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx); 
+      if (s)
+        fputs ("[supplied line contained a LF]", ctx->log_fp);
       if (ctx->confidential)
         fputs ("[Confidential data not shown]", ctx->log_fp);
       else
-        _assuan_log_print_buffer (ctx->log_fp, 
-                                  line, strlen (line));
+        _assuan_log_print_buffer (ctx->log_fp, line, len);
       putc ('\n', ctx->log_fp);
     }
 
-  rc = writen (ctx->outbound.fd, line, strlen(line));
+  rc = writen (ctx->outbound.fd, line, len);
   if (rc)
     rc = ASSUAN_Write_Error;
   if (!rc)