Signed-off-by: Vladimir Serbinenko <phco...@gmail.com> --- grub-core/lib/b64dec.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-)
diff --git a/grub-core/lib/b64dec.c b/grub-core/lib/b64dec.c index 868d98568..8aafa9700 100644 --- a/grub-core/lib/b64dec.c +++ b/grub-core/lib/b64dec.c @@ -26,7 +26,21 @@ #include <stdlib.h> #include <string.h> -#include "gpgrt-int.h" +#include <grub/crypto.h> + +struct _gpgrt_b64state +{ + int idx; + int quad_count; + char *title; + unsigned char radbuf[4]; + unsigned int crc; + gpg_err_code_t lasterr; + unsigned int flags; + unsigned int stop_seen:1; + unsigned int invalid_encoding:1; + unsigned int using_decoder:1; +}; /* The reverse base-64 list used for base-64 decoding. */ @@ -64,22 +78,22 @@ enum decoder_states string the decoder will skip everything until a "-----BEGIN " line has been seen, decoding ends at a "----END " line. */ gpgrt_b64state_t -_gpgrt_b64dec_start (const char *title) +gpgrt_b64dec_start (const char *title) { gpgrt_b64state_t state; char *t = NULL; if (title) { - t = xtrystrdup (title); + t = grub_strdup (title); if (!t) return NULL; } - state = xtrycalloc (1, sizeof (struct _gpgrt_b64state)); + state = grub_calloc (1, sizeof (struct _gpgrt_b64state)); if (!state) { - xfree (t); + grub_free (t); return NULL; } @@ -100,7 +114,7 @@ _gpgrt_b64dec_start (const char *title) /* Do in-place decoding of base-64 data of LENGTH in BUFFER. Stores the new length of the buffer at R_NBYTES. */ gpg_err_code_t -_gpgrt_b64dec_proc (gpgrt_b64state_t state, void *buffer, size_t length, +gpgrt_b64dec_proc (gpgrt_b64state_t state, void *buffer, size_t length, size_t *r_nbytes) { enum decoder_states ds = state->idx; @@ -115,7 +129,7 @@ _gpgrt_b64dec_proc (gpgrt_b64state_t state, void *buffer, size_t length, { *r_nbytes = 0; state->lasterr = GPG_ERR_EOF; - xfree (state->title); + grub_free (state->title); state->title = NULL; return state->lasterr; } @@ -241,7 +255,7 @@ _gpgrt_b64dec_proc (gpgrt_b64state_t state, void *buffer, size_t length, state->stop_seen = 1; break; default: - gpgrt_assert (!"invalid state"); + grub_fatal ("invalid state"); } } @@ -257,7 +271,7 @@ _gpgrt_b64dec_proc (gpgrt_b64state_t state, void *buffer, size_t length, /* Return an error code in case an encoding error has been found during decoding. */ gpg_err_code_t -_gpgrt_b64dec_finish (gpgrt_b64state_t state) +gpgrt_b64dec_finish (gpgrt_b64state_t state) { gpg_error_t err; @@ -270,10 +284,10 @@ _gpgrt_b64dec_finish (gpgrt_b64state_t state) err = state->lasterr; else { - xfree (state->title); + grub_free (state->title); err = state->invalid_encoding? GPG_ERR_BAD_DATA : 0; } - xfree (state); + grub_free (state); return err; } -- 2.49.0 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel