Would you mind to share why pfree is needed? I tried to trace this with Valgrind, but even pfree(res) was present or not, there was no leak detected and both compiles without additional warnings. Wouldn't be res "trashed" at the end of the function (after next line) anyway?
The wrapper function string_to_text, which is a wrapper for cstring_to_text, includes pfree.
see ruleutils.c
static text * string_to_text(char *str) { text *result;
result = cstring_to_text(str); pfree(str); return result; }