Skip to content

Commit 95dfb02

Browse files
authored
Check status returned by ipatch_container_init_iter() (#49)
1 parent a1af56b commit 95dfb02

8 files changed

+310
-109
lines changed

libinstpatch/IpatchContainer.c

+23-4
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,13 @@ ipatch_container_get_children_by_type(IpatchContainer *container, GType type)
193193
if(g_type_is_a(*child_types, type)) /* child type matches type? */
194194
{
195195
IPATCH_ITEM_RLOCK(container);
196-
ipatch_container_init_iter(container, &iter, *child_types);
196+
if(!ipatch_container_init_iter(container, &iter, *child_types))
197+
{
198+
ipatch_glist_unref_free(list);
199+
IPATCH_ITEM_RUNLOCK(container);
200+
return (NULL);
201+
}
202+
197203
obj = ipatch_iter_first(&iter);
198204

199205
while(obj) /* add object list to children list */
@@ -347,7 +353,11 @@ ipatch_container_insert(IpatchContainer *container, IpatchItem *item, int pos)
347353
if(*child_types) /* matching child type found? */
348354
{
349355
IPATCH_ITEM_WLOCK(container);
350-
ipatch_container_init_iter(container, &iter, *child_types);
356+
if(!ipatch_container_init_iter(container, &iter, *child_types))
357+
{
358+
IPATCH_ITEM_WUNLOCK(container);
359+
return;
360+
}
351361

352362
/* if position is less than 1 or off the end, get last object */
353363
if(pos < 0 || !ipatch_iter_index(&iter, pos))
@@ -438,7 +448,11 @@ ipatch_container_remove(IpatchContainer *container, IpatchItem *item)
438448
if(g_type_is_a(type, *child_types)) /* item type matches child type? */
439449
{
440450
IPATCH_ITEM_WLOCK(container);
441-
ipatch_container_init_iter(container, &iter, *child_types);
451+
if(!ipatch_container_init_iter(container, &iter, *child_types))
452+
{
453+
IPATCH_ITEM_WUNLOCK(container);
454+
return;
455+
}
442456

443457
/* search for @item */
444458
obj = ipatch_iter_first(&iter);
@@ -528,7 +542,12 @@ ipatch_container_count(IpatchContainer *container, GType type)
528542
if(g_type_is_a(*child_types, type)) /* child type matches type? */
529543
{
530544
IPATCH_ITEM_RLOCK(container);
531-
ipatch_container_init_iter(container, &iter, *child_types);
545+
if(!ipatch_container_init_iter(container, &iter, *child_types))
546+
{
547+
IPATCH_ITEM_RUNLOCK(container);
548+
return 0;
549+
}
550+
532551
count += ipatch_iter_count(&iter);
533552
IPATCH_ITEM_RUNLOCK(container);
534553
}

libinstpatch/IpatchDLSReader.c

+55-20
Original file line numberDiff line numberDiff line change
@@ -426,14 +426,22 @@ ipatch_dls_reader_fixup(IpatchDLSReader *reader, GError **err)
426426
if(!reader->is_gig) /* regular DLS file? (not GigaSampler) */
427427
{
428428
/* fixup DLS region sample indexes */
429-
ipatch_container_init_iter((IpatchContainer *)(reader->dls), &inst_iter,
430-
IPATCH_TYPE_DLS2_INST);
429+
if(!ipatch_container_init_iter((IpatchContainer *)(reader->dls), &inst_iter,
430+
IPATCH_TYPE_DLS2_INST))
431+
{
432+
return (FALSE);
433+
}
434+
431435
inst = ipatch_dls2_inst_first(&inst_iter);
432436

433437
while(inst) /* loop over instruments */
434438
{
435-
ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
436-
IPATCH_TYPE_DLS2_REGION);
439+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
440+
IPATCH_TYPE_DLS2_REGION))
441+
{
442+
return (FALSE);
443+
}
444+
437445
region = ipatch_dls2_region_first(&region_iter);
438446

439447
while(region) /* loop over instrument regions */
@@ -467,14 +475,21 @@ ipatch_dls_reader_fixup(IpatchDLSReader *reader, GError **err)
467475
}
468476
else /* reader->is_gig - fixup GigaSampler sub region sample indexes */
469477
{
470-
ipatch_container_init_iter((IpatchContainer *)(reader->dls), &inst_iter,
471-
IPATCH_TYPE_GIG_INST);
478+
if(!ipatch_container_init_iter((IpatchContainer *)(reader->dls), &inst_iter,
479+
IPATCH_TYPE_GIG_INST))
480+
{
481+
return (FALSE);
482+
}
483+
472484
inst = ipatch_dls2_inst_first(&inst_iter);
473485

474486
while(inst) /* loop over instruments */
475487
{
476-
ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
477-
IPATCH_TYPE_GIG_REGION);
488+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
489+
IPATCH_TYPE_GIG_REGION))
490+
{
491+
return (FALSE);
492+
}
478493
gig_region = ipatch_gig_region_first(&region_iter);
479494

480495
while(gig_region) /* loop over instrument regions */
@@ -528,16 +543,24 @@ ipatch_dls_nullify_fixups(IpatchDLSReader *reader)
528543
IpatchIter inst_iter, region_iter;
529544
int i;
530545

531-
ipatch_container_init_iter((IpatchContainer *)(reader->dls), &inst_iter,
546+
if(!ipatch_container_init_iter((IpatchContainer *)(reader->dls), &inst_iter,
532547
reader->is_gig ? IPATCH_TYPE_GIG_INST
533-
: IPATCH_TYPE_DLS2_INST);
548+
: IPATCH_TYPE_DLS2_INST))
549+
{
550+
return;
551+
}
552+
534553
inst = ipatch_dls2_inst_first(&inst_iter);
535554

536555
while(inst) /* loop over instruments */
537556
{
538-
ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
557+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
539558
reader->is_gig ? IPATCH_TYPE_GIG_REGION
540-
: IPATCH_TYPE_DLS2_REGION);
559+
: IPATCH_TYPE_DLS2_REGION))
560+
{
561+
return;
562+
}
563+
541564
region = ipatch_dls2_region_first(&region_iter);
542565

