source: lib/base64.c @ 1fa5109

Last change on this file since 1fa5109 was b38d399, checked in by dequis <dx@…>, at 2014-11-24T05:16:09Z

Use glib functions for base64 decoding/encoding

This fixes several coverity warnings about 'tainted data index sink' and
a fixme about thread safety in the old base64_decode implementation.

Had to adapt the code that used base64_encode_real:

  • oauth.c: different character set order, but it's for the nonce so it doesn't matter
  • libyahoo2.c: used as part of the auth, changes "+/=" into "._-". Fixed by encoding first the usual way through glib, then replacing.
  • Property mode set to 100644
File size: 2.4 KB
Line 
1/***************************************************************************\
2*                                                                           *
3*  BitlBee - An IRC to IM gateway                                           *
4*  Base64 handling functions. encode_real() is mostly based on the y64 en-  *
5*  coder from libyahoo2. Moving it to a new file because it's getting big.  *
6*                                                                           *
7*  Copyright 2006 Wilmer van der Gaast <wilmer@gaast.net>                   *
8*                                                                           *
9*  This program is free software; you can redistribute it and/or modify     *
10*  it under the terms of the GNU General Public License as published by     *
11*  the Free Software Foundation; either version 2 of the License, or        *
12*  (at your option) any later version.                                      *
13*                                                                           *
14*  This program is distributed in the hope that it will be useful,          *
15*  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
16*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
17*  GNU General Public License for more details.                             *
18*                                                                           *
19*  You should have received a copy of the GNU General Public License along  *
20*  with this program; if not, write to the Free Software Foundation, Inc.,  *
21*  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.              *
22*                                                                           *
23\***************************************************************************/
24
25#include <glib.h>
26#include <string.h>
27#include "base64.h"
28
29char *tobase64(const char *text)
30{
31        return base64_encode((const unsigned char *)text, strlen(text));
32}
33
34char *base64_encode(const unsigned char *in, int len)
35{
36        return g_base64_encode(in, len);
37}
38
39/* Just a simple wrapper, but usually not very convenient because of zero
40   termination. */
41char *frombase64(const char *in)
42{
43        unsigned char *out;
44        base64_decode(in, &out);
45        return (char*) out;
46}
47
48int base64_decode(const char *in, unsigned char **out)
49{
50        gsize len;
51        *out = g_base64_decode(in, &len);
52
53        /* Some silly functions expect it to be zero terminated */
54        *out = g_realloc(*out, len + 1);
55        out[0][len] = 0;
56
57        return len;
58}
Note: See TracBrowser for help on using the repository browser.