svn commit: r224749 - in stable/7/usr.sbin/makefs: . ffs

Martin Matuska mm at FreeBSD.org
Wed Aug 10 08:28:38 UTC 2011


Author: mm
Date: Wed Aug 10 08:28:37 2011
New Revision: 224749
URL: http://svn.freebsd.org/changeset/base/224749

Log:
  MFC r224690:
  
  Fix NetBSD PR bin/44114:
  makefs with -t cd9660 -o rockridge against directories with
  deep structure creates a corrupted cd9660 image.
  
  http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=44114
  
  Fix NetBSD PR bin/45217:
  makefs creates ISO9660 images that violate the ECMA-119 (ISO9660)
  specification. This is caused by erroneously writing 32 bytes
  with value 0x20 to the volume_set_id field and 128 bytes with value 0x20
  to the the following 37-byte fields in the PVD:
  copyright_file_id, abstract_file_id, bibliographic_file_id
  
  This causes, among other unwanted results the reserved4 field to be
  overwritten with the value 0x20. To comply with the specification,
  this field muse be zero. As a result, all FreeBSD distribution
  ISO images created with makefs have not been 100% valid ISO9660 files.
  
  http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=45217
  
  Reviewed by:	kientzle
  Obtained from:	NetBSD

Modified:
  stable/7/usr.sbin/makefs/cd9660.c
Directory Properties:
  stable/7/usr.sbin/makefs/   (props changed)
  stable/7/usr.sbin/makefs/ffs/ffs_bswap.c   (props changed)
  stable/7/usr.sbin/makefs/ffs/ffs_subr.c   (props changed)
  stable/7/usr.sbin/makefs/ffs/ufs_bswap.h   (props changed)
  stable/7/usr.sbin/makefs/getid.c   (props changed)

Modified: stable/7/usr.sbin/makefs/cd9660.c
==============================================================================
--- stable/7/usr.sbin/makefs/cd9660.c	Wed Aug 10 08:21:39 2011	(r224748)
+++ stable/7/usr.sbin/makefs/cd9660.c	Wed Aug 10 08:28:37 2011	(r224749)
@@ -223,13 +223,12 @@ cd9660_set_defaults(void)
 	/* Make sure the PVD is clear */
 	memset(&diskStructure.primaryDescriptor, 0, 2048);
 
-	memset(diskStructure.primaryDescriptor.volume_set_id,	0x20,32);
 	memset(diskStructure.primaryDescriptor.publisher_id,	0x20,128);
 	memset(diskStructure.primaryDescriptor.preparer_id,	0x20,128);
 	memset(diskStructure.primaryDescriptor.application_id,	0x20,128);
-	memset(diskStructure.primaryDescriptor.copyright_file_id, 0x20,128);
-	memset(diskStructure.primaryDescriptor.abstract_file_id, 0x20,128);
-	memset(diskStructure.primaryDescriptor.bibliographic_file_id, 0x20,128);
+	memset(diskStructure.primaryDescriptor.copyright_file_id, 0x20,37);
+	memset(diskStructure.primaryDescriptor.abstract_file_id, 0x20,37);
+	memset(diskStructure.primaryDescriptor.bibliographic_file_id, 0x20,37);
 
 	strcpy(diskStructure.primaryDescriptor.system_id,"NetBSD");
 
@@ -669,11 +668,11 @@ cd9660_finalize_PVD(void)
 	cd9660_pad_string_spaces(diskStructure.primaryDescriptor.application_id,
 	    128);
 	cd9660_pad_string_spaces(
-	    diskStructure.primaryDescriptor.copyright_file_id, 128);
+	    diskStructure.primaryDescriptor.copyright_file_id, 37);
 	cd9660_pad_string_spaces(
-		diskStructure.primaryDescriptor.abstract_file_id, 128);
+		diskStructure.primaryDescriptor.abstract_file_id, 37);
 	cd9660_pad_string_spaces(
-		diskStructure.primaryDescriptor.bibliographic_file_id, 128);
+		diskStructure.primaryDescriptor.bibliographic_file_id, 37);
 
 	/* Setup dates */
 	time(&tim);
@@ -1307,6 +1306,8 @@ cd9660_rrip_move_directory(cd9660node *d
 	/* Set the new name */
 	memset(dir->isoDirRecord->name, 0, ISO_FILENAME_MAXLENGTH_WITH_PADDING);
 	strncpy(dir->isoDirRecord->name, newname, 8);
+	dir->isoDirRecord->length[0] = 34 + 8;
+	dir->isoDirRecord->name_len[0] = 8;
 
 	return dir;
 }


More information about the svn-src-all mailing list