543566
while(region) /* loop over instrument regions */
@@ -744,9 +767,12 @@ ipatch_dls_reader_load_inst_list(IpatchDLSReader *reader, GError **err)
744767
g_return_val_if_fail(!err || !*err, FALSE);
745768

746769
/* initialize iterator to instrument list */
747-
ipatch_container_init_iter(IPATCH_CONTAINER(reader->dls), &iter,
770+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(reader->dls), &iter,
748771
reader->is_gig ? IPATCH_TYPE_GIG_INST
749-
: IPATCH_TYPE_DLS2_INST);
772+
: IPATCH_TYPE_DLS2_INST))
773+
{
774+
return (FALSE);
775+
}
750776

751777
while((chunk = ipatch_riff_read_chunk(riff, err)))
752778
{
@@ -923,8 +949,11 @@ ipatch_dls_reader_load_region_list(IpatchDLSReader *reader,
923949
g_return_val_if_fail(!err || !*err, FALSE);
924950

925951
/* initialize iterator to DLS2 region list */
926-
ipatch_container_init_iter(IPATCH_CONTAINER(inst), &iter,
927-
IPATCH_TYPE_DLS2_REGION);
952+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(inst), &iter,
953+
IPATCH_TYPE_DLS2_REGION))
954+
{
955+
return (FALSE);
956+
}
928957

929958
while((chunk = ipatch_riff_read_chunk(riff, err)))
930959
{
@@ -1076,8 +1105,11 @@ ipatch_gig_reader_load_region_list(IpatchDLSReader *reader,
10761105
inst = IPATCH_DLS2_INST(giginst);
10771106

10781107
/* initialize iterator to Gig region list */
1079-
ipatch_container_init_iter(IPATCH_CONTAINER(inst), &iter,
1080-
IPATCH_TYPE_GIG_REGION);
1108+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(inst), &iter,
1109+
IPATCH_TYPE_GIG_REGION))
1110+
{
1111+
return (FALSE);
1112+
}
10811113

10821114
while((chunk = ipatch_riff_read_chunk(riff, err)))
10831115
{
@@ -1283,8 +1315,11 @@ ipatch_dls_reader_load_wave_pool(IpatchDLSReader *reader, GError **err)
12831315
g_return_val_if_fail(!err || !*err, FALSE);
12841316

12851317
/* initialize iterator to sample list */
1286-
ipatch_container_init_iter(IPATCH_CONTAINER(reader->dls), &iter,
1287-
IPATCH_TYPE_DLS2_SAMPLE);
1318+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(reader->dls), &iter,
1319+
IPATCH_TYPE_DLS2_SAMPLE))
1320+
{
1321+
return (FALSE);
1322+
}
12881323

12891324
while((chunk = ipatch_riff_read_chunk(riff, err)))
12901325
{

libinstpatch/IpatchDLSWriter.c

+53-19
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,13 @@ ipatch_dls_writer_create_stores(IpatchDLSWriter *writer)
331331

332332
save_file = IPATCH_RIFF(writer)->handle->file;
333333

334-
list = ipatch_list_new(); // ++ ref list
334+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
335+
IPATCH_TYPE_DLS2_SAMPLE))
336+
{
337+
return (NULL);
338+
}
335339

336-
ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
337-
IPATCH_TYPE_DLS2_SAMPLE);
340+
list = ipatch_list_new(); // ++ ref list
338341

339342
/* traverse samples */
340343
for(sample = ipatch_dls2_sample_first(&iter); sample;
@@ -438,8 +441,11 @@ ipatch_dls_write_level_0(IpatchDLSWriter *writer, GError **err)
438441
return (FALSE);
439442
}
440443

441-
ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
442-
IPATCH_TYPE_DLS2_INST);
444+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
445+
IPATCH_TYPE_DLS2_INST))
446+
{
447+
return (FALSE);
448+
}
443449

