summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <vicent@github.com>2014-04-07 20:51:39 +0200
committerVicent Marti <vicent@github.com>2014-04-07 20:51:39 +0200
commit5f74c476939894c4512262ec11188a44bfe4f50a (patch)
tree978f691947f9d2425b9c106b765c2fb3f8b81553
parent6720eef938d7614cd7a9fd2138a27da3667d62cf (diff)
parent7167fd7ef80f5f34337dd1c696f77ea2bb4d8bd8 (diff)
downloadlibgit2-5f74c476939894c4512262ec11188a44bfe4f50a.tar.gz
Merge pull request #2255 from libgit2/rb/fix-multiple-nfd-iconv-bug
Fix bug with multiple iconv conversions in one dir
-rw-r--r--src/path.c2
-rw-r--r--tests/core/iconv.c12
2 files changed, 13 insertions, 1 deletions
diff --git a/src/path.c b/src/path.c
index 1dccf90da..7cad28d45 100644
--- a/src/path.c
+++ b/src/path.c
@@ -782,6 +782,8 @@ int git_path_iconv(git_path_iconv_t *ic, char **in, size_t *inlen)
!git_path_has_non_ascii(*in, *inlen))
return 0;
+ git_buf_clear(&ic->buf);
+
while (1) {
if (git_buf_grow(&ic->buf, wantlen + 1) < 0)
return -1;
diff --git a/tests/core/iconv.c b/tests/core/iconv.c
index 8aedab206..cb85f458a 100644
--- a/tests/core/iconv.c
+++ b/tests/core/iconv.c
@@ -39,8 +39,9 @@ void test_core_iconv__decomposed_to_precomposed(void)
{
#ifdef GIT_USE_ICONV
char *data = nfd;
- size_t datalen = strlen(nfd);
+ size_t datalen, nfdlen = strlen(nfd);
+ datalen = nfdlen;
cl_git_pass(git_path_iconv(&ic, &data, &datalen));
GIT_UNUSED(datalen);
@@ -48,6 +49,15 @@ void test_core_iconv__decomposed_to_precomposed(void)
* (on platforms where iconv is enabled, of course).
*/
cl_assert_equal_s(nfc, data);
+
+ /* should be able to do it multiple times with the same git_path_iconv_t */
+ data = nfd; datalen = nfdlen;
+ cl_git_pass(git_path_iconv(&ic, &data, &datalen));
+ cl_assert_equal_s(nfc, data);
+
+ data = nfd; datalen = nfdlen;
+ cl_git_pass(git_path_iconv(&ic, &data, &datalen));
+ cl_assert_equal_s(nfc, data);
#endif
}