X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/1e3b8b0749ec6793df5d8a9aca41ad4cae79bd4a..HEAD:/uuencode.c diff --git a/uuencode.c b/uuencode.c index 01b84576..b9e57e99 100644 --- a/uuencode.c +++ b/uuencode.c @@ -1,5 +1,4 @@ -/* $OpenBSD: uuencode.c,v 1.8 2000/12/19 23:17:59 markus Exp $ */ - +/* $OpenBSD: uuencode.c,v 1.25 2009/03/05 11:30:50 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * @@ -25,17 +24,33 @@ */ #include "includes.h" -#include "xmalloc.h" -RCSID("$OpenBSD: uuencode.c,v 1.8 2000/12/19 23:17:59 markus Exp $"); +#include +#include +#include +#include +#include "xmalloc.h" +#include "uuencode.h" + +/* + * Encode binary 'src' of length 'srclength', writing base64-encoded text + * to 'target' of size 'targsize'. Will always nul-terminate 'target'. + * Returns the number of bytes stored in 'target' or -1 on error (inc. + * 'targsize' too small). + */ int -uuencode(u_char *src, u_int srclength, +uuencode(const u_char *src, u_int srclength, char *target, size_t targsize) { return __b64_ntop(src, srclength, target, targsize); } +/* + * Decode base64-encoded 'src' into buffer 'target' of 'targsize' bytes. + * Will skip leading and trailing whitespace. Returns the number of bytes + * stored in 'target' or -1 on error (inc. targsize too small). + */ int uudecode(const char *src, u_char *target, size_t targsize) { @@ -49,7 +64,7 @@ uudecode(const char *src, u_char *target, size_t targsize) ; for (; *p != '\0' && *p != ' ' && *p != '\t'; p++) ; - /* and remote trailing whitespace because __b64_pton needs this */ + /* and remove trailing whitespace because __b64_pton needs this */ *p = '\0'; len = __b64_pton(encoded, target, targsize); xfree(encoded); @@ -57,10 +72,16 @@ uudecode(const char *src, u_char *target, size_t targsize) } void -dump_base64(FILE *fp, u_char *data, int len) +dump_base64(FILE *fp, u_char *data, u_int len) { - u_char *buf = xmalloc(2*len); + char *buf; int i, n; + + if (len > 65536) { + fprintf(fp, "dump_base64: len > 65536\n"); + return; + } + buf = xmalloc(2*len); n = uuencode(data, len, buf, 2*len); for (i = 0; i < n; i++) { fprintf(fp, "%c", buf[i]);