palloc() is invoked with a specific formula for its allocation size in
quote_literal_cstr(). This wastes some memory, but the size is large
enough to cover even the worst-case scenarios.
No explanations were given about the reasons behind these numbers. This
commit adds more documentation about all that.
Author: Steve Chavez <
[email protected]>
Discussion: https://postgr.es/m/CAGRrpzZ9bToRWS+fAnjxDJrxwZN1QcJ-y1Pn2yg=Hst6rydLtw@mail.gmail.com
len = strlen(rawstr);
/* We make a worst-case result area; wasting a little space is OK */
- result = palloc(len * 2 + 3 + 1);
+ result = palloc(
+ (len * 2) /* doubling for every character if each one is
+ * a quote */
+ + 3 /* two outer quotes + possibly 'E' if needed */
+ + 1 /* null terminator */
+ );
newlen = quote_literal_internal(result, rawstr, len);
result[newlen] = '\0';