Skip to content

Commit 1dd5e5f

Browse files
committed
Revert "Go from 2 to 1 allocations in onig_region_resize"
This reverts commit b8760d6.
1 parent 7f7656a commit 1dd5e5f

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

regexec.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -905,27 +905,37 @@ onig_region_resize(OnigRegion* region, int n)
905905
if (n < ONIG_NREGION)
906906
n = ONIG_NREGION;
907907

908-
size_t region_half_sz = n * sizeof(OnigPosition);
909908
if (region->allocated == 0) {
910-
region->beg = (OnigPosition* )xmalloc(region_half_sz * 2);
909+
region->beg = (OnigPosition* )xmalloc(n * sizeof(OnigPosition));
911910
if (region->beg == 0)
912911
return ONIGERR_MEMORY;
913912

914-
region->end = (OnigPosition* )region->beg + n;
913+
region->end = (OnigPosition* )xmalloc(n * sizeof(OnigPosition));
914+
if (region->end == 0) {
915+
xfree(region->beg);
916+
return ONIGERR_MEMORY;
917+
}
915918

916919
region->allocated = n;
917920
}
918921
else if (region->allocated < n) {
919922
OnigPosition *tmp;
920923

921924
region->allocated = 0;
922-
tmp = (OnigPosition* )xrealloc(region->beg, region_half_sz * 2);
925+
tmp = (OnigPosition* )xrealloc(region->beg, n * sizeof(OnigPosition));
923926
if (tmp == 0) {
924927
xfree(region->beg);
928+
xfree(region->end);
925929
return ONIGERR_MEMORY;
926930
}
927931
region->beg = tmp;
928-
region->end = (OnigPosition*)region->beg + n;
932+
tmp = (OnigPosition* )xrealloc(region->end, n * sizeof(OnigPosition));
933+
if (tmp == 0) {
934+
xfree(region->beg);
935+
xfree(region->end);
936+
return ONIGERR_MEMORY;
937+
}
938+
region->end = tmp;
929939

930940
region->allocated = n;
931941
}
@@ -988,6 +998,7 @@ onig_region_free(OnigRegion* r, int free_self)
988998
if (r) {
989999
if (r->allocated > 0) {
9901000
xfree(r->beg);
1001+
xfree(r->end);
9911002
}
9921003
#ifdef USE_CAPTURE_HISTORY
9931004
history_root_free(r);

0 commit comments

Comments
 (0)