On Tue, Aug 2, 2022 at 2:59 PM Ruediger Pluem <rpl...@apache.org> wrote:
>
> On 8/2/22 2:31 PM, Yann Ylavic wrote:
> > On Mon, Aug 1, 2022 at 8:15 PM Ruediger Pluem <rpl...@apache.org> wrote:
> >>
> >> On 8/1/22 5:05 PM, Ivan Zhakov wrote:
> >>>
> >>> My overall concern is that with the current solution as of r1902858, 
> >>> there are valid and
> >>> reasonable allocation patterns that will cause an unbounded memory usage.
> >>>
> >>> For example, nothing prevents current or future PCRE versions from doing 
> >>> this:
> >>>
> >>>     for (int i = 0; i < N; i++)
> >>>     {
> >>>         void *p = private_malloc();
> >>>         private_free(p);
> >>>     }
> >>>
> >>> which is going to cause an unbounded memory usage because private_free() 
> >>> is
> >>> a no-op and retains everything that was allocated.
> >>
> >> This is true, but these kind of allocation patterns would also cause a lot 
> >> of problems with a malloc/free backend and thus I think
> >> they are unlikely and would need to be addressed within PCRE. But even if 
> >> they are happening and cannot be fixed for our users
> >> by adjusting PCRE e.g. because they are stuck to distribution versions we 
> >> still could tackle this then with an apr_bucket_alloc /
> >> apr_bucket_free approach or worst case even with a malloc / free approach 
> >> for particular "bad" PCRE versions. But for now the
> >> current code seems to work well with the current PCRE allocation pattern.
> >
> > We could switch to an apr_allocator+apr_memnode_t pattern just now,
> > and trade the 8K used by the current (sub)pool for an overhead of
> > sizeof(apr_memnode_t)+8 only, and private_free() just calls
> > apr_allocator_free().
> >
> > Something like the attached patch?
>
> But this would allocate at least 8k for each private_malloc call, correct?

Yes, 8K with apr-1.x (4K with apr-trunk IIRC).

But anyway pcre2_match() is going to ask at least 40K for its first
allocation (or 20K with next versions), because it doubles the
number/size of the heap frames when needed and starts with 20K (either
on the stack for the current version, or on the heap for the next
versions [0]).

Regards;
Yann.

[0] 
https://github.com/PCRE2Project/pcre2/commit/d90fb23878eeb8bcb5153b1ebb23948e7de8cf34

Reply via email to