reencode_string: use size_t for string lengths

The iconv interface takes a size_t, which is the appropriate
type for an in-memory buffer. But our reencode_string_*
functions use integers, meaning we may get confusing results
when the sizes exceed INT_MAX. Let's use size_t
consistently.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2018-07-24 06:50:33 -04:00 коммит произвёл Junio C Hamano
Родитель 77aa03d6c7
Коммит c7d017d7e1
5 изменённых файлов: 13 добавлений и 13 удалений

Просмотреть файл

@ -389,7 +389,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
struct strbuf *buf, const char *enc, int conv_flags) struct strbuf *buf, const char *enc, int conv_flags)
{ {
char *dst; char *dst;
int dst_len; size_t dst_len;
int die_on_error = conv_flags & CONV_WRITE_OBJECT; int die_on_error = conv_flags & CONV_WRITE_OBJECT;
/* /*
@ -452,7 +452,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
*/ */
if (die_on_error && check_roundtrip(enc)) { if (die_on_error && check_roundtrip(enc)) {
char *re_src; char *re_src;
int re_src_len; size_t re_src_len;
re_src = reencode_string_len(dst, dst_len, re_src = reencode_string_len(dst, dst_len,
enc, default_encoding, enc, default_encoding,
@ -480,7 +480,7 @@ static int encode_to_worktree(const char *path, const char *src, size_t src_len,
struct strbuf *buf, const char *enc) struct strbuf *buf, const char *enc)
{ {
char *dst; char *dst;
int dst_len; size_t dst_len;
/* /*
* No encoding is specified or there is nothing to encode. * No encoding is specified or there is nothing to encode.

Просмотреть файл

@ -1538,7 +1538,7 @@ void format_commit_message(const struct commit *commit,
} }
if (output_enc) { if (output_enc) {
int outsz; size_t outsz;
char *out = reencode_string_len(sb->buf, sb->len, char *out = reencode_string_len(sb->buf, sb->len,
output_enc, utf8, &outsz); output_enc, utf8, &outsz);
if (out) if (out)

Просмотреть файл

@ -134,7 +134,7 @@ void strbuf_ltrim(struct strbuf *sb)
int strbuf_reencode(struct strbuf *sb, const char *from, const char *to) int strbuf_reencode(struct strbuf *sb, const char *from, const char *to)
{ {
char *out; char *out;
int len; size_t len;
if (same_encoding(from, to)) if (same_encoding(from, to))
return 0; return 0;

6
utf8.c
Просмотреть файл

@ -470,7 +470,7 @@ int utf8_fprintf(FILE *stream, const char *format, ...)
#else #else
typedef char * iconv_ibp; typedef char * iconv_ibp;
#endif #endif
char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outsz_p) char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, size_t *outsz_p)
{ {
size_t outsz, outalloc; size_t outsz, outalloc;
char *out, *outpos; char *out, *outpos;
@ -534,9 +534,9 @@ static const char *fallback_encoding(const char *name)
return name; return name;
} }
char *reencode_string_len(const char *in, int insz, char *reencode_string_len(const char *in, size_t insz,
const char *out_encoding, const char *in_encoding, const char *out_encoding, const char *in_encoding,
int *outsz) size_t *outsz)
{ {
iconv_t conv; iconv_t conv;
char *out; char *out;

10
utf8.h
Просмотреть файл

@ -25,14 +25,14 @@ void strbuf_utf8_replace(struct strbuf *sb, int pos, int width,
#ifndef NO_ICONV #ifndef NO_ICONV
char *reencode_string_iconv(const char *in, size_t insz, char *reencode_string_iconv(const char *in, size_t insz,
iconv_t conv, int *outsz); iconv_t conv, size_t *outsz);
char *reencode_string_len(const char *in, int insz, char *reencode_string_len(const char *in, size_t insz,
const char *out_encoding, const char *out_encoding,
const char *in_encoding, const char *in_encoding,
int *outsz); size_t *outsz);
#else #else
static inline char *reencode_string_len(const char *a, int b, static inline char *reencode_string_len(const char *a, size_t b,
const char *c, const char *d, int *e) const char *c, const char *d, size_t *e)
{ if (e) *e = 0; return NULL; } { if (e) *e = 0; return NULL; }
#endif #endif