ensure xer encode yields the same number of bytes as it sends to the callback
diff --git a/skeletons/xer_encoder.c b/skeletons/xer_encoder.c
index 25b3bfa..c50ffa3 100644
--- a/skeletons/xer_encoder.c
+++ b/skeletons/xer_encoder.c
@@ -13,7 +13,8 @@
 xer_encode(asn_TYPE_descriptor_t *td, void *sptr,
 	enum xer_encoder_flags_e xer_flags,
 		asn_app_consume_bytes_f *cb, void *app_key) {
-	asn_enc_rval_t er, tmper;
+	asn_enc_rval_t er = {0, 0, 0};
+	asn_enc_rval_t tmper;
 	const char *mname;
 	size_t mlen;
 	int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2;
@@ -27,11 +28,10 @@
 
 	tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key);
 	if(tmper.encoded == -1) return tmper;
+	er.encoded += tmper.encoded;
 
 	ASN__CALLBACK3("</", 2, mname, mlen, ">\n", xcan);
 
-	er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded;
-
 	ASN__ENCODED_OK(er);
 cb_failed:
 	ASN__ENCODE_FAILED;