That's how it looks like at first glance, but it's not actually the case. In the if:

```
        MAKE_STD_ZVAL(chunks);
        spprintf(&temp, 0, "%s.chunks", Z_STRVAL_P(files));
        ZVAL_STRING(chunks, temp, 0);
```
The original "chunks" is simply overwritten there... and the same here in the else:

```
    } else {
        …
        MAKE_STD_ZVAL(chunks);
        ZVAL_STRING(chunks, "fs.chunks", 1);
```

I first thought that that would cause a memory leak, but that is not true. The passed in chunk is automatically freed when the function ends (As it's part of function arguments) and as we don't change the original pointer's value (we just change chunks to point to something new), there is no memleak. The new chunks zval is freed later on.