diff options
Diffstat (limited to 'plugins/encodings')
| -rw-r--r-- | plugins/encodings/rost/base64.c | 42 | 
1 files changed, 17 insertions, 25 deletions
diff --git a/plugins/encodings/rost/base64.c b/plugins/encodings/rost/base64.c index 15a3ec1..5472ec0 100644 --- a/plugins/encodings/rost/base64.c +++ b/plugins/encodings/rost/base64.c @@ -61,7 +61,7 @@ static void g_scan_base64_modifier_finalize(GScanBase64Modifier *);  static char *g_scan_base64_modifier_get_name(const GScanBase64Modifier *);  /* Finalise l'encoddage en Base64 d'un motif transformé. */ -static void strip_base64_modifier_output(const sized_binary_t *, size_t, sized_binary_t *); +static void strip_base64_modifier_output(const sized_binary_t *, const sized_binary_t *, size_t, sized_binary_t *);  /* Transforme une séquence d'octets pour motif de recherche. */  static bool g_scan_base64_modifier_transform(const GScanBase64Modifier *, const sized_binary_t *, size_t, sized_binary_t **, size_t *); @@ -230,7 +230,8 @@ static char *g_scan_base64_modifier_get_name(const GScanBase64Modifier *modifier  /******************************************************************************  *                                                                             * -*  Paramètres  : input  = encodage en Base64 obtenu.                          * +*  Paramètres  : input  = contenu brut d'origine.                             * +*                tmpput = encodage en Base64 intermédiaire obtenu.            *  *                skip   = nombre de caractères initiaux à sauter.             *  *                output = encodage en Base64 final à conserver.               *  *                                                                             * @@ -242,32 +243,23 @@ static char *g_scan_base64_modifier_get_name(const GScanBase64Modifier *modifier  *                                                                             *  ******************************************************************************/ -static void strip_base64_modifier_output(const sized_binary_t *input, size_t skip, sized_binary_t *output) +static void strip_base64_modifier_output(const sized_binary_t *input, const sized_binary_t *tmpput, size_t skip, sized_binary_t *output)  { -    size_t final_len;                       /* Taille de représentation    */ +    size_t keep;                            /* Nombre d'octets immuables   */ -    final_len = input->len; +    keep = (input->len * 8) / 6; -    if (final_len > 0 && input->bin_data[final_len - 1] == '=') -    { -        while (final_len > 0 && input->bin_data[final_len - 1] == '=') -            final_len--; - -        final_len--; - -    } +    assert(keep >= skip);      if (skip > 0)          skip++; -    assert(final_len >= skip); - -    final_len -= skip; +    keep -= skip; -    output->len = final_len; -    output->bin_data = malloc(final_len * sizeof(bin_t)); +    output->len = keep; +    output->bin_data = malloc(keep * sizeof(bin_t)); -    memcpy(output->bin_data, input->static_bin_data + skip, final_len); +    memcpy(output->bin_data, tmpput->static_bin_data + skip, keep);  } @@ -320,7 +312,7 @@ static bool g_scan_base64_modifier_transform(const GScanBase64Modifier *modifier          result = base64_encode(_src, &tmp_out);          if (!result) goto exit; -        strip_base64_modifier_output(&tmp_out, 0, binary++); +        strip_base64_modifier_output(_src, &tmp_out, 0, binary++);          exit_szstr(&tmp_out); @@ -334,7 +326,7 @@ static bool g_scan_base64_modifier_transform(const GScanBase64Modifier *modifier          result = base64_encode(&tmp_in, &tmp_out);          if (!result) goto exit; -        strip_base64_modifier_output(&tmp_out, 1, binary++); +        strip_base64_modifier_output(&tmp_in, &tmp_out, 1, binary++);          exit_szstr(&tmp_out); @@ -349,7 +341,7 @@ static bool g_scan_base64_modifier_transform(const GScanBase64Modifier *modifier          result = base64_encode(&tmp_in, &tmp_out);          if (!result) goto exit; -        strip_base64_modifier_output(&tmp_out, 2, binary++); +        strip_base64_modifier_output(&tmp_in, &tmp_out, 2, binary++);          exit_szstr(&tmp_out); @@ -459,7 +451,7 @@ static bool g_scan_base64_modifier_transform_with_arg(const GScanBase64Modifier          result = _base64_encode(_src, &tmp_out, &arg->value.string);          if (!result) goto exit; -        strip_base64_modifier_output(&tmp_out, 0, binary++); +        strip_base64_modifier_output(_src, &tmp_out, 0, binary++);          exit_szstr(&tmp_out); @@ -473,7 +465,7 @@ static bool g_scan_base64_modifier_transform_with_arg(const GScanBase64Modifier          result = _base64_encode(&tmp_in, &tmp_out, &arg->value.string);          if (!result) goto exit; -        strip_base64_modifier_output(&tmp_out, 1, binary++); +        strip_base64_modifier_output(&tmp_in, &tmp_out, 1, binary++);          exit_szstr(&tmp_out); @@ -488,7 +480,7 @@ static bool g_scan_base64_modifier_transform_with_arg(const GScanBase64Modifier          result = _base64_encode(&tmp_in, &tmp_out, &arg->value.string);          if (!result) goto exit; -        strip_base64_modifier_output(&tmp_out, 2, binary++); +        strip_base64_modifier_output(&tmp_in, &tmp_out, 2, binary++);          exit_szstr(&tmp_out);  | 
