--- cdrkit/genisoimage/eltorito.c +++ cdrkit/genisoimage/eltorito.c @@ -286,10 +286,10 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc) memset(boot_desc, 0, sizeof (*boot_desc)); boot_desc->type[0] = 0; - memcpy(boot_desc->id, ISO_STANDARD_ID, sizeof (ISO_STANDARD_ID)); + strncpy(boot_desc->id, ISO_STANDARD_ID, sizeof (boot_desc->id)); boot_desc->version[0] = 1; - memcpy(boot_desc->system_id, EL_TORITO_ID, sizeof (EL_TORITO_ID)); + strncpy(boot_desc->system_id, EL_TORITO_ID, sizeof (boot_desc->system_id)); /* * search from root of iso fs to find boot catalog @@ -324,8 +324,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc) * may get truncated but who really reads this stuff! */ if (publisher) - memcpy_max(valid_desc.id, publisher, - MIN(23, strlen(publisher))); + strncpy(valid_desc.id, publisher, sizeof(valid_desc.id)); valid_desc.key1[0] = (char) 0x55; valid_desc.key2[0] = (char) 0xAA; --- cdrkit/genisoimage/genisoimage.h +++ cdrkit/genisoimage/genisoimage.h @@ -500,7 +500,6 @@ extern void set_721(char *, unsigned int); extern void set_733(char *, unsigned int); extern int sort_directory(struct directory_entry **, int); extern void generate_one_directory(struct directory *, FILE *); -extern void memcpy_max(char *, char *, int); extern int oneblock_size(int starting_extent); extern struct iso_primary_descriptor vol_desc; extern void xfwrite(void *buffer, int size, int count, FILE *file, int submode, --- cdrkit/genisoimage/write.c +++ cdrkit/genisoimage/write.c @@ -112,7 +112,6 @@ void generate_one_directory(struct directory *dpnt, FILE *outfile); static void build_pathlist(struct directory *node); static int compare_paths(void const *r, void const *l); static int generate_path_tables(void); -void memcpy_max(char *to, char *from, int max); void outputlist_insert(struct output_fragment *frag); static int file_write(FILE *outfile); static int pvd_write(FILE *outfile); @@ -161,6 +160,7 @@ static int sort_file_addresses(void); * we could write a tape, or write the disc directly */ #define FILL_SPACE(X) memset(vol_desc.X, ' ', sizeof (vol_desc.X)) +#define COPY_SPACE(X,S) if (S) strncpy(vol_desc.X, S, sizeof(vol_desc.X)) void set_721(char *pnt, unsigned int i) @@ -1725,18 +1725,6 @@ generate_path_tables() }/* generate_path_tables(... */ void -memcpy_max(char *to, char *from, int max) -{ - int n = strlen(from); - - if (n > max) { - n = max; - } - memcpy(to, from, n); - -}/* memcpy_max(... */ - -void outputlist_insert(struct output_fragment *frag) { struct output_fragment *nfrag; @@ -1912,14 +1900,14 @@ pvd_write(FILE *outfile) /* Next we write out the primary descriptor for the disc */ memset(&vol_desc, 0, sizeof (vol_desc)); vol_desc.type[0] = ISO_VD_PRIMARY; - memcpy(vol_desc.id, ISO_STANDARD_ID, sizeof (ISO_STANDARD_ID)); + strncpy(vol_desc.id, ISO_STANDARD_ID, sizeof (vol_desc.id)); vol_desc.version[0] = 1; memset(vol_desc.system_id, ' ', sizeof (vol_desc.system_id)); - memcpy_max(vol_desc.system_id, system_id, strlen(system_id)); + strncpy(vol_desc.system_id, system_id, sizeof (vol_desc.system_id)); memset(vol_desc.volume_id, ' ', sizeof (vol_desc.volume_id)); - memcpy_max(vol_desc.volume_id, volume_id, strlen(volume_id)); + strncpy(vol_desc.volume_id, volume_id, sizeof (vol_desc.volume_id)); should_write = last_extent - session_start; set_733((char *) vol_desc.volume_space_size, should_write); @@ -1946,35 +1934,25 @@ pvd_write(FILE *outfile) * fields, though. */ FILL_SPACE(volume_set_id); - if (volset_id) - memcpy_max(vol_desc.volume_set_id, volset_id, strlen(volset_id)); + COPY_SPACE(volume_set_id, volset_id); FILL_SPACE(publisher_id); - if (publisher) - memcpy_max(vol_desc.publisher_id, publisher, strlen(publisher)); + COPY_SPACE(publisher_id, publisher); FILL_SPACE(preparer_id); - if (preparer) - memcpy_max(vol_desc.preparer_id, preparer, strlen(preparer)); + COPY_SPACE(preparer_id, preparer); FILL_SPACE(application_id); - if (appid) - memcpy_max(vol_desc.application_id, appid, strlen(appid)); + COPY_SPACE(application_id, appid); FILL_SPACE(copyright_file_id); - if (copyright) - memcpy_max(vol_desc.copyright_file_id, copyright, - strlen(copyright)); + COPY_SPACE(copyright_file_id, copyright); FILL_SPACE(abstract_file_id); - if (abstract) - memcpy_max(vol_desc.abstract_file_id, abstract, - strlen(abstract)); + COPY_SPACE(abstract_file_id, abstract); FILL_SPACE(bibliographic_file_id); - if (biblio) - memcpy_max(vol_desc.bibliographic_file_id, biblio, - strlen(biblio)); + COPY_SPACE(bibliographic_file_id, biblio); FILL_SPACE(creation_date); FILL_SPACE(modification_date); @@ -2035,7 +2013,7 @@ evd_write(FILE *outfile) */ memset(&evol_desc, 0, sizeof (evol_desc)); evol_desc.type[0] = (unsigned char) ISO_VD_END; - memcpy(evol_desc.id, ISO_STANDARD_ID, sizeof (ISO_STANDARD_ID)); + strncpy(evol_desc.id, ISO_STANDARD_ID, sizeof (evol_desc.id)); evol_desc.version[0] = 1; jtwrite(&evol_desc, SECTOR_SIZE, 1, 0, TRUE); xfwrite(&evol_desc, SECTOR_SIZE, 1, outfile, 0, TRUE); --- cdrkit/wodim/scsi_cdr.c +++ cdrkit/wodim/scsi_cdr.c @@ -2061,6 +2061,20 @@ read_g1(SCSI *usalp, caddr_t bp, long addr, int cnt) } #endif /* DEBUG */ +static void +set_vendor_info(struct scsi_inquiry *inq, const char *vendor_info, + const char *prod_ident, const char *prod_revision) +{ + memset(inq->vendor_info, ' ', sizeof(inq->vendor_info)); + strncpy(inq->vendor_info, vendor_info, sizeof(inq->vendor_info)); + + memset(inq->prod_ident, ' ', sizeof(inq->prod_ident)); + strncpy(inq->prod_ident, prod_ident, sizeof(inq->prod_ident)); + + memset(inq->prod_revision, ' ', sizeof(inq->prod_revision)); + strncpy(inq->prod_revision, prod_revision, sizeof(inq->prod_revision)); +} + BOOL getdev(SCSI *usalp, BOOL print) { @@ -2181,26 +2195,25 @@ getdev(SCSI *usalp, BOOL print) if (inq->add_len == 0) { if (usalp->dev == DEV_UNKNOWN && got_inquiry) { usalp->dev = DEV_ACB5500; - strcpy(inq->vendor_info, - "ADAPTEC ACB-5500 FAKE"); + set_vendor_info(inq, "ADAPTEC", + "ACB-5500", "FAKE"); } else switch (usalp->dev) { - case DEV_ACB40X0: - strcpy(inq->vendor_info, - "ADAPTEC ACB-40X0 FAKE"); + set_vendor_info(inq, "ADAPTEC", + "ACB-40X0", "FAKE"); break; case DEV_ACB4000: - strcpy(inq->vendor_info, - "ADAPTEC ACB-4000 FAKE"); + set_vendor_info(inq, "ADAPTEC", + "ACB-4000", "FAKE"); break; case DEV_ACB4010: - strcpy(inq->vendor_info, - "ADAPTEC ACB-4010 FAKE"); + set_vendor_info(inq, "ADAPTEC", + "ACB-4010", "FAKE"); break; case DEV_ACB4070: - strcpy(inq->vendor_info, - "ADAPTEC ACB-4070 FAKE"); + set_vendor_info(inq, "ADAPTEC", + "ACB-4070", "FAKE"); break; } } else if (inq->add_len < 31) { @@ -2230,14 +2243,12 @@ getdev(SCSI *usalp, BOOL print) case INQ_SEQD: if (usalp->dev == DEV_SC4000) { - strcpy(inq->vendor_info, - "SYSGEN SC4000 FAKE"); + set_vendor_info(inq, "SYSGEN", "SC4000", "FAKE"); } else if (inq->add_len == 0 && inq->removable && inq->ansi_version == 1) { usalp->dev = DEV_MT02; - strcpy(inq->vendor_info, - "EMULEX MT02 FAKE"); + set_vendor_info(inq, "EMULEX", "MT02", "FAKE"); } break;