]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/udf/unicode.c
udf: fix udf_build_ustr
[linux-2.6-omap-h63xx.git] / fs / udf / unicode.c
index 05bc505ec01a752ad7e1fa48a49fc2a97321051b..24d6165d21a9349b8b90e1f2806c471a0bec601a 100644 (file)
@@ -48,14 +48,16 @@ int udf_build_ustr(struct ustr *dest, dstring *ptr, int size)
 {
        int usesize;
 
-       if ((!dest) || (!ptr) || (!size))
+       if (!dest || !ptr || !size)
                return -1;
+       BUG_ON(size < 2);
 
-       memset(dest, 0, sizeof(struct ustr));
-       usesize = (size > UDF_NAME_LEN) ? UDF_NAME_LEN : size;
+       usesize = min_t(size_t, ptr[size - 1], sizeof(dest->u_name));
+       usesize = min(usesize, size - 2);
        dest->u_cmpID = ptr[0];
-       dest->u_len = ptr[size - 1];
-       memcpy(dest->u_name, ptr + 1, usesize - 1);
+       dest->u_len = usesize;
+       memcpy(dest->u_name, ptr + 1, usesize);
+       memset(dest->u_name + usesize, 0, sizeof(dest->u_name) - usesize);
 
        return 0;
 }