- while (argc > i++) {
- phpstr_free_t f = va_arg(argv, phpstr_free_t);
- phpstr *current = va_arg(argv, phpstr *);
- phpstr_append(buf, current->data, current->used);
- FREE_PHPSTR(f, current);
+ if (buf) {
+ while (argc > i++) {
+ phpstr_free_t f = va_arg(argv, phpstr_free_t);
+ phpstr *current = va_arg(argv, phpstr *);
+ if (NOMEM == phpstr_append(buf, current->data, current->used)) {
+ f = 1;
+ }
+ FREE_PHPSTR(f, current);
+ }
+
+ if (f) {
+ phpstr_free(&buf);
+ }