444450
if(!ipatch_file_write_u32(riff->handle, ipatch_iter_count(&iter), err))
445451
{
@@ -459,8 +465,12 @@ ipatch_dls_write_level_0(IpatchDLSWriter *writer, GError **err)
459465
}
460466

461467
/* create hash of samples -> indexes */
462-
ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
463-
IPATCH_TYPE_DLS2_SAMPLE);
468+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
469+
IPATCH_TYPE_DLS2_SAMPLE))
470+
{
471+
return (FALSE);
472+
}
473+
464474
sample = ipatch_dls2_sample_first(&iter);
465475
index = 1; /* index + 1 to catch NULL in hash table */
466476

@@ -722,8 +732,12 @@ dls_write_inst_list(IpatchDLSWriter *writer, GError **err)
722732
guint32 uint;
723733
gboolean retval;
724734

725-
ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
726-
IPATCH_TYPE_DLS2_INST);
735+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
736+
IPATCH_TYPE_DLS2_INST))
737+
{
738+
return (FALSE);
739+
}
740+
727741
inst = ipatch_dls2_inst_first(&iter);
728742

729743
while(inst) /* loop over instruments */
@@ -794,11 +808,21 @@ dls_write_inst_list(IpatchDLSWriter *writer, GError **err)
794808

795809
/* region count */
796810
if(!writer->is_gig)
797-
ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
798-
IPATCH_TYPE_DLS2_REGION);
811+
{
812+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
813+
IPATCH_TYPE_DLS2_REGION))
814+
{
815+
return (FALSE);
816+
}
817+
}
799818
else
800-
ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
801-
IPATCH_TYPE_GIG_REGION);
819+
{
820+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &region_iter,
821+
IPATCH_TYPE_GIG_REGION))
822+
{
823+
return (FALSE);
824+
}
825+
}
802826

803827
ipatch_file_buf_write_u32(riff->handle, ipatch_iter_count(&region_iter));
804828

@@ -929,8 +953,11 @@ dls_write_region_list(IpatchDLSWriter *writer, IpatchDLS2Inst *inst,
929953
IpatchDLS2Region *region;
930954
IpatchIter iter;
931955

932-
ipatch_container_init_iter((IpatchContainer *)inst, &iter,
933-
IPATCH_TYPE_DLS2_REGION);
956+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &iter,
957+
IPATCH_TYPE_DLS2_REGION))
958+
{
959+
return (FALSE);
960+
}
934961

935962
region = ipatch_dls2_region_first(&iter);
936963

@@ -1064,8 +1091,11 @@ gig_write_region_list(IpatchDLSWriter *writer, IpatchGigInst *giginst,
10641091
IpatchGigSubRegion *subregion;
10651092
IpatchIter iter;
10661093

1067-
ipatch_container_init_iter((IpatchContainer *)inst, &iter,
1068-
IPATCH_TYPE_GIG_REGION);
1094+
if(!ipatch_container_init_iter((IpatchContainer *)inst, &iter,
1095+
IPATCH_TYPE_GIG_REGION))
1096+
{
1097+
return (FALSE);
1098+
}
10691099

10701100
region = ipatch_gig_region_first(&iter);
10711101

@@ -1673,8 +1703,12 @@ dls_write_wave_pool(IpatchDLSWriter *writer, GError **err)
16731703
/* start position of wave pool chunk */
16741704
start = ipatch_file_get_position(riff->handle);
16751705

1676-
ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
1677-
IPATCH_TYPE_DLS2_SAMPLE);
1706+
if(!ipatch_container_init_iter(IPATCH_CONTAINER(writer->dls), &iter,
1707+
IPATCH_TYPE_DLS2_SAMPLE))
1708+
{
1709+
return (FALSE);
1710+
}
1711+
16781712
sample = ipatch_dls2_sample_first(&iter);
16791713

16801714
for(index = 0; sample; index++, sample = ipatch_dls2_sample_next(&iter))

libinstpatch/IpatchItem.c

+10-2
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,11 @@ ipatch_item_recursive_base_set(IpatchContainer *container, SetParentBag *bag)
585585
while(*types) /* loop over list types */
586586
{
587587
/* initialize iterator to child list */
588-
ipatch_container_init_iter(container, &iter, *types);
588+
if(!ipatch_container_init_iter(container, &iter, *types))
589+
{
590+
return;
591+
}
592+
589593
child = ipatch_iter_first(&iter);
590594

591595
while(child) /* loop over child list */
@@ -669,7 +673,11 @@ ipatch_item_recursive_base_unset(IpatchContainer *container)
669673
while(*types) /* loop over list types */
670674
{
671675
/* initialize iterator to child list */
672-
ipatch_container_init_iter(container, &iter, *types);
676+
if(!ipatch_container_init_iter(container, &iter, *types))
677+
{
678+
return;
679+
}
680+
673681
child = ipatch_iter_first(&iter);
674682

675683
while(child) /* loop over child list */

0 commit comments

Comments
 (0)