[vlc-devel] [PATCH 2/2] include: strings: Add size check to vlc_hex_encode_binary
Alexandre Janniaux
ajanni at videolabs.io
Fri Apr 17 10:18:24 CEST 2020
Hi,
I agree that the warning is important.
You can probably use VLC_UNUSED() instead of (void) though.
Regards,
--
Alexandre Janniaux
Videolabs
On Fri, Apr 17, 2020 at 08:44:38AM +0200, Marvin Scholz wrote:
>
>
> On 17 Apr 2020, at 8:02, Thomas Guillem wrote:
>
> > On Fri, Apr 17, 2020, at 07:54, Steve Lhomme wrote:
> > > On 2020-04-16 20:58, Thomas Guillem wrote:
> > > >
> > > >
> > > > On Thu, Apr 16, 2020, at 16:05, Marvin Scholz wrote:
> > > > > ---
> > > > > include/vlc_hash.h | 16 ++++++++--------
> > > > > include/vlc_strings.h | 5 +++--
> > > > > src/text/strings.c | 6 ++++--
> > > > > 3 files changed, 15 insertions(+), 12 deletions(-)
> > > > >
> > > > > diff --git a/include/vlc_hash.h b/include/vlc_hash.h
> > > > > index 1e7757ac58..b5136677d2 100644
> > > > > --- a/include/vlc_hash.h
> > > > > +++ b/include/vlc_hash.h
> > > > > @@ -57,14 +57,14 @@
> > > > > * \param[out] output Output buffer to write the string to
> > > > > */
> > > > > #ifndef __cplusplus
> > > > > -#define vlc_hash_FinishHex(ctx, output, size)
> > > > > \
> > > > > - do {
> > > > > \
> > > > > - char out_tmp[_Generic((ctx),
> > > > > \
> > > > > - vlc_hash_md5_t *: VLC_HASH_MD5_DIGEST_SIZE)];
> > > > > \
> > > > > - _Generic((ctx),
> > > > > \
> > > > > - vlc_hash_md5_t *: vlc_hash_md5_Finish)
> > > > > \
> > > > > - (ctx, out_tmp, sizeof(out_tmp));
> > > > > \
> > > > > - vlc_hex_encode_binary(out_tmp, sizeof(out_tmp),
> > > > > output); \
> > > > > +#define vlc_hash_FinishHex(ctx, output, size)
> > > > > \
> > > > > + do {
> > > > > \
> > > > > + char out_tmp[_Generic((ctx),
> > > > > \
> > > > > + vlc_hash_md5_t *: VLC_HASH_MD5_DIGEST_SIZE)];
> > > > > \
> > > > > + _Generic((ctx),
> > > > > \
> > > > > + vlc_hash_md5_t *: vlc_hash_md5_Finish)
> > > > > \
> > > > > + (ctx, out_tmp, sizeof(out_tmp));
> > > > > \
> > > > > + vlc_hex_encode_binary(out_tmp, sizeof(out_tmp),
> > > > > output, size); \
> > > > > } while (0)
> > > > > #endif
> > > > >
> > > > > diff --git a/include/vlc_strings.h b/include/vlc_strings.h
> > > > > index 930d3347fb..5b4436141f 100644
> > > > > --- a/include/vlc_strings.h
> > > > > +++ b/include/vlc_strings.h
> > > > > @@ -125,10 +125,11 @@ VLC_API char *vlc_xml_encode(const char *str)
> > > > > VLC_MALLOC;
> > > > > * string in hexadecimal representation.
> > > > > *
> > > > > * \param input Input buffer
> > > > > - * \param size Input buffer size
> > > > > + * \param in_size Input buffer size
> > > > > * \param[out] output Output buffer to write the string to
> > > > > + * \param out_size Output buffer size
> > > > > */
> > > > > -VLC_API void vlc_hex_encode_binary(const void *input, size_t size,
> > > > > char *output);
> > > > > +VLC_API void vlc_hex_encode_binary(const void *input,
> > > > > size_t in_size,
> > > > > char *output, size_t out_size);
> > > > >
> > > > > /**
> > > > > * Base64 encoding.
> > > > > diff --git a/src/text/strings.c b/src/text/strings.c
> > > > > index 9676687aae..fc0babc7ce 100644
> > > > > --- a/src/text/strings.c
> > > > > +++ b/src/text/strings.c
> > > > > @@ -347,11 +347,13 @@ char *vlc_xml_encode (const char *str)
> > > > > }
> > > > >
> > > > > /* Hex encoding */
> > > > > -void vlc_hex_encode_binary(const void *input, size_t size,
> > > > > char *output)
> > > > > +void vlc_hex_encode_binary(const void *input, size_t in_size,
> > > > > + char *output, size_t out_size)
> > > > > {
> > > > > + assert(out_size >= in_size * 2 + 1); // 2 chars per
> > > > > byte + null
> > > >
> > > > Missing a (void) out_size; to clear warning on builds with NDEBUG.
> > >
> > > Can we just disable this warning ? We keep adding dummy code just to
> > > silence this warning. I don't think there are cases where it's
> > > useful to
> > > know we don't use a variable (apart when cleaning an API but then a
> > > grep
> > > is still needed to verify all the calls anyway).
> >
> > Personally, this warning saved me more than one time. I would prefer to
> > keep it.
> >
>
> Agree with Thomas, it's an important warning we should not disable.
>
> > >
> > > > Otherwise, LGTM for the set.
> > > >
> > > > > const unsigned char *buffer = input;
> > > > >
> > > > > - for (size_t i = 0; i < size; i++) {
> > > > > + for (size_t i = 0; i < in_size; i++) {
> > > > > sprintf(&output[i * 2], "%02hhx", buffer[i]);
> > > > > }
> > > > > }
> > > > > --
> > > > > 2.24.1 (Apple Git-126)
> > > > >
> > > > > _______________________________________________
> > > > > vlc-devel mailing list
> > > > > To unsubscribe or modify your subscription options:
> > > > > https://mailman.videolan.org/listinfo/vlc-devel
> > > > _______________________________________________
> > > > vlc-devel mailing list
> > > > To unsubscribe or modify your subscription options:
> > > > https://mailman.videolan.org/listinfo/vlc-devel
> > > >
> > > _______________________________________________
> > > vlc-devel mailing list
> > > To unsubscribe or modify your subscription options:
> > > https://mailman.videolan.org/listinfo/vlc-devel
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list