X-Git-Url: https://git.sven.stormbind.net/?p=sven%2Fexfat-utils.git;a=blobdiff_plain;f=libexfat%2Futf.c;h=d8968dbdcf6b377ec9d7236091908e6eb8de401a;hp=98ae52dbebc19445048025e39304ce719584581d;hb=refs%2Ftags%2Fupstream%2F1.2.6;hpb=0e295d91bb7f18afee1a0b0d587e5a0cf58bf2fb

diff --git a/libexfat/utf.c b/libexfat/utf.c
index 98ae52d..d8968db 100644
--- a/libexfat/utf.c
+++ b/libexfat/utf.c
@@ -3,7 +3,7 @@
 	exFAT file system implementation library.
 
 	Free exFAT implementation.
-	Copyright (C) 2010-2016  Andrew Nayenko
+	Copyright (C) 2010-2017  Andrew Nayenko
 
 	This program is free software; you can redistribute it and/or modify
 	it under the terms of the GNU General Public License as published by
@@ -108,7 +108,7 @@ int utf16_to_utf8(char* output, const le16_t* input, size_t outsize,
 	char* outp = output;
 	wchar_t wc;
 
-	while (inp - input < insize && le16_to_cpu(*inp))
+	while (inp - input < insize)
 	{
 		inp = utf16_to_wchar(inp, &wc, insize - (inp - input));
 		if (inp == NULL)
@@ -122,6 +122,13 @@ int utf16_to_utf8(char* output, const le16_t* input, size_t outsize,
 			exfat_error("name is too long");
 			return -ENAMETOOLONG;
 		}
+		if (wc == 0)
+			return 0;
+	}
+	if (outp - output >= outsize)
+	{
+		exfat_error("name is too long");
+		return -ENAMETOOLONG;
 	}
 	*outp = '\0';
 	return 0;
@@ -202,7 +209,7 @@ int utf8_to_utf16(le16_t* output, const char* input, size_t outsize,
 	le16_t* outp = output;
 	wchar_t wc;
 
-	while (inp - input < insize && *inp)
+	while (inp - input < insize)
 	{
 		inp = utf8_to_wchar(inp, &wc, insize - (inp - input));
 		if (inp == NULL)
@@ -216,6 +223,13 @@ int utf8_to_utf16(le16_t* output, const char* input, size_t outsize,
 			exfat_error("name is too long");
 			return -ENAMETOOLONG;
 		}
+		if (wc == 0)
+			break;
+	}
+	if (outp - output >= outsize)
+	{
+		exfat_error("name is too long");
+		return -ENAMETOOLONG;
 	}
 	*outp = cpu_to_le16(0);
 	return 0;