diff --git a/libblkid/src/superblocks/udf.c b/libblkid/src/superblocks/udf.c index 1ab8a1e26..c27debd29 100644 --- a/libblkid/src/superblocks/udf.c +++ b/libblkid/src/superblocks/udf.c @@ -367,7 +367,7 @@ real_blksz: } if (!udf_rev) { /* UDF-2.60: 2.1.5.3: UDF revision field shall indicate revision of UDF document - * We use this field as fallback value for ID_FS_VERSION when LVIDIU is missing */ + * We use maximal value from this field and from LVIDIU fields for ID_FS_VERSION */ if (strncmp(vd->type.logical.domain_id, "*OSTA UDF Compliant", sizeof(vd->type.logical.domain_id)) == 0) udf_rev = le16_to_cpu(vd->type.logical.udf_rev); } @@ -442,20 +442,19 @@ real_blksz: sizeof(*lvidiu)); if (!lvidiu) return errno ? -errno : 1; - /* Use Minimum UDF Read Revision as ID_FS_VERSION */ - lvidiu_udf_rev = le16_to_cpu(lvidiu->min_udf_read_rev); - if (lvidiu_udf_rev) - udf_rev = lvidiu_udf_rev; /* UDF-2.60: 2. Basic Restrictions & Requirements: * The Minimum UDF Read Revision value shall be at most #0250 * for all media with a UDF 2.60 file system. - * So in this case use Minimum UDF Write Revision as ID_FS_VERSION - * to distinguish between UDF 2.50 and UDF 2.60 discs. */ - if (lvidiu_udf_rev == 0x250) { - lvidiu_udf_rev = le16_to_cpu(lvidiu->min_udf_write_rev); - if (lvidiu_udf_rev > 0x250) - udf_rev = lvidiu_udf_rev; - } + * Because some 2.60 implementations put 2.50 into both LVIDIU + * fields and 2.60 into LVD, use maximal value from LVD, + * Minimum UDF Read Revision and Minimum UDF Write Revision for + * ID_FS_VERSION to distinguish between UDF 2.50 and UDF 2.60 discs. */ + lvidiu_udf_rev = le16_to_cpu(lvidiu->min_udf_read_rev); + if (lvidiu_udf_rev && udf_rev < lvidiu_udf_rev) + udf_rev = lvidiu_udf_rev; + lvidiu_udf_rev = le16_to_cpu(lvidiu->min_udf_write_rev); + if (lvidiu_udf_rev && udf_rev < lvidiu_udf_rev) + udf_rev = lvidiu_udf_rev; } } diff --git a/tests/expected/blkid/low-probe-udf-hdd-macosx-2.60-4096 b/tests/expected/blkid/low-probe-udf-hdd-macosx-2.60-4096 new file mode 100644 index 000000000..9d581137e --- /dev/null +++ b/tests/expected/blkid/low-probe-udf-hdd-macosx-2.60-4096 @@ -0,0 +1,11 @@ +ID_FS_BLOCK_SIZE=4096 +ID_FS_LABEL=Untitled_UDF_Volume +ID_FS_LABEL_ENC=Untitled\x20UDF\x20Volume +ID_FS_LOGICAL_VOLUME_ID=Untitled UDF Volume +ID_FS_TYPE=udf +ID_FS_USAGE=filesystem +ID_FS_UUID=691eed1320284d61 +ID_FS_UUID_ENC=691eed1320284d61 +ID_FS_VERSION=2.60 +ID_FS_VOLUME_ID=MacOS X UDF 2017-12-28 1145.55 +ID_FS_VOLUME_SET_ID=691EED13 (Mac OS X newfs_udf) UDF Volume Set diff --git a/tests/ts/blkid/images-fs/udf-hdd-macosx-2.60-4096.img.xz b/tests/ts/blkid/images-fs/udf-hdd-macosx-2.60-4096.img.xz new file mode 100644 index 000000000..68412ada5 Binary files /dev/null and b/tests/ts/blkid/images-fs/udf-hdd-macosx-2.60-4096.img.xz differ