X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=libatalk%2Funicode%2Futil_unistr.c;h=aec13c820d35d5d87c0153acfda99abe56e7a1da;hp=416c38d0b86d5aaf098a5d09fb8891569fc8c324;hb=2fdd522410f80afcd055d7333f491ee6c0b4b9fa;hpb=dd7973d74cca6c48567a576ab2af4080aba64320 diff --git a/libatalk/unicode/util_unistr.c b/libatalk/unicode/util_unistr.c index 416c38d0..aec13c82 100644 --- a/libatalk/unicode/util_unistr.c +++ b/libatalk/unicode/util_unistr.c @@ -552,8 +552,6 @@ size_t precompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen) base = *in; while (*outlen > 2) { i += 2; - in++; - if (i == inplen) { *out = base; out++; @@ -561,7 +559,7 @@ size_t precompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen) *outlen -= 2; return o_len - *outlen; } - + in++; comb = *in; result = 0; @@ -589,7 +587,7 @@ size_t precompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen) /* Binary Search for Surrogate Pair */ else if ((0xD800 <= base) && (base < 0xDC00)) { - if ((0xDC00 <= comb) && (comb < 0xE000) && (i + 4 <= inplen)) { + if ((0xDC00 <= comb) && (comb < 0xE000) && (i + 6 <= inplen)) { base_sp = ((uint32_t)base << 16) | (uint32_t)comb; do { comb_sp = ((uint32_t)in[1] << 16) | (uint32_t)in[2]; @@ -598,7 +596,7 @@ size_t precompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen) i += 4; in +=2; } - } while ((i + 4 <= inplen) && result_sp) ; + } while ((i + 6 <= inplen) && result_sp) ; *out = base_sp >> 16; out++; @@ -614,6 +612,11 @@ size_t precompose_w (ucs2_t *name, size_t inplen, ucs2_t *comp, size_t *outlen) *outlen -= 2; i += 2; + if (i == inplen) { + out++; + *out = 0; + return o_len - *outlen; + } in++; base = *in;