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>
Jeff King committed
Jul 24, 2018 at 06:50 UTC
c7d017d7e1cca37ca20f73c11fa9f1b319a2c3a5
5 files changed
+13
-13
convert.c
+3
-3
@@ -389,7 +389,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
389
struct strbuf *buf, const char *enc, int conv_flags)
390
{
391
char *dst;
392
- int dst_len;
392
+ size_t dst_len;
393
int die_on_error = conv_flags & CONV_WRITE_OBJECT;
394
395
/*
@@ -452,7 +452,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
452
*/
453
if (die_on_error && check_roundtrip(enc)) {
454
char *re_src;
455
- int re_src_len;
455
+ size_t re_src_len;
456
457
re_src = reencode_string_len(dst, dst_len,
458
enc, default_encoding,
@@ -480,7 +480,7 @@ static int encode_to_worktree(const char *path, const char *src, size_t src_len,
480
struct strbuf *buf, const char *enc)
481
{
482
char *dst;
483
- int dst_len;
483
+ size_t dst_len;
484
485
/*
486
* No encoding is specified or there is nothing to encode.
pretty.c
+1
-1
@@ -1538,7 +1538,7 @@ void format_commit_message(const struct commit *commit,
1538
}
1539
1540
if (output_enc) {
1541
- int outsz;
1541
+ size_t outsz;
1542
char *out = reencode_string_len(sb->buf, sb->len,
1543
output_enc, utf8, &outsz);
1544
if (out)
strbuf.c
+1
-1
@@ -134,7 +134,7 @@ void strbuf_ltrim(struct strbuf *sb)
134
int strbuf_reencode(struct strbuf *sb, const char *from, const char *to)
135
{
136
char *out;
137
- int len;
137
+ size_t len;
138
139
if (same_encoding(from, to))
140
return 0;
utf8.c
+3
-3
@@ -470,7 +470,7 @@ int utf8_fprintf(FILE *stream, const char *format, ...)
470
#else
471
typedef char * iconv_ibp;
472
#endif
473
-char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outsz_p)
473
+char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, size_t *outsz_p)
474
{
475
size_t outsz, outalloc;
476
char *out, *outpos;
@@ -534,9 +534,9 @@ static const char *fallback_encoding(const char *name)
534
return name;
535
}
536
537
-char *reencode_string_len(const char *in, int insz,
537
+char *reencode_string_len(const char *in, size_t insz,
538
const char *out_encoding, const char *in_encoding,
539
- int *outsz)
539
+ size_t *outsz)
540
{
541
iconv_t conv;
542
char *out;
utf8.h
+5
-5
@@ -25,14 +25,14 @@ void strbuf_utf8_replace(struct strbuf *sb, int pos, int width,
25
26
#ifndef NO_ICONV
27
char *reencode_string_iconv(const char *in, size_t insz,
28
- iconv_t conv, int *outsz);
29
-char *reencode_string_len(const char *in, int insz,
28
+ iconv_t conv, size_t *outsz);
29
+char *reencode_string_len(const char *in, size_t insz,
30
const char *out_encoding,
31
const char *in_encoding,
32
- int *outsz);
32
+ size_t *outsz);
33
#else
34
-static inline char *reencode_string_len(const char *a, int b,
35
- const char *c, const char *d, int *e)
34
+static inline char *reencode_string_len(const char *a, size_t b,
35
+ const char *c, const char *d, size_t *e)
36
{ if (e) *e = 0; return NULL; }
37
#endif
38