/* check whether we have meta data, zero check works regardless of byte order */
if (mydata->is_persistent) {
PHAR_GET_32(buffer, mydata->metadata_len);
+ if (!mydata->metadata_len) buffer -= 4;
if (phar_parse_metadata(&buffer, &mydata->metadata, mydata->metadata_len TSRMLS_CC) == FAILURE) {
MAPPHAR_FAIL("unable to read phar metadata in .phar file \"%s\"");
}
}
if (entry.is_persistent) {
- if (phar_parse_metadata(&buffer, &entry.metadata, 0 TSRMLS_CC) == FAILURE) {
+ PHAR_GET_32(buffer, entry.metadata_len);
+ if (!entry.metadata_len) buffer -= 4;
+ if (phar_parse_metadata(&buffer, &entry.metadata, entry.metadata_len TSRMLS_CC) == FAILURE) {
pefree(entry.filename, entry.is_persistent);
MAPPHAR_FAIL("unable to read file metadata in .phar file \"%s\"");
}
PHAR_ENTRY_OBJECT();
if (entry_obj->ent.entry->metadata) {
+ if (entry_obj->ent.entry->is_persistent) {
+ zval *ret;
+ char *buf = estrndup((char *) entry_obj->ent.entry->metadata, entry_obj->ent.entry->metadata_len);
+ /* assume success, we would have failed before */
+ phar_parse_metadata(&buf, &ret, entry_obj->ent.entry->metadata_len TSRMLS_CC);
+ efree(buf);
+ RETURN_ZVAL(ret, 0, 1);
+ return;
+ }
RETURN_ZVAL(entry_obj->ent.entry->metadata, 1, 0);
}
}
}
/* }}} */
-static void phar_update_cached_entry(void *data, void *argument) /* {{{ */
+static int phar_update_cached_entry(void *data, void *argument) /* {{{ */
{
phar_entry_info *entry = (phar_entry_info *)data;
TSRMLS_FETCH();
if (entry->metadata_len) {
char *buf = estrndup((char *) entry->metadata, entry->metadata_len);
/* assume success, we would have failed before */
- phar_parse_metadata((char **) &entry->metadata, &entry->metadata, entry->metadata_len TSRMLS_CC);
+ phar_parse_metadata((char **) &buf, &entry->metadata, entry->metadata_len TSRMLS_CC);
efree(buf);
} else {
zval *t;
entry->metadata_str.len = 0;
}
}
+ return ZEND_HASH_APPLY_KEEP;
}
/* }}} */