return 0;
}
(*p) += 2;
- str = emalloc(i + 1);
- if (i > 0) {
- memcpy(str, *p, i);
+
+ if (i == 0) {
+ str = empty_string;
+ } else {
+ str = estrndup(*p,i);
}
- str[i] = 0;
(*p) += i + 2;
(*rval)->type = IS_STRING;
(*rval)->value.str.val = str;
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &buf) == FAILURE) {
WRONG_PARAM_COUNT;
}
+
if ((*buf)->type == IS_STRING) {
const char *p = (*buf)->value.str.val;
- const char *q;
- q = p;
+ if ((*buf)->value.str.len == 0) {
+ RETURN_FALSE;
+ }
if (!php_var_unserialize(&return_value, &p, p + (*buf)->value.str.len)) {
- php_error(E_NOTICE, "unserialize() failed at offset %d",p-q);
+ php_error(E_NOTICE, "unserialize() failed at offset %d of %d bytes",p-(*buf)->value.str.val,(*buf)->value.str.len);
RETURN_FALSE;
}
} else {