Index: /trunk/NEWS
===================================================================
--- /trunk/NEWS	(revision 328)
+++ /trunk/NEWS	(revision 329)
@@ -1,2 +1,8 @@
+2.0.0 2007-?-?
+== NEWS ==
+== ChangeLog ==
+ * fixed #56: xcache_set segfaults when xcache.var_size=0
+ 
+========
 1.2.0 2006-12-10
 NEWS
Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 328)
+++ /trunk/xcache.c	(revision 329)
@@ -1865,4 +1865,8 @@
 /* }}} */
 
+#define VAR_DISABLED_WARNING() do { \
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "xcache.var_size is either 0 or too small to enable var data caching"); \
+} while (0)
+
 static int xc_entry_init_key_var(xc_entry_t *xce, zval *name TSRMLS_DC) /* {{{ */
 {
@@ -1906,4 +1910,9 @@
 	xc_entry_data_var_t var;
 	zval *name;
+
+	if (!xc_var_caches) {
+		VAR_DISABLED_WARNING();
+		RETURN_NULL();
+	}
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &name) == FAILURE) {
@@ -1939,4 +1948,9 @@
 	zval *value;
 
+	if (!xc_var_caches) {
+		VAR_DISABLED_WARNING();
+		RETURN_NULL();
+	}
+
 	xce.ttl = XG(var_ttl);
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|l", &name, &value, &xce.ttl) == FAILURE) {
@@ -1969,4 +1983,9 @@
 	xc_entry_data_var_t var;
 	zval *name;
+
+	if (!xc_var_caches) {
+		VAR_DISABLED_WARNING();
+		RETURN_FALSE;
+	}
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &name) == FAILURE) {
@@ -2001,4 +2020,9 @@
 	zval *name;
 
+	if (!xc_var_caches) {
+		VAR_DISABLED_WARNING();
+		RETURN_FALSE;
+	}
+
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &name) == FAILURE) {
 		return;
@@ -2027,4 +2051,9 @@
 	long value = 0;
 	zval oldzval;
+
+	if (!xc_var_caches) {
+		VAR_DISABLED_WARNING();
+		RETURN_NULL();
+	}
 
 	xce.ttl = XG(var_ttl);
