BUG/MEDIUM: spoe: Be sure the sample is found before setting its context

When a sample fetch is encoded, we use its context to set info about the
fragmentation. But if the sample is not found, the function sample_process()
returns NULL. So we me be sure the sample exists before setting its context.

This patch must be backported to 1.9 and 1.8.
diff --git a/include/proto/spoe.h b/include/proto/spoe.h
index c840c88..b3f7b4f 100644
--- a/include/proto/spoe.h
+++ b/include/proto/spoe.h
@@ -169,8 +169,8 @@
 			 * reamining. When all the sample is encoded, the offset is reset to 0.
 			 * So the caller know it can try to encode the next sample. */
 			struct buffer *chk = &smp->data.u.str;
-			unsigned int *len  = (smp->ctx.a[0] ? smp->ctx.a[0] : 0);
-			unsigned int *off  = (smp->ctx.a[1] ? smp->ctx.a[1] : 0);
+			unsigned int *len  = smp->ctx.a[0];
+			unsigned int *off  = smp->ctx.a[1];
 
 			if (!*off) {
 				/* First evaluation of the sample : encode the
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index 75854b7..82e2719 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -2195,8 +2195,10 @@
 
 		/* Fetch the argument value */
 		smp = sample_process(s->be, s->sess, s, dir|SMP_OPT_FINAL, arg->expr, NULL);
-		smp->ctx.a[0] = &ctx->frag_ctx.curlen;
-		smp->ctx.a[1] = &ctx->frag_ctx.curoff;
+		if (smp) {
+			smp->ctx.a[0] = &ctx->frag_ctx.curlen;
+			smp->ctx.a[1] = &ctx->frag_ctx.curoff;
+		}
 		ret = spoe_encode_data(smp, buf, end);
 		if (ret == -1 || ctx->frag_ctx.curoff)
 			goto too_big;